我使用Quickfix c ++。 我从服务器收到FIX消息:
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会自动发回服务器拒绝消息(未为此消息类型定义标记55):
8=FIX.4.2|9=121|35=3|34=17|49=CACIB_MD2|52=20150413-13:33:39.755|56=CX|45=17|58=Tag not defined for this message type|371=55|372=X|373=2|10=044|
但是这个标签(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' />
...
FIX选项是:
UseDataDictionary=Y
DataDictionary=./conf/fix42_dictionary.xml
ValidateFieldsOutOfOrder=N
ValidateUserDefinedFields=N
我不明白为什么Quickfix决定标签55(符号)没有定义,当它是组的一部分时。
你能帮忙吗?
答案 0 :(得分:0)
问题是你不能直接将组添加到消息中,它应该首先在组件内部
<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' />
答案 1 :(得分:0)
我遇到了同样的问题。这是QuickFix错误报告的错误。必须在FIX4..xml中定义用户定义的字段。在部分中定义字段,并将它们也添加到适当的消息中。在您的情况下,9883看起来像您已声明的自定义标签,但未在35 = X message中正确定义。因此,如果您在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>