MarketData Incremental Refresh

Describing Market Data


The T4 FIX API supports streaming of market data with the Market Data Incremental Refresh message (Tag 35=X) alongside MarketData Snapshot messages (Tag 35=W).

Market Data Incremental Refresh messages are responses to a Market Data Request message with a Subscription Request Type of Snapshot + Updates_Incremental (Tag 263=7). They carry step-by-step changes to the depth book without having to transmit the complete depth information (for all requested book levels) as the Market Data Snapshot message (Tag 35=W). Book instructions are incremental and update applicable parts of the book as necessary, as opposed to refreshing the entire book each time there is a depth update. Therefore, the incremental refresh approach reduces the message size required to notify a depth change.

The Market Data Incremental Refresh message can project changes in the Bid (Tag 269=0), Offer (Tag 269=1), Implied Bid (Tag 269=2) and Implied Offer (Tag 269=3) books. Market Data Incremental Refresh messages will only be generated for MDUpdateTypes (Tag 265) that provide depth book information (e.g. SlowSmart, Smart, SmartTrade, etc.). Trades are always provided as individual Market Data Snapshot messages (Tag 35=W) even under incremental refresh streaming.

Depth Book Refresh


A Market Data Request (Tag 35=V) message with a Subscription Request Type of Snapshot + Updates_Incremental (Tag 263=7) initiates the Depth Book incremental refresh process. The incremental refresh process may start with an initial (Depth) Market Data Snapshot message (Tag 35=W) establishing the instantaneous state of the depth book. Any subsequent Market Data Incremental Refresh messages are applied in sequence to the last (Depth) Market Data Snapshot received. The initial Depth Market Data Snapshot may not be received if the streaming market has not been loaded. The Depth Book can also be built without (Depth) Market Data Snapshots through the process of Natural Refresh which only considers the cumulative effect of Market Data Incremental messages.

The Market Data Incremental Refresh message only includes (instantaneous) transactions that change a specific (Price) MDEntryLevel (Tag 1023). Depending on the MDUpdateAction (Tag 279), the MDEntryPx (Tag 270) or MDEntrySize (Tag 271) may be changed, deleted or added at the identified MDEntryLevel (Tag 1023). Multiple MDUpdateActions (a.k.a. data blocks) can be sent in one Market Data Incremental Refresh message. Each data block is applied incrementally in the sequence of the MDEntries found in the NoMDEntries repeating group.

For applicable MDUpdateTypes (a.k.a. buffer levels), trades are disseminated as their own individual Market Data Snapshots (with no depth book entries). As trades occur, Trade Market Data Snapshots are streamed alongside the incremental book changes.

Update Action Logic


The logic behind using MDUpdateAction (Tag 279) of the Market Data Incremental Refresh message is as follows:

Matching against Market Data Requests


Market Data Incremental Refresh messages can be matched (by the FIX API client) through either the (unique) SecurityID (Tag 48) or by the Request ID (MDReqID - Tag 262) of the Market Data Request message that initiated the streaming. SecurityID is the default identification mechanism. If the message is identifiable by SecurityID, the first incremental data block will contain the market (SecurityID - Tag 48) to which the updates apply to. If the client requests to identify by MDReqID, the SecurityID will not be included in the first incremental data block. To establish market state, the Security Trading Status (Tag 369) is also provided in the first data block of the MDEntries.

Message Dictionary


Tag Field Name Req'd Comments
Standard Header Y
262 MDReqID N Identifier of Market Data Request.
268 NoMDEntries Y Number of Market Data entries to follow
279 MDUpdateAction Y Market Data Update. Must be the first field in this repeating group. 0 = Add; 1 = Change; 2 = Delete
269 MDEntryType Y 0 = Bid; 1 = Offer; 2 = Implied Bid; 3 = Implied Offer
270 MDEntryPx N Entry Price.
271 MDEntrySize N Entry Size (or Volume).
1023 MDEntryLevel Y Book (price) level this entry pertains to; 1–10
48 SecurityID N Security Identifier. T4 Market ID.
326 Security Trading Status N Market Status of Security. 0 = Undefined; 1 = PreOpen; 2 = Open; 3 = RestrictedOpen; 4 = PreClosed; 5 = Closed; 6 = Suspended; 7 = Halted; 8 = Failed; 9 = PreCross; 10 = Cross; 11 = Expired; 12 = Rejected; 13 = Unavailable
Standard Trailer Y

