没有为MarketDataRequest的此消息类型定义标记

时间:2014-12-27 11:01:06

标签: fix-protocol

案例I:我正在将MarketDataRequest35=V)发送到FIX服务器,我收到MARKET_DATA_REQUEST_REJECT回复(35=Y )文本58=RequestValidationError.ProductNotSet

案例II :我在请求中添加了值ProductCURRENCY)的字段460=4并再次发送一次。结果我得到REJECT个答案(35=3),文字58=Tag not defined for this message typeRefTagID指向Product371=460)。 我很困惑!

以下是我的C#请求代码:

MDReqID mdReqID = new MDReqID("MARKETDATAID");
SubscriptionRequestType subType = new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES);
MarketDepth marketDepth = new MarketDepth(1);

QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup symbolGroup = new QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup();
symbolGroup.Set(new Symbol("EUR/USD"));

QuickFix.FIX44.MarketDataRequest message = new QuickFix.FIX44.MarketDataRequest(mdReqID, subType, marketDepth);
message.MDUpdateType = new MDUpdateType(0);

QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup marketDataEntryGroup = new QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup();
marketDataEntryGroup.Set(new MDEntryType(MDEntryType.BID));
message.AddGroup(marketDataEntryGroup);
marketDataEntryGroup.Set(new MDEntryType(MDEntryType.OFFER));
message.AddGroup(marketDataEntryGroup);

message.AddGroup(symbolGroup);

message.SetField(new QuickFix.Fields.DeliverToCompID("ALL"));
message.SetField(new QuickFix.Fields.Product(QuickFix.Fields.Product.CURRENCY));

以下是与案例I相关的请求和回复:

ToApp 8=FIX.4.4 9=165 35=V 34=2 49=XXXX 50=YYYY 52=20141227-10:11:27.728 56=demo.fxgrid 128=ALL 262=MARKETDATAID 263=1 264=1 265=0 267=2 269=0 269=1 146=1 55=EUR/USD 10=104 
FromApp 8=FIX.4.4 9=138 35=Y 34=2 49=demo.fxgrid 52=20141227-10:11:28.716 56=XXXX 58=RequestValidationError.ProductNotSet 262=MARKETDATAID 281=3 10=218 

以下是与案例II相关的请求和回复:

ToApp 8=FIX.4.4  9=171  35=V  34=2  49=XXXX  50=YYYY  52=20141227-10:19:59.744  56=demo.fxgrid  128=ALL  262=MARKETDATAID  263=1  264=1  265=0  460=4  267=2  269=0  269=1  146=1  55=EUR/USD  10=124  
FromAdmin 8=FIX.4.4  9=161  35=3  34=2  49=demo.fxgrid  52=20141227-10:20:00.741  56=XXXX  57=YYYY  115=ALL  45=2  58=Tag not defined for this message type  371=460  372=V  373=2  10=221  

2 个答案:

答案 0 :(得分:3)

案例1:这不是FIX或QuickFIX错误。您的消息根据FIX协议有效,但不是您的对方期望的。

标记58中的错误消息由您的对手方设置。听起来您没有阅读对方的文档,告诉您他们希望您设置哪些字段。

案例2:根据默认的FIX消息定义,标记460不属于MarketDataRequest消息的顶级。因此,这是一个非法的消息。 (听起来你是FIX的新手,因为这是一个新手的错误。)

注意:您的对手方可能正在使用默认定义的修改版本,因此您还需要修改FIX44.xml DataDictionary文件以匹配其定义。同样,这将在他们的文档中。

BOTTOM LINE:在进行更多开发之前,请先阅读对方的文档!

答案 1 :(得分:0)

先生别急。在 QuickFix 中肯定是接收代码中的错误。我通过逐个标签检查找到它。在 RefTagID < 371 > 字段中,标签编号不正确。解决方案是检查 FIX.xml 中的所有字段