Quickfix MarketDataIncrementalRefresh:未为此消息类型定义标记 < >我使用QuxFixC++。 我从服务器收到修复消息: 8=FIX.4.2|9=312|35=X|34=17|49=CX|52=20150413-13:33:39.691|56=CACIB_MD2|262=1|9883=IDB|268=2|279=2|269=0|55=535791|270=15|271=1|272=20150413|273=13:28:07.653|59=0|126=20150413-21:56:46.201|290=1|9139=cacib_uat2|279=0|269=0|55=535791|270=17|271=1|272=20150413|273=13:33:39.660|59=0|126=20150413-21:56:46.201|290=1|9139=cacib_uat2|10=015|

Quickfix MarketDataIncrementalRefresh:未为此消息类型定义标记 < >我使用QuxFixC++。 我从服务器收到修复消息: 8=FIX.4.2|9=312|35=X|34=17|49=CX|52=20150413-13:33:39.691|56=CACIB_MD2|262=1|9883=IDB|268=2|279=2|269=0|55=535791|270=15|271=1|272=20150413|273=13:28:07.653|59=0|126=20150413-21:56:46.201|290=1|9139=cacib_uat2|279=0|269=0|55=535791|270=17|271=1|272=20150413|273=13:33:39.660|59=0|126=20150413-21:56:46.201|290=1|9139=cacib_uat2|10=015|,c++,quickfix,fix-protocol,C++,Quickfix,Fix Protocol,Quickfix会自动将拒绝消息发送回服务器(此消息类型未定义标记55): 但该标记(55)在字典文件中定义: <message name='MarketDataIncrementalRefresh' msgcat='app' msgtype='X'> <field name='MDReqID' required='N' /> <field name='CXMarketType' required='N' /> <group nam

Quickfix会自动将拒绝消息发送回服务器(此消息类型未定义标记55):

但该标记(55)在字典文件中定义:

  <message name='MarketDataIncrementalRefresh' msgcat='app' msgtype='X'>
   <field name='MDReqID' required='N' />
   <field name='CXMarketType' required='N' />
   <group name='NoMDEntries' required='N'>
     <field name='Symbol' required='N' />
   </group>
  </message>
  ...
  <field number='55' name='Symbol' type='STRING' />
  ...
  <field number='262' name='MDReqID' type='STRING' />
  ...
  <field number='268' name='NoMDEntries' type='INT' />
  ...
  <field number='9883' name='CXMarketType' type='STRING' />
  ...
我不明白为什么Quickfix决定标记55(符号)没有定义,而它是组的一部分


您能提供帮助吗?

问题是您不能直接将组添加到消息中,它应该首先位于组件中

<message name='MarketDataIncrementalRefresh' msgcat='app' msgtype='X'>
    <field name='MDReqID' required='N' />
    <field name='CXMarketType' required='N' />
    <component name='NoMDEntriesComp' required='N' />
</message>

<component name="NoMDEntriesComp">
    <group name='NoMDEntries' required='N'>
        <field name='Symbol' required='N' />
    </group>
</component>

NoMDEntries类型应为NUMINGROUP而不是INT

<field number='268' name='NoMDEntries' type='NUMINGROUP' />

我也面临同样的问题。这是QuickFix错误报告。有必要在FIX4?.xml中定义用户定义的字段。在节中定义字段,并将它们添加到相应的消息中。在您的情况下,9883看起来像自定义标记,您已经声明了它,但没有在35=X消息中正确定义。因此,如果您在NoMDEntries内的35=X消息中使用此自定义标记,则可以解决您的问题

  <message name='MarketDataIncrementalRefresh' msgcat='app' msgtype='X'>
   <field name='MDReqID' required='N' />
   <group name='NoMDEntries' required='N'>
     <field name='Symbol' required='N' />
     <field name='CXMarketType' required='N' />
   </group>
  </message>


传入消息中有用户定义的字段
9139
。放入
ValidateUserDefinedFields=Y
并检查。当然,还要确保9139被添加到
NoMDEntries
(268)重复组中。但是我在这条消息中有很多用户定义的字段,我不需要验证它们,因为在这种情况下,我必须在字典中指定所有这些字段。如果我把它设为“是”,它就会开始抱怨……如果你不验证你认为Quickfix是如何理解消息的,我想不是通过魔法。如果其他用户跨正文中所有用户定义的字段发送,您打算如何处理它?如果您不想进行修复配置的艰苦工作,那么您将继续遇到此错误。@AndreyRubilov您是否能够解决此问题?我现在也遇到了类似的情况。您可以直接将组添加到邮件中。
<field number='268' name='NoMDEntries' type='NUMINGROUP' />
  <message name='MarketDataIncrementalRefresh' msgcat='app' msgtype='X'>
   <field name='MDReqID' required='N' />
   <group name='NoMDEntries' required='N'>
     <field name='Symbol' required='N' />
     <field name='CXMarketType' required='N' />
   </group>
  </message>