Python QuickFix创建FIX 4.4 PartyID组消息时字段顺序不符求助
解决Python QuickFix中FIX组字段顺序与设置顺序不一致的问题
可行解决方案
要让QuickFix保留你设置的组内字段顺序,不能直接多次调用setField(底层会按字段号字典序重排),需要通过按目标顺序逐个添加字段对象或者用FieldMap预构建有序字段集合后传入Group。
代码示例
方法1:按顺序逐个添加字段对象
import quickfix as fix msg = fix.Message() # 先按预期顺序创建字段实例 party_id = fix.StringField(448, 'valueOfPartyID') party_id_src = fix.StringField(447, 'valueOfPartyIDSrc') party_role = fix.IntField(452, 1) # PartyRole是整数类型,需匹配字段定义 grp = fix.Group(453, 0) grp.setField(party_id) grp.setField(party_id_src) grp.setField(party_role) msg.addGroup(grp)
方法2:用FieldMap预构建有序字段集合
import quickfix as fix msg = fix.Message() # 构建按顺序排列的FieldMap field_map = fix.FieldMap() field_map.setField(fix.StringField(448, 'valueOfPartyID')) field_map.setField(fix.StringField(447, 'valueOfPartyIDSrc')) field_map.setField(fix.IntField(452, 1)) grp = fix.Group(453, 0) grp.setFields(field_map) msg.addGroup(grp)
原因说明
Python QuickFix的setField方法底层默认会按字段号的字典序存储字段,而非调用顺序。这是因为FIX协议本身并不强制组内字段的顺序(多数合规的FIX引擎都能解析任意顺序的字段),但如果对接的系统有严格的顺序要求,就必须手动控制字段添加的顺序——直接传入预定义的字段对象,绕过底层的自动排序逻辑。
另外,加载数据字典主要用于消息结构验证,无法改变字段的输出顺序,所以之前尝试的方式不会生效。
内容的提问来源于stack exchange,提问作者Prashant Rasal
相关产品推荐
相关产品推荐

