Quickfix: акцептор и инициатор в одном приложении?

Я новичок в quickfix (я студент, пытающийся научить себя), скачал примеры с quickfix.org (на С++) и смог подключить ordermatch к tradeclient и заставить их общаться друг с другом. Я изменил файл конфигурации для ordermatch, чтобы разрешить несколько клиентов, и это заработало (ordermatch может получать заказы от нескольких клиентов и управлять книгой заказов).

Я пытался найти способ изменить порядок соответствия, чтобы отправлять подтверждающие сообщения ВСЕМ клиентам, а не только отправителю.

У меня есть отдельная реализация лимитной книги ордеров, и я хочу взломать входящие сообщения (заказы, отмены и т. д.) и сохранить их в своей лимитной книге ордеров. Моя книга заказов наблюдает за книгой и принимает торговые решения на ее основе. Проблема в том, что я не могу понять, как заставить ordermatch отправлять все обновления этому клиенту. Кроме того, мне трудно понять, как «раскрутить» торговый клиент, чтобы он не только отправлял заказы, но и получал и взломал их.

Я думаю, что мне нужно иметь акцептор и инициатор в каждом приложении (в порядке соответствия и в одном из торговых клиентов) - я читал, что это возможно и распространено, но не могу найти пример кода. Я на правильном пути, или есть лучший способ настроить это? У кого-нибудь есть пример кода, которым они могут поделиться? Я не планирую использовать это для реальной торговли, поэтому сырой код меня вполне устраивает.

заранее спасибо

Брэндон


person Brandon    schedule 10.05.2011    source источник
comment
Не могли бы вы передать веб-сайт или ссылку, где вы читали, что одно и то же приложение может использоваться как инициатор, так и акцептор?   -  person DumbCoder    schedule 10.05.2011
comment
Привет, Брэндон. В общем, любой вопрос, который вы задаете, и вы получаете правильный ответ, пожалуйста, отметьте ответ как принятый (сначала добавьте голосование, если хотите). Таким образом, это помогает другим людям, рассматривающим вопрос. И посылает хорошее подтверждение человеку, который ответил. Это также увеличивает ваши шансы на получение хороших ответов.   -  person Groovy    schedule 05.10.2011


Ответы (2)


Одно и то же приложение может действовать как инициатор для одного сеанса и акцептор для другого сеанса. На самом деле вы можете иметь несколько сеансов Acceptor/Initiator из одного приложения. Файл конфигурации должен определять несколько сеансов. Или вы можете иметь отдельный файл конфигурации для каждой сессии.

person Groovy    schedule 30.08.2011
comment
Спасибо! Я забыл вернуться сюда и сказать, что смог добиться этого, используя отдельные конфигурации для каждой сессии. - person Brandon; 31.08.2011
comment
Однако то, что вы можете, не означает, что вы должны. Использование одного и того же экземпляра приложения исправления для акцептора и инициатора приведет к разного рода путанице. - person Andrew Rimmer; 12.04.2013

Если я правильно понимаю, я думаю, что вы пытаетесь перехватить сообщения между OMS и брокером (например, клиент и сервер) и действовать в зависимости от того, что они содержат. Есть несколько способов сделать это, включая перехват на уровне TCP, но я думаю, что проще всего использовать две отдельные программы, как предлагает @DumbCoder, и подключиться к одной из них в качестве получателя от ваших клиентов, обработать сообщения, а затем передать их другой программе через другой протокол, а затем отправить их из другой программы. Теоретически вы можете создать еще один экземпляр движка в своей программе и, используя разные файлы конфигурации при создании (когда вызывается FIX::FileStoreFactory storeFactory(*settings);) каждого экземпляра движка. Однако я никогда не видел, чтобы это делалось, и поэтому чувствую, что это может вызвать проблемы. Если вы попробуете этот метод, я настоятельно рекомендую поместить инициатор и коннектор в разные dll, которые могут достаточно просто разделить два экземпляра движка.

person MD-Tech    schedule 10.05.2011
comment
TECH это то, что я пытаюсь сделать. Я никогда не делал ничего подобного @DumbCoder и твоему предложению. Есть ли у этой идеи общее название? Какой протокол вы бы предложили (или что вы имеете в виду), когда вы говорите через другой протокол... Я ищу некоторые намеки на ключевые слова, чтобы начать гуглить. На мой взгляд, я думал о том, чтобы попытаться сделать то, что вы сказали, теоретически возможно (вызов отдельных конфигураций), поэтому, если я выясню, как это сделать, я опубликую ссылку на какой-нибудь код. Как мне убедиться, что у меня есть инициатор/акцептор в разных dll? Спасибо еще раз. - person Brandon; 13.05.2011
comment
@Brandon - Вместо использования передачи на основе протокола вы можете использовать библиотеку обмена сообщениями и не беспокоиться ни о чем. - person DumbCoder; 13.05.2011
comment
@DumbCoder Я имел в виду, что он должен использовать библиотеки обмена сообщениями, а не необработанный протокол, спасибо за разъяснения для меня. - person MD-Tech; 13.05.2011
comment
@Brandon Я бы, вероятно, использовал xml для передачи по внутреннему соединению tcp / ip (выберите библиотеку), поскольку мы часто используем xml здесь для RPC и т. Д. Решение dll требует создания 3 проектов; акцептор, инициатор и основная программа. Все, кроме основной программы, настроены на вывод dll, и эти dll импортируются вашей основной программой. Если вам нужна дополнительная помощь с этим, я могу предоставить (готов работать) - person MD-Tech; 13.05.2011