3

QuickFIX/N 1.8 を使用していますが、XML に基づいて DataDictionary を作成する必要がある場合、FIX50SP1_TRTN.xmlAllocationReport (Thomson Reuters 提供) に 2 つのコンポーネント ( TrdInstrmtLegGrpInstrmtLegAllocGrp)を持つ1 つのメッセージ ( ) が含まれているため、失敗します。同じ名前のグループ ( NoLegs- 555)。

QuickFIX/N は、各グループのキーが id であるすべてのコンポーネントのグループを含む、メッセージごとの辞書を作成しようとしています。したがって、キーを 2 回挿入しようとしており555、2 回目に例外がスローされます。

System.ArgumentException: '同じキーを持つアイテムが既に追加されています。'

\QuickFIXn\DataDictionary\DataDictionary.cs

else if(childNode.Name == "group")
{
    DDField fld = FieldsByName[childNode.Attributes["name"].Value];
    DDGrp grp = new DDGrp();
    XmlAttribute req = childNode.Attributes["required"];
    if (req != null && req.Value == "Y"
    && (componentRequired == null || componentRequired.Value == true))
    {
        ddmap.ReqFields.Add(fld.Tag);
        grp.Required = true;
    }
    if (!ddmap.IsField(fld.Tag))
    {
        ddmap.Fields.Add(fld.Tag, fld);
    }
    grp.NumFld = fld.Tag;
    parseMsgEl(childNode, grp);
    ddmap.Groups.Add(fld.Tag, grp); //########### It fails when the second group is processed ###########
}

FIX50SP1_TRTN.xmlの内容の要約

<fix major="5" minor="0">
  <header/>
  <trailer/>

  <messages>
    <message name="AllocationReport" msgtype="AS" msgcat="app">
      <component name="TrdInstrmtLegGrp" required="N"/>
      <component name="InstrmtLegAllocGrp" required="N"/>
    </message>
  </messages>

  <components>
    <component name="TrdInstrmtLegGrp">
      <group name="NoLegs" required="N"> <!-- 555 -->
         (content A)
      </group>
    </component>
    <component name="InstrmtLegAllocGrp">
      <group name="NoLegs" required="N">
         (content B)
      </group>
    </component>
  </components>

  <fields>
    <field number="555" name="NoLegs" type="NUMINGROUP"/>
  </fields>
</fix>

私の質問:

  1. QuickFIX/N はこの状況をサポートするはずですか?
  2. この問題に直面したことがありますか? どのように解決しましたか?
  3. この状況に関する明示的な制約 (QuickFIX/N または FIX プロトコル自体) を知っていますか? (おそらく、メッセージには同じ名前のグループを持つ複数のコンポーネントを含めることはできないという明示的な制限があります)。
4

2 に答える 2

2

これは FIX 仕様では許可されていないと思います。私がこれを言うのは、FIX 4.4 と FIX 5.0 の仕様書の両方が次のように述べているからです。

タグ番号 (フィールド) はメッセージに 1 回だけ表示されます。メッセージに複数回表示される場合は、仕様ドキュメントのエラーと見なす必要があります。

さらに、 の FIX 仕様ドキュメントまたは FIX データ辞書ファイルを検索すると、 、 、を含む繰り返しグループPartyID概念がいくつかの場所に表示されますが、繰り返しグループとフィールドの名前はそれぞれ異なります。含まれています。がある:PartyIDPartyIDSourcePartyRole

  • NoPartyIDs
  • NoNestedPartyIDs
  • NoNested2PartyIDs
  • NoNested3PartyIDs
  • NoNestedParties4
  • NoDerivativeInstrumentParties
  • NoInstrumentParties
  • NoRootParties
  • NoSettlPartyIDs
  • NoTargetParties
  • NoUndlyInstrumentParties

これらのすべての繰り返しグループには、パーティ ID、そのソース、およびその役割を示す 3 つのフィールドが含まれていますが、これらのフィールドの名前が繰り返しグループ間で再利用されることはなく、同じ繰り返しグループがメッセージ内で複数回使用されることはありません。たとえば、ExecutionReportメッセージには次のものが含まれます。

  • NoPartyIDs
  • NoNestedPartyIDs
  • NoNested2PartyIDs
  • NoNested3PartyIDs
  • NoNestedParties4

FIX には、構造的に類似しているが異なる名前の反復基の他のいくつかのケースがあります。

私の要点は、FIX が繰り返しグループをメッセージに複数回出現させることを意図していた場合、FIX 仕様で構造的に類似しているが異なる名前の繰り返しグループを定義する必要はなかったということです。

この懸念を Thomson Reuters に報告することをお勧めします。別の取引所で同様の問題に遭遇したことがあります。会場の FIX 仕様のバグのあるドラフト版を受け取っていたことが判明し、FIX 仕様の最新の修正版を送ってくれました。

于 2019-06-12T09:18:34.593 に答える