web-dev-qa-db-ja.com

PythonのFIXプロトコル-ログインとストリーミング見積もりの​​リクエストを実装する

python quickfix(FIX 4.2)を使用して基本的なFIXリクエストを実装しようとしていますが、ドキュメントがまばらで、完全に理解できません(そして、かなりの調査を行っています。質問の終わり-ですから、掘り下げずに質問ではないことをご安心ください)

ログインリクエスト--- A

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

ただし、ドキュメントと例はまばらであり、Thanksを介して自分の道を見つけるのに苦労しています

12
dowjones123

A-initiator.start()を呼び出すと、QuickFixによってログイン要求が自動的に送信されます。これに必要なドキュメントの重要な部分は ここ 、PYTHON翻訳例:

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を起動する方法を示しています。 .。
イニシエーター(自分の側からセッションをセットアップする)が必要な場合は、このコードフラグメントのacceptorSocketInitiatorに置き換えます。 。

settings = quickfix.SessionSettings(fileName)は構成ファイルをロードし、そこから多くのキーフィールドが取得されます。 Seeconfig file docs。

B-ライブデータを要求するには、相手に35 = Vメッセージを送信する必要があります。これを行うには、いくつかの変数を持つMarketDataRequestメッセージを定義し、そのメッセージを相手に送信します。 Seehere 。ただし、ここではドキュメントが間違っていると思います。メッセージを送信するには、fix.Session_sendToTarget(message)を呼び出す必要があります。

C-これについて心配する必要はありません。QuickFixはハートビートを処理し、切断後などに自動的にログオンします。設定ファイルfileNameでハートビート間隔(例:60秒)を設定します。 Seeconfig file docs。

6
Wapiti