quickfix marketdatarequest解析错误

时间:2015-07-14 20:17:47

标签: quickfix

我在linux机器上使用quickfix 1.14.0。我正在发送MarketDataRequest。我发送的请求是

<message>
  <header>
    <field number="8">
      <![CDATA[FIX.4.4]]>
    </field>
    <field number="35">
      <![CDATA[V]]>
    </field>
    <field number="49">
      <![CDATA[FixServer]]>
    </field>
    <field number="56">
      <![CDATA[INCA]]>
    </field>
  </header>

  <body>
    <field number="146">
      <![CDATA[1]]>
    </field>
    <field number="262">
      <![CDATA[MARKETDATAID]]>
    </field>
    <field number="263">
      <![CDATA[0]]>
    </field>
    <field number="264">
      <![CDATA[0]]>
    </field>
    <field number="267">
      <![CDATA[1]]>
    </field>
    <group>
      <field number="55">
        <![CDATA[LNUX]]>
      </field>
    </group>
    <group>
      <field number="269">
        <![CDATA[0]]>
      </field>
    </group>
  </body>
  <trailer>
  </trailer>
</message>

在接收端,我看到请求以

进入

<message>
  <header>
    <field number="8">
      <![CDATA[FIX.4.4]]>
    </field>
    <field number="9">
      <![CDATA[112]]>
    </field>
    <field number="35">
      <![CDATA[V]]>
    </field>
    <field number="34">
      <![CDATA[93]]>
    </field>
    <field number="49">
      <![CDATA[FixServer]]>
    </field>
    <field number="52">
      <![CDATA[20150714-19:19:54.844]]>
    </field>
    <field number="56">
      <![CDATA[INCA]]>
    </field>
  </header>

  <body>
    <field number="55">
      <![CDATA[LNUX]]>
    </field>
    <field number="146">
      <![CDATA[1]]>
    </field>
    <field number="262">
      <![CDATA[MARKETDATAID]]>
    </field>
    <field number="263">
      <![CDATA[0]]>
    </field>
    <field number="264">
      <![CDATA[0]]>
    </field>
    <field number="267">
      <![CDATA[1]]>
    </field>
    <field number="269">
      <![CDATA[0]]>
    </field>
  </body>
  <trailer>
    <field number="10">
      <![CDATA[151]]>
    </field>
  </trailer>
</message>

我正在使用

解析请求
  FIX::MDReqID mdReqID;
  FIX::SubscriptionRequestType subscriptionRequestType;
  FIX::MarketDepth marketDepth;
  FIX::NoRelatedSym noRelatedSym;
  FIX44::MarketDataRequest::NoRelatedSym noRelatedSymGroup;

  message.get( mdReqID );
  message.get( subscriptionRequestType );
  if ( subscriptionRequestType != FIX::SubscriptionRequestType_SNAPSHOT )
    throw( FIX::IncorrectTagValue( subscriptionRequestType.getField() ) );
  message.get( marketDepth );
  message.get( noRelatedSym );

  for ( int i = 0; i < noRelatedSym; ++i )
  {
    FIX::Symbol symbol;
    message.getGroup( i, noRelatedSymGroup );
    noRelatedSymGroup.get( symbol );
  }

当我尝试获取noRelatedSymbolGroup时出现异常。我看到以下错误消息发送回请求者, 358 =有条件要求的场缺失(146) 我使用的代码来自示例。我不明白为什么标签55出现在标签146之前,即使它从发送方正确显示。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

这看起来像配置问题。

您的配置应该包含以下两行:

UseDataDictionary=Y
DataDictionary=path/to/your/dd.xml

我打赌第一行不见了。

55出现在146之前,因为QF将在内部重新排列消息中的顶级字段(因为FIX不关心顶级字段的顺序)。

55在MarketDataReq消息中不是顶级,但是您的错误配置告诉QF没有重复的组(因为重复组需要DD)。因此,QF将所有视为顶级字段。