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

How to Add a new Column to a group in Quickfix?

我正在使用 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 中并重建它。知道怎么做吗?或者请让我知道您解决此问题的建议。

您错误地修改了 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。