gpt4 book ai didi

fix-protocol - QuickFIX/N 是否支持包含两个组件且每个组件具有相同名称的消息?

转载 作者:行者123 更新时间:2023-12-03 09:23:42 25 4
gpt4 key购买 nike

我正在使用 QuickFIX/N 1.8,当它必须基于 XML 创建 DataDictionary 时,它失败了,因为我的 FIX50SP1_TRTN.xml(由 Thomson Reuters 提供)包含一条消息( AllocationReport) 具有两个组件(TrdInstrmtLegGrpInstrmtLegAllocGrp),并且两个组件都有一个同名的组(NoLegs - 555)。

QuickFIX/N 正在尝试为每条消息创建一个字典,包含其所有组件的组,其中每个组的键是 id。因此,它尝试插入键 555 两次,第二次抛出异常。

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 协议(protocol)本身)吗? (也许有一个明确的限制,说一条消息不能包含多个同名组的组件)。

最佳答案

我认为 FIX 规范不允许这样做。我这样说是因为 FIX 4.4 和 FIX 5.0 规范文档都指出:

A tag number (field) should only appear in a message once. If it appears more than once in the message it should be considered an error with the specification document.

此外,如果您在 FIX 规范文档或 FIX 数据字典文件中搜索 PartyID,您将看到包含 的重复组的概念>PartyIDPartyIDSourcePartyRole 出现在多个地方,但每个重复组及其包含的字段都有不同的名称。有:

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

所有这些重复组都包含三个字段,分别表示一方 ID、来源和角色,但是这些字段的名称永远不会从一个重复组到另一个重复组重复使用,并且同一重复组在一个消息。例如,ExecutionReport 消息包含:

  • NoPartyIDs
  • NoNestedPartyIDs
  • NoNested2PartyIDs
  • NoNested3PartyIDs
  • NoNestedParties4

FIX 中还有其他一些结构相似但名称不同的重复组。

我的观点是,如果 FIX 打算允许一个重复组在一条消息中多次出现,那么 FIX 就没有必要在 FIX 规范中定义结构相似但名称不同的重复组.

我建议您向 Thomson Reuters 提出这个问题。我曾经在不同的交易场所遇到过类似的问题;结果我得到了 field FIX 规范的错误草案版本,他们很乐意向我发送他们的 FIX 规范的最新、更正版本。

关于fix-protocol - QuickFIX/N 是否支持包含两个组件且每个组件具有相同名称的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56524842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com