我们的交易对手(接受者(接口基于FIX版本4.3。但是,他们对消息类型进行了一些修改,并从 5.0 版引入了标志。
我通过向我们的交易对手(接受方(发送MarketDataRequest (MsgType=V
来请求MarketDataSnapshotFullRefresh (MsgType=W)
消息。
我必须修改字典,使其符合信息。正如你从下面的XML中看到的,我不得不添加组NoLegs
这是回复的一部分,但不是原始规范4.3(https://www.onixs.biz/fix-dictionary/4.3/msgType_W_87.html(。
<message name="MarketDataSnapshotFullRefresh" msgtype="W" msgcat="app">
<field name="MDReqID" required="N" />
<component name="Instrument" required="Y" />
<field name="FinancialStatus" required="N" />
[...]
<field name='MDEntryForwardPoints' required="N" />
<group name="NoMDEntries" required="Y">
<field name="MDEntryType" required="Y" />
[...]
<field name="PriceType" required="N" />
<field name='MDEntrySpotRate' required="N" />
<field name='MDEntryForwardPoints' required="N" />
</group>
<group name="NoLegs" required="N">
<component name="InstrumentLeg" required="N" />
</group>
</message>
更改字典以适应自定义消息后,我的客户端不再回复拒绝消息给接受者...目前为止,一切都好。
但是我无法访问此字段,因为此属性不是类QuickFix.FIX43.MarketDataSnapshotFullRefresh
的一部分。
长话短说,如何从自定义消息访问自定义字段?
如果我正确理解您的问题,那么您需要遵循下面提到的步骤。
- 将自定义标签添加到您的 FIX4x.xml(x 可以是任何版本( 前任:
<field name="CustomTag" required="N" />
- 现在询问您的第三方与此标签关联的标签编号,并基于 在您的 FIX4x.xml 编号中定义此标签编号 前任:
<field number="123" name="CustomTag" type="STRING" />
- 使用上面的标签号MarketDataSnapshotFullRefresh.GetString("123"(从代码中访问您的自定义标签,您将获得此标签的值。
希望这对您有所帮助。
我按照以下步骤解决了这个问题:
1.(从github下载源代码
2.( 安装红宝石和野古吉里宝石
3.( 在specfixFIX{yourVersion}.xml
下对相应的 XML 文件进行更改,使其符合交易对手的方言
4.( 在根文件夹中运行generate.bat
。这将根据修改后的 XML 使用必要的 getter 和 setter 方法构建 C# 源文件
5.( 加载解决方案并构建解决方案
6.( 项目中的参考QuickFix
和QuickFix.FIX{yourVersion}