#c #quickfix #fix-protocol
#c #быстрое исправление #исправление-протокол
Вопрос:
Я новичок в quickfix (я студент, пытающийся самостоятельно обучаться) и скачал примеры с quickfix.org (на c ) и смогли подключить ordermatch к tradeclient и заставить их общаться друг с другом. Я изменил файл конфигурации для ordermatch, чтобы разрешить нескольким клиентам, и это заработало (ordermatch может получать заказы от нескольких клиентов и управлять книгой заказов).
Я пытался найти способ изменить ordermatch, чтобы отправлять сообщения подтверждения ВСЕМ клиентам, а не только отправителю.
У меня есть отдельная реализация сборника лимитных заказов, и я хочу взломать входящие сообщения (заказы, отмены и т.д.) И сохранить их в моем сборнике лимитных заказов. Моя книга заказов просматривает книгу и принимает торговые решения на ее основе. Проблема в том, что я не могу понять, как заставить ordermatch отправлять все обновления этому клиенту. Кроме того, мне трудно понять, как «настроить» tradeclient, чтобы он не только отправлял заказы, но и получал и взламывал их.
Я думаю, мне нужно иметь акцептор и инициатор в каждом приложении (в ordermatch и в одном из tradeclients) — я читал, что это возможно и распространено, но не могу найти ни одного примера кода. Я на правильном пути здесь, или есть лучший способ настроить это? У кого-нибудь есть какой-нибудь пример кода, которым они могут поделиться? Я не планирую использовать это для реальной торговли, поэтому меня вполне устраивает сырой код.
Заранее спасибо
Брэндон
Комментарии:
1. Не могли бы вы указать веб-сайт или ссылку, где вы прочитали, что одно и то же приложение может использоваться и как инициатор, и как акцептор?
2. Привет, Брэндон, В общем, на любой вопрос, который вы задаете и получаете правильный ответ, пожалуйста, отметьте ответ как принятый (сначала добавьте голосование, если хотите). Таким образом, это помогает другим людям разобраться в вопросе. И отправляет хорошее подтверждение человеку, который ответил. Это также увеличивает ваши шансы на получение хороших ответов.
Ответ №1:
Одно и то же приложение может выступать в качестве инициатора для одного сеанса и акцептора для другого сеанса. Фактически у вас может быть несколько сеансов акцептора / инициатора из одного приложения. Файл конфигурации должен определять несколько сеансов. Или у вас может быть отдельный конфигурационный файл для каждого сеанса.
Комментарии:
1. Спасибо! Я забыл вернуться сюда и сказать, что я смог выполнить это, используя отдельные конфигурации для каждого сеанса.
2. То, что вы можете, не означает, что вы должны. Использование одного и того же экземпляра исправленного приложения для акцептора и инициатора приведет к разного рода путанице
Ответ №2:
Если я правильно понимаю, я думаю, что вы пытаетесь перехватывать сообщения между OMS и брокером (например, клиентом и сервером) и действовать в зависимости от того, что они содержат. Есть несколько способов, которыми вы могли бы это сделать, включая перехват на уровне TCP, но я думаю, что самым простым способом может быть использование двух отдельных программ, как предлагает @DumbCoder, и подключение к одной из них в качестве акцептора от ваших клиентов, обработка сообщений, а затем передача их другой программе по другому протоколу, а затем отправка их из другой программы. Теоретически вы можете создать другой экземпляр движка в вашей программе и, используя разные конфигурационные файлы при создании (когда вызывается FIX::FileStoreFactory storeFactory(*settings)) каждого экземпляра движка. Однако я никогда не видел, чтобы это делалось, и поэтому чувствую, что это может вызвать проблемы. Если вы попробуете этот метод, я бы настоятельно посоветовал поместить инициатор и соединитель в разные библиотеки DLL, которые могли бы достаточно просто разделить два экземпляра движка.
Комментарии:
1. ТЕХНОЛОГИЯ, это то, что я пытаюсь сделать. Я никогда не делал ничего подобного @DumbCoder и вашему предложению. Есть ли у этой идеи общее название? Какой протокол вы бы предложили (или что вы имеете в виду), когда говорите «через другой протокол ..». Я ищу несколько подсказок по ключевым словам, чтобы начать поиск в Google. На мой взгляд, я думал о попытке сделать то, что, по вашим словам, теоретически возможно (вызов отдельных конфигураций), поэтому, если я выясню, как заставить это работать, я опубликую ссылку на какой-нибудь код. Как мне убедиться, что у меня есть инициатор / акцептор в разных библиотеках DLL? Еще раз спасибо.
2. @Brandon — Вместо того, чтобы использовать передачу на основе протокола, вы можете использовать библиотеку обмена сообщениями и не беспокоиться обо всем.
3. @DumbCoder Я имел в виду, что он должен использовать библиотеки обмена сообщениями, а не протокол raw, спасибо за разъяснение для меня.
4. @Brandon Я бы, вероятно, использовал xml для передачи по внутреннему соединению tcp / ip (выберите библиотеку), поскольку мы часто используем xml здесь для RPC и т.д. Решение dll требует создания 3 проектов; акцептор, инициатор и основная программа. Все, кроме основной программы, настроены на выходные библиотеки DLL, и эти библиотеки DLL импортируются вашей основной программой. Если вам нужна дополнительная помощь с этим, я могу предоставить (готов работать)