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

问题描述 投票:0回答:1

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

 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|

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

UseDataDictionary=Y

ValidateUserDefinedFields=N # 尝试过Y,结果一样。

DataDictionary=C:UsersDocuments/FIX44.xml

请问大家知道我做错了什么吗?

谢谢大家!

python fix-protocol
1个回答
0
投票

检查你的交易方的文档,了解他们希望你在MarketDataRequest(35=V)消息中发送什么字段。

在默认的DataDictionary中,QuoteEntryID(标签299)不属于MarketDataRequest,也不属于它所包含的任何重复组。 这意味着您的交易方进行了DD定制,并在某个地方添加了它。

所以你的主要错误是你没有看对手方的文档,你的本地DD与他们的不同步。 后面这部分在这个问题上并没有烧到你,但它是 待会烧了你。 让你的DD同步吧!

回到这个问题上。 当然,你把QuoteEntryID加到了信息里 但你把它加到了信息主体的最上层 而你的对手可能不会在那里找它。 如果你再看看默认的DataDictionary,QuoteEntryID总是属于一个组,所以你的交易方可能也希望它在一个组中。 你只需要阅读他们的文档就可以知道它是哪个组。

TLDR: 对手方总是自定义DataDictionary -- 总是阅读你的对手方的文档!

© www.soinside.com 2019 - 2024. All rights reserved.