删除 QuickFIX/n 中的 FIX 标记,它应该是重复组的成员但不是?

Remove a FIX tag in QuickFIX/n which should be a member of a repeating group but is not?

我正在开发一个适配器来读取 CME 执行报告 (35=8),CME 偶尔会发送 [constant] tag-337 (ContraTrader) 和 tag-375 (ContraBroker) 值,它们是重复组的成员tag-382 (NoContraBrokers) 根据 FIX 4.2 规范。

这是我正在使用的 382 的(未修改的 FIX 4.2)组定义。

  <group name="NoContraBrokers" required="N">
    <field name="ContraBroker" required="N"/>
    <field name="ContraTrader" required="N"/>
    <field name="ContraTradeQty" required="N"/>
    <field name="ContraTradeTime" required="N"/>
  </group>

问题是 CME 不发送 tag-382 值,因此 QF/n 无法知道预期有多少组,并在尝试破解消息时抛出异常。

我一直在搜索 google 并阅读文档,但我很困惑。执行以下操作很容易,但我认为它会弄乱消息校验和,从而导致格式错误的 FIX 消息:

public const string SOH = "\u0001";
//my bad code goes here

public void FromApp(Message message, SessionID sessionID)
{
    if (message.ToString().Contains(SOH + "375="))
    {
        int insertionPoint = message.ToString().IndexOf(SOH + "375=");
        string foo = message.ToString().Insert(insertionPoint, SOH + "382=1");
        Message bar = new Message(foo);
        message = bar;
    }
    try
    {
        Crack(message, sessionID);
    }
    catch (QuickFIXException e)
    {
        //Panic on the dance floor!
    }
}

在 Crack 时抛出异常的示例消息(...){}

8=FIX.4.2 | 9=497 | 35=8 | 34=3 | 43=是 | 49=一些值 | 52=20150326-20:30:24.943 | 56=另一个值 | 122=20150326-14:50:47.226 | 1=一些帐户 | 6=0 | 11=订单ID12345 | 14=2 | 17=70477:M:691285TN0017346 | 20=0 | 31=525 | 32=2 | 37=70297295250 | 38=5 | 39=1 | 40=2 | 41=0 | 44=510.25 | 48=250618 | 54=2 | 55=ZW | 59=0 | 60=20150326-14:50:47.213 | 75=20150326 | 107=ZWK5 | 150=1 | 151=3 | 167=FUT | 337=贸易 | 375=CME000A | 432=20150326 | 442=1 | 527=702972952502015032617346 | 1028=是 | 1057=是 | 9717=订单号438346156 | 10=158 |

另一种方法是在 XML 文件中重新定义执行报告结构以删除组定义并将 337 和 375 作为非必填字段插入,但这使得适配器非常专门用于 CME。

有没有更简单的方法来完成这个?

CME 是否有此特定 FIX 接口的文档?

交易对手向 FIX 消息添加或删除自定义字段的情况非常普遍(实际上几乎总是如此)。给您带来麻烦的字段可能是这些修改的一部分。

文档应准确显示您需要在 FIX42.xml 文件中进行哪些更改,以便引擎的期望与 CME 发送的内容相匹配。