如何在MarketDataRequest消息中重新排序标签



我正在尝试订阅价格流,使用以下代码:

Using l_msg As New QuickFix42.MarketDataRequest(New MDReqID(Date.Now.Ticks.ToString), New SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES), New MarketDepth(1))
            l_msg.setField(New MDUpdateType(1))
            l_msg.setField(New AggregatedBook(False))
            l_msg.setField(New NoMDEntryTypes(2))
            l_msg.setField(New MDEntryType("0"c))
            l_msg.setField(New MDEntryType("1"c))
            l_msg.setField(New Symbol("EUR/USD"))
            l_msg.setField(New NoRelatedSym(1))
            Session.sendToTarget(l_msg, SENDER_COMP_ID.Value, TARGET_COMP_ID.Value)
        End Using

生成的FIX消息为:

8=FIX.4.2 9=140 35=V 34=2 49=SENDER_COMP_ID 52=20110909-15:44:02.85556= target_comp_id 55= eur/usd 146=1 262=634511906383686907 263=1 264=1265=1 266= 2 269=1 10=079

我需要重新排序标签,所以55在标签146之后。我尝试以不同的顺序调用setField,但每次都给出相同的结果。

处理消息标签顺序的正确方法是什么?

编辑-问题解决:

我遵循DumbCoder的建议,并使用addGroup而不是setField来构建消息。下面的代码示例也帮助了我:http://forexforums.dailyfx.com/fix-api-support/411090-fix-api-example.html

注意:示例是用Java编写的,目标是QF44。

AFAIK quickfix使用映射读取标记,然后填充它们的值,因此标记的位置由语言决定,而不是由库决定。

ValidateFieldsOutOfOrder设置为接收器上的N,这样即使标签乱序,您的消息也不会被拒绝。这给我带来了很多工作,因为无论我尝试什么,标签都不会结束,我不得不放松把标签按顺序排列。如果标签没有按顺序排列,则拒绝消息的接受器不是一个好的选择。你不能依赖每个修复库来完成你的任务。

最新更新