JBurrows
JBurrows

Reputation: 1

FIX 4.2 Tag Not Defined

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;

I receive 'tag not defined for this message type' rejects (35=3) when attempting to send 35=V messages. I have added and removed ValidateUserDefinedFields, ValidateFieldsOutOfOrder.

I have razed the group structure, re-added it, redefined both Symbol and NoRelatedSym types (to string, symbol, int, numingroup etc.), changed the symbol being sent to EURUSD, TEST, etc. and nothing works.

Have I missed something very simple here? It seems related to the fact that the request message puts the symbol tag ahead of the group, but I do not know why.

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);
       ....
  };

My current FIX 4.2 .xml set up for MarketDataRequest messages looks like:

<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>

Configuration Settings:

[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

Thanks

Upvotes: 0

Views: 1330

Answers (1)

Grant Birchmeier
Grant Birchmeier

Reputation: 18504

The message that you are sending is invalid per your own DD.

Look at the first body fields after the header ends:

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

That 55 field is supposed to be inside the 146 repeating group, but its placement puts it prior to the group.

I suspect your config may be to blame. If you update your question to include the config, I will probably be able to see what's wrong and update this answer.

UPDATE:

You are missing UseDataDictionary=Y from your config, though that's not the cause of your problem. (You need it to receive messages correctly, though.)

Also, you don't need AppDataDictionary -- that's only for FIX 5+.

Upvotes: 4

Related Questions