Sample Messages

The different stages of a Market Data Incremental Refresh session are shown below. In the first message, the incremental refresh session is requested for both Bid (Tag 269=0) and Offer books (Tag 269=1) with a depth of 10 price levels (Tag 264=10) alongside Trade market data snapshots (Tag 269=4). The first message received (with sequence number 4) is a Market Data Snapshot. This message fully establishes the depth details of all (available) price levels for the Bid and Offer books. As available, the following snapshot carries the settlement, limit and high/low prices for the session. Following are four incremental refresh messages indicating changes to different levels of the Bid and Offer books. These incremental changes would be applied (in sequence) to the latest state of the Bid and Offer books as shown in the initial Market Data Snapshot (of sequence number 4). At the end of the samples, three individual Trade market data snapshots are received as these trades occur in the market.

Requesting Incremental Refresh Session
1 - MARKETDATAREQUEST
34=2|49=T4Example|52=20131125-17:35:50.449|56=T4|146=1|55=ES|48=CME_20131200_ESZ3|207=CME_Eq|262=11-25-2013-11:35:50.4497000-mr|263=7|264=10|265=3|267=8|269=0|269=1|269=4|269=7|269=8|269=K|269=L|269=6|

[MsgSeqNum] 34 = 2
[SenderCompID] 49 = T4Example
[SendingTime] 52 = 20131125-17:35:50.449
[TargetCompID] 56 = T4
[NoRelatedSym] 146 = 1
[Symbol] 55 = ES
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityExchange] 207 = CME_Eq
[MDReqID] 262 = 11-25-2013-11:35:50.4497000-mr
[SubscriptionRequestType] 263 = 7 (SNAPSHOT_PLUS_UPDATES_INCREMENTAL)
[MarketDepth] 264 = 10
[MDUpdateType] 265 = 3 (SMART_TRADE)
[NoMDEntryTypes] 267 = 8
[MDEntryType] 269 = 0 (BID)
[MDEntryType] 269 = 1 (OFFER)
[MDEntryType] 269 = 4 (TRADE)
[MDEntryType] 269 = 7 (TRADING_SESSION_HIGH_PRICE)
[MDEntryType] 269 = 8 (TRADING_SESSION_LOW_PRICE)
[MDEntryType] 269 = K (LIMIT_HIGH_PRICE)
[MDEntryType] 269 = L (LIMIT_LOW_PRICE)
[MDEntryType] 269 = 6 (SETTLEMENT_PRICE)
Initial State of Bid and Offer Books
2 - MARKETDATASNAPSHOT
34=4|49=T4|56=T4Example|52=20131125-17:35:57.272|48=CME_20131200_ESZ3|387=617967|965=2|268=21|269=0|270=180425|271=268|1023=1|269=0|270=180400|271=1049|1023=2|269=0|270=180375|271=1488|1023=3|269=0|270=180350|271=1596|1023=4|269=0|270=180325|271=1192|1023=5|269=0|270=180300|271=1240|1023=6|269=0|270=180275|271=1220|1023=7|269=0|270=180250|271=1413|1023=8|269=0|270=180225|271=1368|1023=9|269=0|270=180200|271=1759|1023=10|269=1|270=180450|271=768|1023=1|269=1|270=180475|271=1316|1023=2|269=1|270=180500|271=1713|1023=3|269=1|270=180525|271=1476|1023=4|269=1|270=180550|271=1760|1023=5|269=1|270=180575|271=1418|1023=6|269=1|270=180600|271=1783|1023=7|269=1|270=180625|271=1226|1023=8|269=1|270=180650|271=1484|1023=9|269=1|270=180675|271=1396|1023=10|269=4|270=180425|271=2|

