验证 QuickFix/N 重复组,其中前两个字段交换顺序

问题描述

我正在实现一个客户端来连接到服务器,据我所知,该服务器使用了 FIX4.2 和 FIX4.4 的混合版本。

当某些事件发生时,服务器会以非标准顺序发送带有字段的组 453(nopartyID)。

根据规范文档,第一个字段应该是 PartyID (448)。对于某些消息,组中的第一个字段是 PartyIDSource (447) 并且消息被拒绝。根据规范,PartyIDSource 是组中的第二个字段。

我收到以下错误

<event> Message 140 Rejected: Group 453's first entry does not start with delimiter 448 (Field=453)

从文档和反复试验中,我找不到解决此问题的方法。在一些猜测中,我尝试将字段 447 添加为数据字典中组定义中的第一个(非必需)字段。我还在配置中将 ValidateFieldsOutOfOrder 设置为 N。

有什么办法可以不拒绝和处理消息吗?

相关文档:

组比数据字典的其他部分更微妙。

在消息中定义了一个组,带有组标签。 group 标签的第一个子元素是 group-counter 标签,然后是 group 中的其他字段,按照它们在消息中出现的顺序。

解决方法

ValidateFieldsOutOfOrder 与此处无关,因此您可以将其删除。

如果我没理解错的话,你说的是

  • 有时 447 在 448 之前
  • 在其他时候 448 在 447 之前

如果这是真的,那么不幸的是,您的交易对手真的很愚蠢。根据 FIX 规范,重复组中的字段顺序应该是一致的。 (而且,每个组序列的第一个字段始终必须存在。)如果它们是触发器字段,则它们违反了 FIX。

如果订单是一致的,你只需编辑你的 DD 来改变订单,听起来你已经尝试过了。但是如果你的交易对手是翻转的,那么你的 DD 将永远是部分时间错误。

我没有很好的答案给你。 QF/n 并非旨在处理交易对手修复错误的所有方式(也不应该如此)。

您的交易对手的实施草率。尝试联系他们的支持人员,看看他们是否会解决问题?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...