Python中的FIX协议 - 实现流媒体报价的登录和请求

dow*_*123 12 python quickfix fix-protocol

我试图用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 |
Run Code Online (Sandbox Code Playgroud)

这将是预期的登录响应

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 |
Run Code Online (Sandbox Code Playgroud)

请求以欧元/美元为单位的实时/流媒体报价--- 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 |
Run Code Online (Sandbox Code Playgroud)

响应将是这样的,我需要通过保持套接字/流打开来处理它 - 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 | 
Run Code Online (Sandbox Code Playgroud)

每60秒发送一次心跳 - C

8=FIX.4.2 | 9=59 | 35=0 | 34=3 | 49=ACCOUNTXXX | 52=20161116-00:01:15.868 | 56=CNX | 10=054 |
Run Code Online (Sandbox Code Playgroud)

我想要一些建议和一些基本的代码结构,如何设置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

然而,文档和示例很稀疏,我正在努力找到我的方式通过谢谢

Wap*_*iti 8

A –呼叫时,QuickFix自动发送登录请求initiator.start()。您需要的文档的关键一点在这里,其中包括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
Run Code Online (Sandbox Code Playgroud)

Cit .: ...上面的示例代码显示了如何启动acceptor侦听套接字的FIX协议 。 ...
如果你想,而发起者(设置从你身边一个会话),你将取代acceptor与该代码段SocketInitiator

该行将settings = quickfix.SessionSettings(fileName)加载配置文件,并且许多关键字段都从那里获取。请参阅配置文件文档。

B-为了请求实时数据,您需要向对方发送35 = V的消息。为此,您定义一条MarketDataRequest消息,该消息具有一些变量,然后将该消息发送给交易对手。这里。不过请注意,我认为这里的文档有误,要发送您需要致电的mssage fix.Session_sendToTarget(message)

C-您无需担心,QuickFix会处理心跳并在断开连接后自动登录等。您可以在配置文件中设置心跳间隔(例如60秒)fileName请参阅配置文件文档。

  • 您能否在步骤 B 之后解释一下,一旦发送了有效消息,在哪里捕获流?我成功发送消息,但在日志文件中没有得到任何回报。 (2认同)