[MsgSeqNum] 34 = 4
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:57.272
[SecurityID] 48 = CME_20131200_ESZ3
[TotalVolumeTraded] 387 = 617967
[SecurityStatus] 965 = 2 (OPEN)
[NoMDEntries] 268 = 21
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 268
[MDPriceLevel] 1023 = 1
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180400
[MDEntrySize] 271 = 1049
[MDPriceLevel] 1023 = 2
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180375
[MDEntrySize] 271 = 1488
[MDPriceLevel] 1023 = 3
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180350
[MDEntrySize] 271 = 1596
[MDPriceLevel] 1023 = 4
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180325
[MDEntrySize] 271 = 1192
[MDPriceLevel] 1023 = 5
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180300
[MDEntrySize] 271 = 1240
[MDPriceLevel] 1023 = 6
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180275
[MDEntrySize] 271 = 1220
[MDPriceLevel] 1023 = 7
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180250
[MDEntrySize] 271 = 1413
[MDPriceLevel] 1023 = 8
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180225
[MDEntrySize] 271 = 1368
[MDPriceLevel] 1023 = 9
[MDEntryType] 269 = 0 (BID)
[MDEntryPx] 270 = 180200
[MDEntrySize] 271 = 1759
[MDPriceLevel] 1023 = 10
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180450
[MDEntrySize] 271 = 768
[MDPriceLevel] 1023 = 1
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180475
[MDEntrySize] 271 = 1316
[MDPriceLevel] 1023 = 2
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180500
[MDEntrySize] 271 = 1713
[MDPriceLevel] 1023 = 3
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180525
[MDEntrySize] 271 = 1476
[MDPriceLevel] 1023 = 4
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180550
[MDEntrySize] 271 = 1760
[MDPriceLevel] 1023 = 5
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180575
[MDEntrySize] 271 = 1418
[MDPriceLevel] 1023 = 6
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180600
[MDEntrySize] 271 = 1783
[MDPriceLevel] 1023 = 7
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180625
[MDEntrySize] 271 = 1226
[MDPriceLevel] 1023 = 8
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180650
[MDEntrySize] 271 = 1484
[MDPriceLevel] 1023 = 9
[MDEntryType] 269 = 1 (OFFER)
[MDEntryPx] 270 = 180675
[MDEntrySize] 271 = 1396
[MDPriceLevel] 1023 = 10
[MDEntryType] 269 = 4 (TRADE)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 2
Snapshot of Settlement and Session limits
- Snapshot of Settlement and Session limits -
3 - MARKETDATASNAPSHOT
34=5|49=T4|56=T4Example|52=20131125-17:35:57.272|48=CME_20131200_ESZ3|965=2|268=4|269=6|270=180125|271=2775739|269=7|270=180925|269=8|270=180100|269=L|270=167650|

[MsgSeqNum] 34 = 5
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:57.272
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityStatus] 965 = 2 (OPEN)
[NoMDEntries] 268 = 4
[MDEntryType] 269 = 6 (SETTLEMENT_PRICE)
[MDEntryPx] 270 = 180125
[MDEntrySize] 271 = 2775739
[MDEntryType] 269 = 7 (TRADING_SESSION_HIGH_PRICE)
[MDEntryPx] 270 = 180925
[MDEntryType] 269 = 8 (TRADING_SESSION_LOW_PRICE)
[MDEntryPx] 270 = 180100
[MDEntryType] 269 = L (LIMIT_LOW_PRICE)
[MDEntryPx] 270 = 167650
Incremental Refreshes on Bid Levels 1 and 8 and Offer Levels 1 and 5
4 - MARKETDATAINCREMENTAL
34=6|49=T4|56=T4Example|52=20131125-17:35:57.944|268=4|279=1|269=0|1023=1|271=287|48=CME_20131200_ESZ3|326=2|279=1|269=0|1023=8|271=1407|279=1|269=1|1023=1|271=783|279=1|269=1|1023=5|271=1759|

