如何在Quickfix中向组添加新列?

时间:2016-06-26 06:34:56

标签: java c# quickfix fix-protocol

我使用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中包含该组中的字段并重建它。知道怎么做吗?或者,请告诉我您解决此问题的建议。

1 个答案:

答案 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。