如何创建 FIX partyID 组?

How do I create FIX partyID group?

我正在尝试将 PartyID 组添加到 FIX4.4 消息。

我找不到 "group" 的 PartyID。所以我按顺序添加它们。

NoPartyIDs, PartyRole, PartyIDSource, PartyID

但是,无论我以何种方式添加它们,修复引擎似乎都对它们重新排序。

我应该怎么做,或者有没有办法指定顺序?

    public QuickFix.FIX44.MarketDataRequest QueryMarketDataRequest44(string symbol)
    {
        MDReqID mdReqID = new MDReqID("RqID"+symbol);
        SubscriptionRequestType subType = new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES);
        MarketDepth marketDepth = new MarketDepth(1);

        QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup marketDataEntryGroup = new QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup();

        QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup symbolGroup = new QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup();
        symbolGroup.Set(new Symbol(symbol));


        QuickFix.FIX44.MarketDataRequest message = new QuickFix.FIX44.MarketDataRequest(mdReqID, subType, marketDepth);
        message.Set(new MDUpdateType(0));
        message.AddGroup(symbolGroup);

        QuickFix.Fields.NoPartyIDs noPartyIDs = new QuickFix.Fields.NoPartyIDs(1);
        QuickFix.Fields.PartyID partyID = new QuickFix.Fields.PartyID("XXXX");
        QuickFix.Fields.PartyIDSource partyIDSource = new QuickFix.Fields.PartyIDSource('D');
        QuickFix.Fields.PartyRole partyRole = new QuickFix.Fields.PartyRole(35);

        message.SetField(noPartyIDs);
        message.SetField(partyRole);
        message.SetField(partyIDSource);
        message.SetField(partyID);            

        return message;
    }

我用过这样的东西:

NoPartyIDs noPartyIDs = new NoPartyIDs();
noPartyIDs.setTag(new PartyID());
noPartyIDs.setTag(new PartyIDSource());
noPartyIDs.setTag(new PartyRole());
m.addGroup(noPartyIDs);

然后在我的数据字典中

<component name="Parties">
  <group name="NoPartyIDs" required="N">
    <field name="PartyID" required="N" />
    <field name="PartyIDSource" required="N" />
    <field name="PartyRole" required="N" />
    <group name="NoPartySubIDs" required="N">
      <field name="PartySubID" required="N" />
      <field name="PartySubIDType" required="N" />
    </group>
  </group>
</component>

我相信顺序是在数据字典中设置的...

您的代码没有添加组。它在消息正文的顶层向消息添加 4 个单独的标签。根据 FIX 规范,Body 中的字段顺序与重复组之外的字段无关。由于该规范,QF 引擎不记录(非重复组)字段的任何顺序。它只是将它们按数字顺序排列。

总而言之:您的整个方法都是错误的,不会奏效。

我认为 rupweb 的答案会奏效,尽管它有点乱,因为根据 DD,Parties 组实际上并不属于 MarketDataRequest。对于传出消息,引擎不会检查 DD,因此它会起作用。

要正确执行此操作,我建议您编辑 DataDictionary 以将组添加到消息中,然后使用此新 DD 重新生成 QF/n 源,然后重建引擎。这样,您的 MarketDataRequest class 将包含这些新字段的更新字段和访问器。

这对我有用。我用了Quote.NoPartyIDsGroup。奇怪的是 MarketDataRequest 中没有这样的组。

QuickFix.Fields.NoPartyIDs noPartyIDs = new QuickFix.Fields.NoPartyIDs(1);
            QuickFix.Fields.PartyID partyID = new QuickFix.Fields.PartyID(lp);
            QuickFix.Fields.PartyIDSource partyIDSource = new QuickFix.Fields.PartyIDSource('D');
            QuickFix.Fields.PartyRole partyRole = new QuickFix.Fields.PartyRole(35);

          QuickFix.FIX44.Quote.NoPartyIDsGroup group = new Quote.NoPartyIDsGroup();

            group.SetField(noPartyIDs);
            group.SetField(partyRole);
            group.SetField(partyIDSource);
            group.SetField(partyID);

            message.AddGroup(group);