FIX 4.4 MarketDataRequest 条件必填字段缺失 (299)

FIX 4.4 MarketDataRequest Conditionally Required Field Missing (299)

我写了一个发送以下内容的程序

 to App: 8=FIX.4.4|9=156|35=V|34=2|49=id|52=sometime|56=id1|146=1|55=EURUSD|460=4|167=FOR|262=1|263=1|264=1|265=0|267=2|269=0|269=1|10=114|

我收到了。我得到了预期的出价和报价:

 from App 8=FIX.4.4|9=217|35=W|34=4|49=id1|52=sometime|56=id|42=sometime1|55=EURUSD|262=1|268=2|269=0|270=1.12438|271=50000|269=1|270=1.12442|271=50000|10094=sometime2|10=002|

但是当我在完全刷新时请求快照 + 更新时,它发回了以下内容;

to App: 8=FIX.4.4|9=118|35=j|34=3|49=id|52=sometime|56=id1|45=2|58=Conditionally Required Field Missing (299)|372=W|380=5|10=210|

我经纪人的数据字典如下:DataDictionary

UseDataDictionary=Y

ValidateUserDefinedFields=N # tried with Y, same

DataDictionary=C:\Users\Documents\FIX44.xml

知道我做错了什么吗?

谢谢大家!

检查交易对手的文档,了解他们希望您在 MarketDataRequest (35=V) 消息中发送哪些字段。

在默认的 DataDictionary 中,QuoteEntryID(标签 299)不属于 MarketDataRequest 或它包含的任何重复组。这意味着您的交易对手已经进行了 DD 定制并将其添加到某处。

所以你的主要错误是你没有看对方的文档,你的本地 DD 与他们的不同步。 在这个问题中,后面的部分不会让你感到厌烦,但它稍后会让你感到厌烦。让您的 DD 同步!

回到本期:当然,您是在消息中添加 QuoteEntryID,但您是将其添加到消息正文的顶层,而您的交易对手可能不是在那里寻找它。如果您再次查看默认的 DataDictionary,QuoteEntryID 始终属于一个组,因此您的交易对手可能也希望它在一个组中。你只需要阅读他们的文档来找出它是哪个组。

TLDR:交易对手始终自定义 DataDictionary——始终阅读交易对手的文档!