quickfix:如何从消息中获取符号(标志55)?

3 投票
1 回答
2227 浏览
提问于 2025-04-17 19:35

我正在使用Python的QuickFix库,并通过FIX4.2连接到TT FIX适配器。

我已经成功登录,并发送了两个金融工具的市场数据请求。这一切都很顺利,来自这些工具的数据也如预期般到达。我可以从消息中获取各种信息。

不过,我在获取符号(标志55)字段时遇到了麻烦。

    import quickfix as fix

    def fromApp(self, message, sessionID):

        ID = fix.Symbol()
        message.getField(ID)
        print ID

对于我收到的第一条消息(初始市场数据快照,标志35 = W),这一切都能正常工作。但一旦我开始接收增量更新(标志35 = X),我就无法再获取符号字段。每条到达的消息都出现了“字段未找到”的错误。

这让我感到困惑,因为在日志中,无论消息类型是W还是X,符号字段总是存在的。

我想,符号可能在刷新消息的头部,所以当35 = W时我尝试使用get.Field(ID),而当35 = X时我尝试get.Header().getField(ID),但都没有成功。

有没有人能帮我搞清楚这是怎么回事?我希望能够明确告诉我的计算机正在查看哪些金融工具。

谢谢

1 个回答

5

你的问题其实很简单,但里面有一些误解。

1) Symbol(符号)永远不会出现在头部,它是在消息的主体部分。

2) 在X消息中,符号是在一个重复组里。你首先需要用msg.GetGroup()获取一个组对象,然后从这个对象中获取符号。你可以参考这个示例代码,它来自重复组的文档页面

3) 在W消息中,符号不在任何组里。这就是为什么在这里能正常工作。

看起来你对QuickFIX和FIX协议还比较陌生。我建议你花几分钟浏览一下文档中“处理消息”的部分。

另外,FIXimate网站可以成为你最好的帮手。

撰写回答