如何向 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。
我正在使用 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。