QuickFix客户端接收FIX.4.4 MarketDataIncrementalRefresh消息时Tag55报错求助
QuickFix客户端拒绝FIX.4.4 MarketDataIncrementalRefresh消息(Tag 55未定义)
错误现象
客户端收到服务器发来的MarketDataIncrementalRefresh(消息类型X)后拒绝,拒绝报文内容:
58=Tag not defined for this message type **371=55 **372=X
收到的原始消息
8=FIX.4.4|9=0176|35=X|49=Server|56=Client|52=<Timestamp>|34=7245|268=2 |279==0|**55=<symbol>**|269=0|270=<Price>|271=0|1500=90 |279==0|**55=<Symbol>**|269=1|270=<Price>|271=0|1500=90|10=034|
客户端配置
DefaultApplVerID=FIX.4.4 ConnectionType=initiator BeginString=FIX.4.4 UseDataDictionary=Y DataDictionary=path/spec/FIX44.xml FileStorePath=./Sessions/ ValidateIncomingMessage=N ValidateUserDefinedFields=N ValidateFieldsOutOfOrder=N RejectInvalidMessage=N
问题根源分析
检查提供的XML数据字典,发现两处语法错误,直接导致Tag55(Symbol)未被客户端识别:
- 标签拼写错误:
MDIncGrp组件中,MDEntryPx的字段标签写成了<filed>(正确应为<field>):<filed name='MDEntryPx' required='N' /> - 标签缺失:Tag55的定义缺少开头的
<符号,导致字段未被正确加载:field number='55' name='Symbol' type='STRING' />
解决方法
- 修复XML字典语法错误:
- 将
<filed name='MDEntryPx' required='N' />修正为<field name='MDEntryPx' required='N' /> - 将
field number='55' name='Symbol' type='STRING' />修正为<field number='55' name='Symbol' type='STRING' />
- 将
- 验证配置生效:
尽管配置中设置了ValidateIncomingMessage=N,但由于UseDataDictionary=Y,QuickFix仍会基于字典做基础字段合法性校验。修复字典后重启客户端,确认消息可正常解析。 - 额外校验:
确认MDIncGrp组结构定义与服务器发送的消息格式匹配,确保NoMDEntries(Tag268)的数值与实际组条目数量一致。
内容的提问来源于stack exchange,提问作者Lanxin Zhang
相关产品推荐
相关产品推荐

