1

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

我找不到 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;
    }
4

3 回答 3

1

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

总结一下:您的整个方法是错误的,并且行不通。

我认为 rupweb 的答案会起作用,尽管这有点像 hack,因为根据 DD,该Parties组实际上并不属于。MarketDataRequest对于传出的消息,引擎不会检查 DD,所以它会工作。

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

于 2017-03-27T14:46:06.133 回答
0

我用过这样的东西:

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>

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

于 2017-03-25T14:22:12.847 回答
0

这对我有用。我使用了 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);
于 2017-03-29T13:45:26.010 回答