[MsgSeqNum] 34 = 6
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:57.944
[NoMDEntries] 268 = 4
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 0 (BID)
[MDPriceLevel] 1023 = 1
[MDEntrySize] 271 = 287
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityTradingStatus] 326 = 2 (OPEN)
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 0 (BID)
[MDPriceLevel] 1023 = 8
[MDEntrySize] 271 = 1407
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 1 (OFFER)
[MDPriceLevel] 1023 = 1
[MDEntrySize] 271 = 783
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 1 (OFFER)
[MDPriceLevel] 1023 = 5
[MDEntry
Incremental Refresh on Bid Level 1
5 - MARKETDATAINCREMENTAL
34=7|49=T4|56=T4Example|52=20131125-17:35:57.991|268=1|279=1|269=0|1023=1|271=294|48=CME_20131200_ESZ3|326=2|

[MsgSeqNum] 34 = 7
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:57.991
[NoMDEntries] 268 = 1
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 0 (BID)
[MDPriceLevel] 1023 = 1
[MDEntrySize] 271 = 294
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityTradingStatus] 326 = 2 (OPEN)
Incremental Refresh on Offer Level 2
6 - MARKETDATAINCREMENTAL
34=8|49=T4|56=T4Example|52=20131125-17:35:58.303|268=1|279=1|269=1|1023=2|271=1319|48=CME_20131200_ESZ3|326=2|

[MsgSeqNum] 34 = 8
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:58.303
[NoMDEntries] 268 = 1
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 1 (OFFER)
[MDPriceLevel] 1023 = 2
[MDEntrySize] 271 = 1319
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityTradingStatus] 326 = 2 (OPEN)
Incremental Refresh on Offer Level 2
7 - MARKETDATAINCREMENTAL
34=9|49=T4|56=T4Example|52=20131125-17:35:59.366|268=1|279=1|269=1|1023=2|271=1831|48=CME_20131200_ESZ3|326=2|

[MsgSeqNum] 34 = 9
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:35:59.366
[NoMDEntries] 268 = 1
[MDUpdateAction] 279 = 1 (CHANGE)
[MDEntryType] 269 = 1 (OFFER)
[MDPriceLevel] 1023 = 2
[MDEntrySize] 271 = 1831
[SecurityID] 48 = CME_20131200_ESZ3
[SecurityTradingStatus] 326 = 2 (OPEN)
Trade Snapshot. 8 contracts at 180425
8 - MARKETDATASNAPSHOT
34=10|49=T4|56=T4Example|52=20131125-17:36:00.163|48=CME_20131200_ESZ3|387=617975|268=1|269=4|270=180425|271=8|273=20131125-17:36:00.235|274=2|

[MsgSeqNum] 34 = 10
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:36:00.163
[SecurityID] 48 = CME_20131200_ESZ3
[TotalVolumeTraded] 387 = 617975
[NoMDEntries] 268 = 1
[MDEntryType] 269 = 4 (TRADE)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 8
[MDEntryTime] 273 = 20131125-17:36:00.235
[TickDirection] 274 = 2 (MINUS_TICK)
Trade Snapshot. 3 contracts at 180425
9 - MARKETDATASNAPSHOT
34=11|49=T4|56=T4Example|52=20131125-17:36:00.163|48=CME_20131200_ESZ3|387=617978|268=1|269=4|270=180425|271=3|273=20131125-17:36:00.235|274=2|

[MsgSeqNum] 34 = 11
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:36:00.163
[SecurityID] 48 = CME_20131200_ESZ3
[TotalVolumeTraded] 387 = 617978
[NoMDEntries] 268 = 1
[MDEntryType] 269 = 4 (TRADE)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 3
[MDEntryTime] 273 = 20131125-17:36:00.235
[TickDirection] 274 = 2 (MINUS_TICK)
Trade Snapshot. 1 contracts at 180425
10 - MARKETDATASNAPSHOT
34=12|49=T4|56=T4Example|52=20131125-17:36:00.163|48=CME_20131200_ESZ3|387=617979|268=1|269=4|270=180425|271=1|273=20131125-17:36:00.235|274=2|

[MsgSeqNum] 34 = 12
[SenderCompID] 49 = T4
[TargetCompID] 56 = T4Example
[SendingTime] 52 = 20131125-17:36:00.163
[SecurityID] 48 = CME_20131200_ESZ3
[TotalVolumeTraded] 387 = 617979
[NoMDEntries] 268 = 1
[MDEntryType] 269 = 4 (TRADE)
[MDEntryPx] 270 = 180425
[MDEntrySize] 271 = 1
[MDEntryTime] 273 = 20131125-17:36:00.235
[TickDirection] 274 = 2 (MINUS_TICK)

T4 FIX API Home