Использование протокола FIX для подключения к брокеру

В настоящее время я пытаюсь создать программу с использованием протокола FIX для связи с брокером (currenex). Я отправил свое (самогенерированное) сообщение о входе в систему на сервер и получил кое-что в ответ. Это то, что я отправил

8=FIX.4.49=8835=A49=xxxxxxxx56=CNX34=152=20140718-11:40:18.24498=0108=30141=Y554=xxxxxx10=128

(SenderCompID и пароль были заменены) и я получил

8=FIX.4.49=7635=A34=149=CNX52=20140718-11:40:33.22456=xxxxxxxx141=Y98=0108=3010=1458=FIX.4.49=7035=h34=249=CNX52=20140718-11:40:33.22656=xxxxxxxx336=0340=210=128

вернулся с сервера. Я думаю, что правильно построил сообщение о входе в систему (или нет?). Но когда я отправил второй запрос MarketDataRequest

8=FIX.4.49=13735=V49=xxxxxxxx56=CNX34=252=20140718-11:42:53.504262=363263=1264=0265=1266=N267=2269=1269=0146=155=GBP/USD554=xxxx10=013

У меня вообще не было ответа. Я спросил брокера, и они сказали, что соединение разрывается сразу после каждого входа в систему. Я подумал, что это какая-то проблема с соединением, и попытался использовать RESTClient (Postman) для отправки сообщения, но результат был таким же. Может ли кто-нибудь взглянуть на мои сообщения и указать, есть ли что-то глупое, пожалуйста? Все, что мне нужно, это обменный курс в реальном времени, поэтому пример простого сообщения FIX будет очень полезен. Большое спасибо!

С уважением, Бо


person bo fu    schedule 18.07.2014    source источник
comment
Я не знаю, какой язык вы используете, но я думаю, что стоит потратить время на то, чтобы проверить один из движков QuickFIX. Вы не хотите самостоятельно реализовывать низкоуровневую транспортную логику (пульсы, переподключения и т. д.), потому что это отстой. Порты QF доступны для C++, Java, C# и Go. Порт C++ также имеет оболочки Ruby и Python. Существует также гем JRuby quickfix-jruby, который использует порт Java.   -  person Grant Birchmeier    schedule 18.07.2014
comment
Привет, Грант, спасибо за комментарий. Я использую LabVIEW для создания соединения. Я думаю, что у меня уже работал один (конечно, не в полной мере). Но я думаю, что вы правы. Если я буду использовать больше функций, я рассмотрю QuickFIX.   -  person bo fu    schedule 28.07.2014
comment
Привет Бо. Надеюсь, вы используете Ruby. Мне было интересно, перешли ли вы на QuickFIX и сработало ли это для вас. В настоящее время пытаюсь использовать TCPSocket для открытия соединения ... не может даже это работать, поэтому подумал о QuickFIX, но очень мало помощи.   -  person SimonKiteley    schedule 04.12.2017


Ответы (2)


В ответном сообщении при входе в систему говорится, что ваша торговая сессия открыта (340=2), поэтому проблема не на стороне брокера. Я думаю, что ваша программа отключает TCP/IP-соединение от сервера после сообщения о входе в систему. Протокол FIX настаивает на том, чтобы соединение TCP/IP поддерживалось в течение всего сеанса FIX, иначе сеанс будет закрыт. Поэтому вам нужно переписать свою программу, чтобы поддерживать соединение, и просто отправлять туда свои запросы и слушать ответы. Не закрывайте соединение.

person Konstantin V. Salikhov    schedule 18.07.2014
comment
Спасибо, Константин. Это звучит разумно. Я попробую это и сообщу вам результат. Ваше здоровье. - person bo fu; 18.07.2014
comment
Привет, Константин, я попытался сохранить соединение, и да, я получил ответное сообщение для MarketDataRequest. Но содержание не то, что я ожидал. Вот что я получил 20140718-10:48:56.93556=xxxxxxxx336=0340=210=147, что аналогично ответу на сообщение о входе в систему. Должен ли я ожидать сообщений 34=3 и 34=4? Очень признателен за вашу помощь. Ваше здоровье. - person bo fu; 18.07.2014
comment
Не стесняйтесь задавать его как отдельный вопрос - person Konstantin V. Salikhov; 18.07.2014
comment
Ага, подойдет. Спасибо. :) - person bo fu; 18.07.2014

Попробуйте использовать инструмент Minifix, который будет поддерживать пульсацию и сеансовое соединение. В идеале для запроса 35=V вы должны получить
35=W = Снимок рыночных данных/Полное обновление
35=X = Добавочное обновление рыночных данных
35=Y = Отклонение запроса рыночных данных

вы получаете 35=3 (отклонение) или 35=4 (или последовательный сброс) в ответ на запрос 35=A.

person dexter87    schedule 31.08.2017