案例I:我正在将MarketDataRequest
(35=V
)发送到FIX服务器,我收到MARKET_DATA_REQUEST_REJECT
回复(35=Y
)文本58=RequestValidationError.ProductNotSet
。
案例II :我在请求中添加了值Product
(CURRENCY
)的字段460=4
并再次发送一次。结果我得到REJECT
个答案(35=3
),文字58=Tag not defined for this message type
也RefTagID
指向Product
(371=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
答案 0 :(得分:3)
案例1:这不是FIX或QuickFIX错误。您的消息根据FIX协议有效,但不是您的对方期望的。
标记58中的错误消息由您的对手方设置。听起来您没有阅读对方的文档,告诉您他们希望您设置哪些字段。
案例2:根据默认的FIX消息定义,标记460不属于MarketDataRequest
消息的顶级。因此,这是一个非法的消息。 (听起来你是FIX的新手,因为这是一个新手的错误。)
注意:您的对手方可能正在使用默认定义的修改版本,因此您还需要修改FIX44.xml DataDictionary文件以匹配其定义。同样,这将在他们的文档中。
BOTTOM LINE:在进行更多开发之前,请先阅读对方的文档!
答案 1 :(得分:0)
先生别急。在 QuickFix 中肯定是接收代码中的错误。我通过逐个标签检查找到它。在 RefTagID < 371 > 字段中,标签编号不正确。解决方案是检查 FIX.xml 中的所有字段