使用Python Quickfix读取自定义消息中的重复字段

3 投票
2 回答
3605 浏览
提问于 2025-04-17 13:04

我正在用Python和Quickfix从一个FIX引擎读取数据,已经通过修改数据字典(包括必要的消息组)让引擎识别自定义消息。

现在我遇到的问题是如何从这些自定义消息中读取重复组。quickfix的文档上显示了以下内容:

import quickfix
import quickfix42

noMDEntries = quickfix.NoMDEntries()
message.getField(noMDEntries)

group = quickfix42.MarketDataSnapshotFillRefresh.NoMDEntries()
MDEntryType = quickfix.MDEntryType()
MDEntryPx = quickfix.MDEntryPx()
MDEntrySize = quickfix.MDEntrySize()
orderID = quickfix.OrderID();

message.getGroup(1, group);
group.getField(MDEntryType);
group.getField(MDEntryPx);
group.getField(MDEntrySize);
group.getField(orderID);

...这对于FIX消息来说是没问题的。当我尝试像这样引用我的自定义消息时:

group = quickfix.CustomMessage.NoMDEntries()

...我遇到了属性错误。

有没有什么办法可以读取自定义消息中的重复组?

编辑 1:

我找到了一种解决方法,但我相信还有更好的办法...

for i in range(int(message.getField(NoMDEntries):
    group = quickfix.Group(int(message.repeatingField), int(message.delimField))
    message.getGroup(i+1, group)
    print group.getField(MDEntryPx)
    #do something with repeating fields etc

...有没有人有什么想法?

2 个回答

0

请在你的文档中删除下面的代码:
message.getField(noMDEntries)

然后它就能正常工作,帮你获取你想要的值。

1

我不太确定你提供的Python代码,但我觉得可能有个问题。

group = quickfix42.MarketDataSnapshotFillRefresh.NoMDEntries()

在这里,你可以获取到MarketDataSnapshotFullRefresh这个对象里的内部类对象(你可能把它拼错成了MarketDataSnapshotFillRefresh)。

group = quickfix.CustomMessage.NoMDEntries()

这里你得到的可能是重复组里面的重复组数量,而不是类对象。

Quickfix提供了一个getGroup方法,可以用来查看组成员,所以最好用这个方法,而不是自己去实现。

撰写回答