Skip to main content
If the participants subscribed to ongoing updates for the instrument(s), the platform will then start sending unsolicited MarketDataIncrementalRefresh [X] messages which contain a mixture of trade and/or order book update messages. These incremental market data messages may contain a repeating group of updates in a single message. For example, an incoming sell order which enters the order book, executes against a resting buy order with the remainder written to the order book will trigger a MarketDataIncrementalRefresh [X] message containing the following updates:
  • The deletion of the previous best bid (as a result of the immediate fill)
  • The addition of a new best bid (next-best bid price)
  • The deletion of the best offer (new order has a better price)
  • The addition of a new best offer (representing the balance of the incoming sell order)
  • A record relating to the trade, and
  • A record relating to updated overall market volume

Table 22: MarketDataIncrementalRefresh (X) message

TagNameReqTypeDescription
< Standard Header >Y35 = X
262MDReqIDYStringThe ID of the request as indicated on the request
268NoMDEntriesYNumInGroup
β†’ 279MDUpdateActionYcharThe type of action conveyed by this block (0=New, 1=Change, 2=Delete)
β†’ 269MDEntryTypeCcharType of entry. Set where MDUpdateAction (279) = (0) New or 1 (Change). 0=Bid, 1=Offer, 2=Trade, 4=Opening Price, 5=Closing Price, 6=Settlement Price, 7=Trading Session High Price, 8=Trading Session Low Price, B=Trade Volume, g=Trading Reference Price
β†’ 278MDEntryIDNStringUnique reference for this entry. Typically a 13-character alphanumeric string.
β†’ 55SymbolYStringInstrument symbol
β†’ 22SecurityIDSourceYint8 = Exchange symbol
β†’ 48SecurityIDYStringWill always equal Symbol (55)
β†’ 167SecurityTypeNStringType of instrument (CS, FUT, FXSPOT, FXSWAP, OOF, OPT, NONE)
β†’ 1151SecurityGroupNStringSecurity sub-type. For example β€œEquities”
β†’ 270MDEntryPxNPriceOrder level price where MDEntryType (269) = 0 (Bid) or 1 (Offer). Traded price where MDEntryType (269) = 2 (Trade). Total value traded where MDEntryType (269) = B (Trade Volume)
β†’ 271MDEntrySizeNQtyRemaining order size where MDEntryType (269) = 0 (Bid) or 1 (Offer). Will be zero where MDUpdateAction (279) = 2 (Delete). Trade size where MDEntryType (269) = 2 (Trade). Total quantity traded where MDEntryType (269) = B (Trade Volume)
β†’ 272MDEntryDateNUTCDateOnlyThe date on which the price level or trade occurred
β†’ 273MDEntryTimeNUTCTimeOnlyThe time at which the price level updated or trade occurred (in UTC)
β†’ 59TimeInForceNcharTime in force for this order (0=Good for day, 1=Good till cancel, 6=Good till date)
β†’ 126ExpireTimeNUTCTimestampPopulated where TimeInForce (59) = 6 (Good Till Date)
β†’ 37OrderIDNStringOnly sent for price level updates. Will match OrderID (37) in the ExecutionReport [8], allowing Participants to identify their own orders within market data.
β†’ 40OrdTypeNchar2 = Limit order, K = Market-to-limit order
β†’ 828TrdTypeNintOnly sent for trades. 0 = Regular trade
β†’ 1003TradeIDNStringOnly sent for trade updates. Will match the ExecID (17) in the ExecutionReport fill, allowing Participants to identify their own trades within market data.
β†’ 2446AggressorSideNcharOnly sent for trades. Indicates which side was the aggressor in a trade (1=Buy, 2=Sell)
β†’ 336TradingSessionIDCStringSent for trades and trading status changes. Possible values: CLOSED, OPEN, PREOPEN, SUSPENDED, EXPIRED, TERMINATED, HALTED, MATCH_AND_CLOSE_AUCTION
< Standard Trailer >Y
Example 20: Market Data incremental containing multiple updates (repeating groups color-coded)
8=FIXT.1.1 | 9=987 | 35=X | 34=87 | 49=TARGET | 52=20240521-09:52:30.013930670 | 56=SENDER | 262=1552371733 | 268=6 | 279=0 | 269=0 | 278=1HQ4A5T0EDM1T | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=1500 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 37=1HQ4A5T0EDM1T | 40=2 | 279=0 | 269=1 | 278=1HQ4A5T0EDM1W | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=15 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 37=1HQ4A5T0EDM1W | 40=2 | 279=2 | 269=1 | 278=1HQ4A5T0EDM1W | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=0 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 37=1HQ4A5T0EDM1W | 40=2 | 279=2 | 269=0 | 278=1HQ4A5T0EDM1V | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=0 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 37=1HQ4A5T0EDM1V | 40=2 | 279=0 | 269=2 | 278=1HPT7DQ1GC4DS | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=15 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 40=2 | 828=0 | 1003=1HPT7DQ1GC4DS | 2446=2 | 279=0 | 269=B | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=93544.85 | 271=23660 | 272=20240521 | 273=09:52:30.004561670 | 336=OPEN | 10=156 |

Settlement Outcomes

Implementation

FIX tag 58 (Text) has been added to the MDIncGrp repeating group to communicate final settlement outcomes. When an instrument resolves with final settlement, the MarketDataIncrementalRefresh (35=X) or MarketDataSnapshotFullRefresh (35=W) message includes the textual outcome.

Message Structure

When an instrument settles, the message includes:
NoMDEntries/0/MDEntryType      | "6"          # Settlement price (269=6)
NoMDEntries/0/MDEntryPx        | <price>      # Settlement price value
NoMDEntries/0/Text             | <outcome>    # NEW: Textual outcome (tag 58)
NoMDEntries/0/TradingSessionID | "EXPIRED"    # Market status (336=EXPIRED)

Usage

Final Settlement: Tag 58 is present with the outcome text describing the resolution (e.g., β€œPistons”, β€œBulls”, β€œOver”, β€œYes”). Trade Day Roll: Tag 58 is absent, even when 269=6 is present with 336=CLOSED or 336=EXPIRED. Tag 58 only populates when the settlement price and open interest update occur at final settlement, not during initial state transition to EXPIRED.

Technical Notes

  • No data dictionary modifications required - tag 58 already exists in FIX 5.0+ spec for MDIncGrp
  • This implementation keeps FIX vanilla/standard-compliant
  • Tag 58 is equivalent to the TIER1 field in gRPC settlement_tiers
Example: NBA game settlement where Detroit Pistons win:
269=6       # Settlement price entry type
270=1.000   # Settlement price (winning outcome pays $1.00)
58=Pistons  # Textual outcome
336=EXPIRED # Trading session status