在 MULTIPLEXARVALUE 或 MULTIPLESTRINGVALUE 字段中重复相同的值是否合法?

Is it legal to repeat the same value in a MULTIPLECHARVALUE or MULTIPLESTRINGVALUE field?

假设一个 FIX 字段是 MULTIPLECHARVALUEMULTIPLESTRINGVALUE 类型,并且为该字段定义的枚举值是 ABCD。我知道 "A C D" 是该字段的合法值,但是在该字段中重复一个值是否合法?例如,"A C C D" 合法吗?如果是,它的语义是什么?

我能想到三种可能:

  1. "A C C D" 是无效值,因为 C 重复了。
  2. "A C C D" 有效且在语义上与 "A C D" 相同。换句话说,设置语义是有意的。
  3. "A C C D" 有效且具有 multiset/bag 语义。

不幸的是,我在 FIX 规范文档中找不到 MULTIPLECHARVALUEMULTIPLESTRINGVALUE 的预期语义的任何明确定义。

FIX50SP2 规范没有回答你的问题,所以我只能得出结论,这三种解释中的任何一种都可以被认为是有效的。

就像 FIX 的问题一样,真正的答案取决于您正在与之通信的对方。

所以我的答案是:

  1. 如果您是客户端应用程序,请询问您的交易对手他们想要什么(或查看他们的文档)。
  2. 如果您是服务器应用程序,则由您来决定。您的文档应该告诉您的客户如何行动。

如果有帮助,QuickFIX/n 引擎会将 MultipleCharValue/MultipleStringValue 字段视为字符串,并将其留给应用程序代码来解析各个值。因此,开发人员很容易支持任何解释,甚至支持不同领域的不同解释。 (我怀疑其他 QuickFIX 语言实现是相同的。)

MultipleValueString字段的定义是一个包含一个或多个space定界值的字符串字段。我没有得到官方规范,但很少有地方可以找到这个定义:

  1. https://www.onixs.biz/fix-dictionary/4.2/index.html#MultipleValueString(我知道onixs.biz非常忠实于标准规范)

    String field (see definition of "String" above) containing one or more space delimited values.

  2. https://aj-sometechnicalitiesoflife.blogspot.com/2010/04/fix-protocol-interview-questions.html

    12. What is MultipleValueString data type? [...]
    String field containing one or more space delimited values.

这留给了这种类型的特定字段是否允许倍数,但我怀疑只有少数(如果有的话)需要允许倍数。据我所知,FIX 规范故意将此保留为开放状态。

例如对于 ExecInst<18> 多次指定相同的指令是愚蠢的。我还怀疑每个实现的行为都不同(例如,一个忽略重复项,另一个用 error/rejection 犹豫不决)。