FIX 4.4 vs FIX 4.2

Every difference between the two dictionaries this site covers, computed from the data rather than written by hand. If you are bridging a FIX 4.2 counterparty to a FIX 4.4 venue, this is the list that bites.

By the numbers

Fields in 4.4
912
Fields in 4.2
405
In both
370
4.4 only
542
4.2 only
35
Messages
93 vs 46
Components
105 vs 2

FIX 4.2 declares only 2 component blocks — the standard header and trailer — because component blocks postdate it. Everything else is inlined into each message, which is why the two message bodies look so different even where the fields are the same.

Renamed fields (22)

Same tag number, different name. The wire is unaffected — a decoder keyed on tag numbers interoperates — but code and logs written against one name will not match the other.

TagFIX 4.2 nameFIX 4.4 name
22IDSourceSecurityIDSource
23IOIidIOIID
27IOISharesIOIQty
32LastSharesLastQty
33LinesOfTextNoLinesOfText
53SharesQuantity
63SettlmntTypSettlType
64FutSettDateSettlDate
74AvgPrxPrecisionAvgPxPrecision
77OpenClosePositionEffect
80AllocSharesAllocQty
193FutSettDate2SettlDate2
211PegDifferencePegOffsetValue
218SpreadToBenchmarkSpread
286OpenCloseSettleFlagOpenCloseSettlFlag
297QuoteAckStatusQuoteStatus
304TotQuoteEntriesTotNoQuoteEntries
305UnderlyingIDSourceUnderlyingSecurityIDSource
327HaltReasonHaltReasonChar
389DiscretionOffsetDiscretionOffsetValue
393TotalNumSecuritiesTotNoRelatedSym
418TradeTypeBidTradeType

Changed datatypes (43)

These fields kept their tag and name but changed type, so a value legal in one dialect can fail validation in the other.

TagFieldFIX 4.2FIX 4.4
7BeginSeqNointSeqNum
9BodyLengthintLength
16EndSeqNointSeqNum
33NoLinesOfTextintNumInGroup
34MsgSeqNumintSeqNum
36NewSeqNointSeqNum
45RefSeqNumintSeqNum
73NoOrdersintNumInGroup
78NoAllocsintNumInGroup
85NoDlvyInstintNumInGroup
124NoExecsintNumInGroup
136NoMiscFeesintNumInGroup
146NoRelatedSymintNumInGroup
158AccruedInterestRatefloatPercentage
199NoIOIQualifiersintNumInGroup
211PegOffsetValuePriceOffsetfloat
215NoRoutingIDsintNumInGroup
223CouponRatefloatPercentage
267NoMDEntryTypesintNumInGroup
268NoMDEntriesintNumInGroup
272MDEntryDateUTCDateUTCDateOnly
286OpenCloseSettlFlagcharMultipleValueString
291FinancialStatuscharMultipleValueString
292CorporateActioncharMultipleValueString
295NoQuoteEntriesintNumInGroup
296NoQuoteSetsintNumInGroup
369LastMsgSeqNumProcessedintSeqNum
382NoContraBrokersintNumInGroup
383MaxMessageSizeintLength
384NoMsgTypesintNumInGroup
386NoTradingSessionsintNumInGroup
389DiscretionOffsetValuePriceOffsetfloat
398NoBidDescriptorsintNumInGroup
402LiquidityPctLowfloatPercentage
403LiquidityPctHighfloatPercentage
405EFPTrackingErrorfloatPercentage
407OutsideIndexPctfloatPercentage
410WtAverageLiquidityfloatPercentage
413CrossPercentfloatPercentage
420NoBidComponentsintNumInGroup
421CountryStringCountry
428NoStrikesintNumInGroup
435UnderlyingCouponRatefloatPercentage

Renamed messages (4)

MsgTypeFIX 4.2 nameFIX 4.4 name
DOrderSingleNewOrderSingle
EOrderListNewOrderList
JAllocationAllocationInstruction
bQuoteAcknowledgementMassQuoteAcknowledgement

Enumerated values

Across the 370 shared fields, FIX 4.4 adds 277 enumerated values and drops 38, affecting 47 fields. A value your counterparty sends legally under one dialect can therefore come back as validate/value-not-in-enum under the other.

Note that the symbolic names differ far more than the values do: FIX 4.4 names come from the QuickFIX dictionary in SCREAMING_SNAKE_CASE, FIX 4.2 names from the FIX Repository in PascalCase. Only the on-the-wire value is stable across dialects, which is why every table on this site keys on the value.

Descriptions

Of the 370 shared fields, 175 have a byte-identical description in both dictionaries and 195 differ. Where they differ, the field’s page shows both.