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