ZagTrader

Session-level rejects (35=3)

Value is incorrect (out of range) for this tag (373=5)

The field has a fixed list of allowed values in the receiver's dictionary and the value sent is not on it. The receiver answers with a Reject carrying 373=5 and the field in RefTagID (371).

What it means

Enumerated fields such as OrdStatus (39), ExecType (150), OrdType (40) and TimeInForce (59) have allowed codes that change between FIX versions. A code valid in FIX 4.2 can be missing from the FIX 4.4 dictionary, and the reverse.

The same reason is used when a SequenceReset in Reset mode tries to lower the sequence number through NewSeqNo (36).

Common causes

  • FIX 4.2 execution codes sent on a FIX 4.4 session: 150=1 or 150=2 instead of 150=F, or 39=5 for a replaced order.
  • Lower-case or padded values: codes are case sensitive, so 54=b is not 54=B.
  • Venue-specific values that the counterparty's dictionary does not include.
  • A dictionary that is older than the version the counterparty actually speaks.

How to fix it

On the side that sent the message

  • Check the value list for your FIX version on the version dictionary pages and map codes per session version.
  • Do not reuse one set of enum constants across FIX 4.2 and 4.4 sessions.

On the side that raised the error

  • If a counterparty sends a code you can safely interpret, add it to your dictionary instead of rejecting every message.
  • Return the field in RefTagID (371) and the value in Text (58).

Example

A sell side still using FIX 4.2 fill codes sends ExecType 2 on a FIX 4.4 session.

  1. 1. Sell side: Execution Report with 150=2

    8=FIX.4.4|9=172|35=8|49=SELLSIDE|56=BUYSIDE|34=970|52=20261020-10:01:00.000|37=OID-778812|11=ORD-1001|17=EXEC-0970|150=2|39=2|55=MSFT|54=1|38=1000|32=1000|31=187.50|151=0|14=1000|6=187.50|10=067|
  2. 2. Buy side: Reject, RefTagID 150

    8=FIX.4.4|9=136|35=3|49=BUYSIDE|56=SELLSIDE|34=95|52=20261020-10:01:00.001|45=970|371=150|372=8|373=5|58=Value is incorrect (out of range) for this tag|10=123|

SOH (0x01) is shown as |. BodyLength (9) and CheckSum (10) are calculated as if every | were SOH.

Open this example in the parser

Questions

Why is 150=2 rejected in FIX 4.4?
FIX 4.4 removed ExecType 1 (Partial fill) and 2 (Fill). A fill is reported with 150=F (Trade), and OrdStatus (39) says whether the order is partially or fully filled.

Reference

Related errors

All FIX errors · FIX guides