如何创建 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);
我正在尝试将 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);