QuickFIX是否可以在一个步骤中获取传入FIX消息的所有现有字段? (我使用的是1.14.3版本的Python。)
根据QuickFIX文档,可以以某种方式获取字段值:
price = quickfix.Price()
field = message.getField(price)
field.getValue()
各种消息类型包含不同的字段,因此对每个字段执行此操作都会很尴尬。更重要的是,有时不知道消息中是否存在某些字段。如何让消息的所有字段都不知道它包含哪些字段?
答案 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之类的重复字段。 干杯。