FIX 4.2标签未定义

时间:2018-02-16 17:34:24

标签: quickfix fix-protocol

20180216-17:21:04.640 : 8=FIX.4.2;9=115;35=V;34=3;49=SNDJ;52=20180216-17:21:04.640;56=BROKER;55=EUR/USD;146=1;262=676;263=1;264=1;265=1;266=Y;267=1;269=0;10=061;
20180216-17:21:04.641 : 8=FIX.4.2;9=119;35=3;34=3;49=BROKER;52=20180216-17:21:04.641;56=SNDJ;45=3;58=Tag not defined for this message type;371=55;372=V;373=2;10=237;

我尝试发送35 = V消息时收到'此消息类型未定义的标记'拒绝(35 = 3)。我添加并删除了ValidateUserDefinedFields,ValidateFieldsOutOfOrder。

我放弃了组结构,重新添加它,重新定义了Symbol和NoRelatedSym类型(字符串,符号,int,numingroup等),更改了发送到EURUSD,TEST等的符号,但没有任何作用。

我在这里错过了一些非常简单的事吗?这似乎与请求消息将符号标记放在组前面这一事实有关,但我不知道为什么。

MarketDataRequest.h:

FIELD_SET(*this, FIX::NoRelatedSym);
      class NoRelatedSym: public FIX::Group
      {
      public:
      NoRelatedSym() : 


FIX::Group(146,55,FIX::message_order(55,65,48,22,167,200,205,201,2
 02,206,231,223,207,106,348,349,107,350,351,336,0)) {}
       FIELD_SET(*this, FIX::Symbol);
       ....
  };

我为MarketDataRequest消息设置的当前FIX 4.2 .xml如下所示:

<message name='MarketDataRequest' msgtype='V' msgcat='app'>
 <field name='MDReqID' required='Y' />
 <field name='SubscriptionRequestType' required='Y' />
 <field name='MarketDepth' required='Y' />
 <field name='MDUpdateType' required='N' />
 <field name='AggregatedBook' required='N' />
 <group name='NoMDEntryTypes' required='Y'>
  <field name='MDEntryType' required='Y' />
 </group>
 <group name='NoRelatedSym' required='Y'>
  <field name='Symbol' required='Y' />
  <field name='SymbolSfx' required='N' />
  <field name='SecurityID' required='N' />
  <field name='IDSource' required='N' />
  <field name='SecurityType' required='N' />
  <field name='MaturityMonthYear' required='N' />
  <field name='MaturityDay' required='N' />
  <field name='PutOrCall' required='N' />
  <field name='StrikePrice' required='N' />
  <field name='OptAttribute' required='N' />
  <field name='ContractMultiplier' required='N' />
  <field name='CouponRate' required='N' />
  <field name='SecurityExchange' required='N' />
  <field name='Issuer' required='N' />
  <field name='EncodedIssuerLen' required='N' />
  <field name='EncodedIssuer' required='N' />
  <field name='SecurityDesc' required='N' />
  <field name='EncodedSecurityDescLen' required='N' />
  <field name='EncodedSecurityDesc' required='N' />
  <field name='TradingSessionID' required='N' />
 </group>
 </message>

配置设置:

[DEFAULT]
BeginString=FIX.4.2
ReconnectInterval=60
SocketAcceptPort=7091
SenderCompID=SNDJ
TargetCompID=BROKER
SocketNodelay=Y
PersistMessage=Y
FileStorePath=cache
FileLogPath=log

[SESSION]
ConnectionType=acceptor
StartTime=00:30:00
EndTime=23:30:00
ReconnectInterval=30
HeartBtInt=15
SocketAcceptPort=7091
SocketReuseAddress=Y
DataDictionary=spec/FIX42.xml
AppDataDictionary=spec/FIX42.xml
SenderCompID=BROKER
TargetCompID=SNDJ
FileStorePath=cache
FileLogPath=log

[SESSION]
BeginString=FIX.4.2
ConnectionType=initiator
StartTime=00:30:00
EndTime=23:30:00
ReconnectInterval=15
HeartBtInt=15
SocketConnectPort=7091
SocketConnectHost=127.0.0.1
DataDictionary=spec/FIX42.xml
AppDataDictionary=spec/FIX42.xml
SenderCompID=SNDJ
TargetCompID=BROKER
FileStorePath=cache
FileLogPath=log

由于

1 个答案:

答案 0 :(得分:3)

根据您自己的DD,您发送的邮件无效。

查看标题结束后的第一个正文字段:

55=EUR/USD;146=1;262=676;...

该55字段应该在内部 146重复组中,但它的位置会将其放在该组之前。

我怀疑你的配置可能是罪魁祸首。如果您更新问题以包含配置,我可能会看到错误并更新此答案。

<强>更新

您的配置中缺少UseDataDictionary=Y,但这并不是导致问题的原因。 (但是,您需要正确接收消息。)

此外,您不需要AppDataDictionary - 仅适用于FIX 5 +。