Протокол FIX в Python — реализация входа в систему и запроса потоковой котировки

Я пытаюсь реализовать базовые запросы FIX с помощью быстрого исправления python (FIX 4.2), однако документации недостаточно, чтобы я мог полностью понять ее (и я провел довольно много исследований, ссылки в конце вопроса - так что будьте уверены что это не вопрос без раскопок)

Запрос на вход --- А

8=FIX.4.2 | 9=108 | 35=A | 34=1 | 49=ACCOUNTXXX | 52=20161116-00:00:15.281 | 56=CNX | 553=ACCOUNTXXXSTR1 | 554=Stater123 | 98=0 | 108=60 | 141=Y | 10=133 |

это будет ожидаемый ответ на вход

8=FIX.4.2 | 9=77 | 35=A | 49=CNX | 34=1 | 52=20161116-00:00:17.928 | 56= ACCOUNTXXXSTR1 | 98=0 | 108=60 | 141=Y | 10=140 |

Запрос текущей/потоковой котировки в EUR/USD --- B

8=FIX.4.2 | 9=142 | 35=V | 34=8 | 49=ACCOUNTXXX | 52=20161116-12:19:48.269 | 56=CNX | 146=1 | 55=EUR/USD | 262=2016110213351833862 | 263=2 | 264=1 | 265=1 | 266=Y | 267=2 | 269=0 | 269=1 | 10=110 |

Ответ будет таким, и мне нужно обработать его, оставив сокет/поток открытым --- STREAM

8=FIX.4.2 | 9=227 | 35=X | 49=CNX | 34=241 | 52=20161116-12:20:03.651 | 56=ACCOUNTXXX | 262=2016110213351834170 | 268=2 | 279=0 | 269=0 | 278=141 | 55=EUR/USD | 270=1.76371 | 15=GBP | 271=1000000 | 346=1 | 279=0 | 269=1 | 278=142 | 55=EUR/USD | 270=1.76406 | 15=GBP | 271=1000000 | 346=1 | 10=223 | 

отправлять сердцебиение каждые 60 секунд - C

8=FIX.4.2 | 9=59 | 35=0 | 34=3 | 49=ACCOUNTXXX | 52=20161116-00:01:15.868 | 56=CNX | 10=054 |

Я хотел немного совета и некоторую базовую структуру кода о том, как настроить код Python для отправки A, B, C и открыть сокет/поток, чтобы продолжать читать данные в STREAM и записывать их на консоль.

Где я уже смотрел?

https://github.com/quickfix/quickfix/blob/master/examples/executor/python/executor.py

https://futures.io/matlab-r-project-python/35213-python-quickfix.html

https://github.com/tianyilai/QuickFix-python-client/tree/master/spec

однако документация и примеры скудны, и я изо всех сил пытаюсь найти свой путь. Спасибо.


person dowjones123    schedule 16.11.2016    source источник
comment
Вы читали актуальную документацию на домашней странице QF? Они содержат примеры Python. quickfixengine.org/quickfix/doc/html   -  person Grant Birchmeier    schedule 16.11.2016


Ответы (1)


A -- QuickFix автоматически отправляет запрос на вход, когда вы звоните initiator.start(). Основная часть необходимой для этого документации находится здесь, с Пример перевода на ПИТОНЕ:

import quickfix

if len(sys.argv) <  2: return          # FAIL to have a mandatory number of args
fileName = sys.argv[1]                 # .SET fileName ( a configuration file )

try:
        settings     = quickfix.SessionSettings( fileName )
        application  = quickfix.MyApplication()
        storeFactory = quickfix.FileStoreFactory( settings )
        logFactory   = quickfix.FileLogFactory(   settings )
        acceptor     = quickfix.SocketAcceptor(   application, storeFactory, settings, logFactory )
        #                      .SocketInitiator( ... )  # Ref. below
        acceptor.start() #-------------------------------

        # while condition == true: do something
        #
        # pass; # onEoLife:

        acceptor.stop() #--------------------------------

except quickfix.ConfigError, e:
        print e

( Цит.: ) ... приведенный выше пример кода показывает, как вы можете запустить FIX-протокол acceptor, который прослушивает сокет. ...
Если вам нужен инициатор (для настройки сеанса с вашей стороны), вы должны заменить acceptor в этом фрагменте кода на SocketInitiator.

Строка settings = quickfix.SessionSettings(fileName) загружает конфигурационный файл, и многие ключевые поля берутся оттуда. См. документацию по файлу конфигурации.

B -- Чтобы запросить оперативные данные, вам необходимо отправить сообщение 35=V своему контрагенту. Для этого вы определяете сообщение MarketDataRequest с некоторыми переменными и отправляете это сообщение своему контрагенту. см. здесь. Однако обратите внимание, я думаю, что документация здесь неверна, и для отправки сообщения вам нужно позвонить fix.Session_sendToTarget(message).

C -- Вам не нужно об этом беспокоиться, QuickFix автоматически обрабатывает контрольные сообщения и повторный вход в систему после отключения и т. д. Вы устанавливаете интервал подтверждения (например, 60 секунд) в файле конфигурации fileName. См. документацию по файлу конфигурации.

person Wapiti    schedule 17.11.2016
comment
Можете ли вы также объяснить после шага B после отправки действительного сообщения, где захватить поток? Я успешно отправляю сообщение, но ничего не получаю в ответ в файле журнала. - person owaisafaq; 27.11.2017
comment
Привет, @wapiti. Я выполнил указанные вами шаги и получил эту ошибку: fix.Session_sendToTarget(mdr) quickfix.SessionNotFound: Session Not Found. Не могли бы вы помочь мне, в чем причина этого. Я внедряю quickfix python в свое приложение для получения рыночных данных. - person Salman Ahmed; 23.01.2019