我使用quickfix连接修复引擎并接收数据。但是我的应用程序拒绝了进入的市场数据,说明标签出现了两次。
20160624-12:44:36.770 : 8=FIX.4.49=21835=W34=2649=CfhDemoPrices52=20160624-12:44:37.79356=PrimoDEMOFIX55=GBPUSD262=PrimoApp13268=2269=0270=1.37203271=1500000290=164=20160628278=30/34-920771269=1270=1.37228271=1500000290=1278=30/34-92077610=038
20160624-12:44:36.798 : 8=FIX.4.49=12635=334=2749=PrimoDEMOFIX52=20160624-12:44:36.79456=CfhDemoPrices45=2658=Tag appears more than once371=278372=W373=1310=139
经过大量分析,我们发现标签278(MDEntryID)不包含在fix44的NoMDEntries中。我想在我的quickfix中包含该组中的字段并重建它。知道怎么做吗?或者,请告诉我您解决此问题的建议。
答案 0 :(得分:0)
您错误地修改了DD,因为您不知道重复组的工作方式。
这是您的消息的标准FIX44 DD。我添加了一些注释来表示标签号。
<message name="MarketDataSnapshotFullRefresh" msgtype="W" msgcat="app">
<field name="MDReqID" required="N" />
<component name="Instrument" required="Y" />
<group name="NoUnderlyings" required="N">
<component name="UnderlyingInstrument" required="N" />
</group>
<group name="NoLegs" required="N">
<component name="InstrumentLeg" required="N" />
</group>
<field name="FinancialStatus" required="N" />
<field name="CorporateAction" required="N" />
<field name="NetChgPrevDay" required="N" />
<group name="NoMDEntries" required="Y"> <!-- 268 -->
<field name="MDEntryType" required="Y" /> <!-- 269 -->
<field name="MDEntryPx" required="N" /> <!-- 270 -->
<field name="Currency" required="N" />
<field name="MDEntrySize" required="N" /> <!-- 271 -->
<field name="MDEntryDate" required="N" />
... and so on ...
重复组内的字段必须符合规定的顺序。当QF处理一个组时,如果它遇到一个意外的字段,那么它会假定该组已经结束。
您的DD与发件人发送的订单不符,因此您的引擎出现故障。
您的发件人按此顺序发送字段:
268-> (group 1) 269 270 271 290 64 278
(group 2) 269 270 271 290 278
(以上内容直接来自被拒绝的讯息。)
然而,您的DD期待269 278 271 270
。一旦它到达278,就会结束这个小组并且奇怪的事情开始发生。
将您的DD恢复为默认值,然后将64 / SettlDate和278 / MDEntryID添加到NoMDEntries
组件的 end 。鉴于您提供的证据,您的交易对手显然已将这些字段添加到组的末尾。
当然,这些并不是您的对手方对DD做出的唯一修改。 获取文档并阅读。然后相应地修改您的DD。