QuickFixN:如何在 QuoteRequest 消息中按特定顺序设置字段?

问题描述

我们要求按照设置的顺序发送消息的前 3 个字段,即 QuoteReqID、OnBehalfOfCompID、Account。但是,当它们添加到消息中时,它们会按数字升序重新排序,即 Account、OnBehalfOfCompID、QuoteReqID。通过组,我们可以定义字段顺序,但我看不到为消息执行此操作的选项。有人知道我们如何实现这一目标吗?

            var message = new QuoteRequest();
            int[] fieldOrder = new[] {Tags.Currency,Tags.Symbol,Tags.SecurityType,Tags.CFICode,Tags.NoLegs,Tags.LegQty,Tags.LegFutSettDate,Tags.LegSecuritySubType};

            message.SetField(new QuoteReqID(stream.QuoteRequestId));
            message.SetField(new OnBehalfOfCompID(_compId));
            message.SetField(new Account(_accountId));
            var group = new Group(Tags.norelatedSym,fieldOrder);
            group.SetField(new Currency(stream.Ccy));
            group.SetField(new Symbol(stream.Ccy1 + "/" + stream.Ccy2));
            group.SetField(new SecurityType("FOR"));
            group.SetField(new CFICode("FORWARD"));
            group.SetField(new NoLegs(1));
            group.SetField(new LegQty(stream.Amount));
            group.SetField(new LegFutSettDate(stream.FutSettDate));
            group.SetField(new LegSecuritySubType("TOD"));

            message.AddGroup(group);

            QuickFix.Session.SendToTarget(message,_ratesSession.SessionId);

解决方法

我不熟悉 QuickFixN,但我知道 OnBehalfOfCompID 是消息header 中的一个字段,而 QuoteReqIDAccount 都是消息正文中的字段。消息中使用的所有标题字段必须出现在任何正文字段之前。

,

这绝对不是 FIX 协议指定的行为方式。在规范中,正文中不在重复组内的字段可以按任何顺序排列。您的交易对手要求不符合 FIX 的行为(我看不出有什么好处)。

因此,QuickFIX/n 不支持这一点,因为... QF/n 实现了 FIX,而不是您的交易对手想要的这种愚蠢的非 FIX 行为。

很抱歉告诉你这个,但你必须以某种方式破解引擎才能实现这一点。

另外一个警告: OnBehalfOfCompID 是标题字段,而不是正文字段。 QF/n 将它添加到传出 消息的正文中应该不会有问题,但它可能会在传入时拒绝此类消息。 (感谢@ciaran-mchale 的回答指出了这一点。)

,

“onbehalfcompid”(标记 115)位于修复消息的标题下,而quoteReqID(标记 131)和帐户(标记 1)位于修复消息的正文之下。并且所有标题标签都应该出现在正文消息标签之前。这适用于所有修复引擎/模拟器。

相关问答

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