You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:45:05