使用QuickFIX获取收到的FIX消息的所有现有字段

时间:2016-08-16 09:24:15

标签: python quickfix fix-protocol

QuickFIX是否可以在一个步骤中获取传入FIX消息的所有现有字段? (我使用的是1.14.3版本的Python。)

根据QuickFIX文档,可以以某种方式获取字段值:

price = quickfix.Price()
field = message.getField(price)
field.getValue()

各种消息类型包含不同的字段,因此对每个字段执行此操作都会很尴尬。更重要的是,有时不知道消息中是否存在某些字段。如何让消息的所有字段都不知道它包含哪些字段?

2 个答案:

答案 0 :(得分:0)

我不知道某种方法。这就是我所做的,///传入的FIX消息:

message

然后,在tags = re.findall(r'(?<=\x01).*?(?==)', str(message)),您可以通过

获取所有值
FIX = {'1':fix.Account(), '2':fix.AdvId(), ...}

显然你必须导入for tag in set(tags)&set(FIX.keys()): message.getField(FIX[tag]) 模块。

答案 1 :(得分:-1)

我解析FIX消息的方式:

tagd = {">>".join((str(n),x)):y for n,[x,y] in enumerate([b.split("=") for b in message.toString().split(chr(1)) if len(b)>1])}

使用FIX代码键生成dict():

{'0>>8': 'FIX.4.4', '1>>9': '125', '2>>35': 'W', '3>>34': '3', '4>>49': 'CSERVER', '5>>50': 'QUOTE', '6>>52': '20200212-12:18:56.328', '7>>56': 'unique_string_id', '8>>55': '1', '9>>268': '2', '10>>269': '0', '11>>270': '1.08716', '12>>269': '1', '13>>270': '1.08718', '14>>10': '067'}

枚举用于诸如269和270之类的重复字段。 干杯。