QuickFix自定义消息
在消息中添加自定义字段有两个步骤。例如,我们将增加TAG(9006)的AwesomeField字符串字段。
首先,把它添加数据字典的Fields当中:
<fields>
<field number="1" name="Account" type="STRING"/>
<field number="2" name="AdvId" type="STRING"/>
<field number="3" name="AdvRefID" type="STRING"/>
...
<field number="9006" name="AwesomeField" type="STRING"/>
</fields>
然后,把它添加到信息中:
<message name="ExecutionReport" msgtype="8" msgcat="app">
<field name="OrderID" required="Y"/>
<field name="SecondaryOrderID" required="N"/>
<field name="ClOrdID" required="N"/>
<field name="OrigClOrdID" required="N"/>
<field name="TestReqID" required="N"/>
...
<field name="AwesomeField" required="N"/>
</message>
在上面,我们把AwesomeField添加到该文档中的字段部分,而在数据字典定义正确的自定义组信息也是重要的。下面我们把它添加到Group当中:
<message name="ExecutionReport" msgtype="8" msgcat="app">
<field name="OrderID" required="Y"/>
...
<field name="ExecBroker" required="N"/>
<group name="NoContraBrokers" required="N">
<field name="ContraBroker" required="N"/>
<field name="ContraTrader" required="N"/>
<field name="ContraTradeQty" required="N"/>
<field name="ContraTradeTime" required="N"/>
<field name="AwesomeField" required="N"/>
</group>
...
没有在数据字典指定自定义组,它将无法正常工作。
3) 如何在代码使用
要在消息或自定义组当中获得自定义字段,最简单的方法是调用getter方法:
const int AWESOME_FIELD = 9006;
string awsmFld = message.GetString(AWESOME_FIELD);
const int AWESOME_FIELD = 9006;
string awsmFld = contraBrokersGrp.GetString(AWESOME_FIELD);
为自定义字段设置值,可以使用通用字段类:
const int AWESOME_FIELD = 9006;
message.SetField(new StringField(AWESOME_FIELD, "ohai"));
const int AWESOME_FIELD = 9006;
contraBrokersGrp.SetField(new StringField(AWESOME_FIELD, "ohai"));