This is an old revision of the document!
MarketData Request
Subscribing to Streaming Data
The T4 FIX API provides optional subscriptions to streaming market data for all markets available in order routing. Market data is delivered asynchronously and concurrently with order routing flow during a FIX Session.
Market data subscriptions are initiated by Market Data Request messages (Tag 35=V). Securities are identified by:
- Exchange (Tag 207 - SecurityExchange)
- Contract (Tag 55 - Symbol)
- Market (Tag 48 - SecurityID)
Subscriptions can be started anytime during the FIX Session with Subscription Request Type (Tag 263=1), and unsubscribed with Tag 263=2.
A successful Market Data Request returns Market Data messages:
- MarketData Snapshot (Tag 35=W)
- MarketData Incremental Refresh (Tag 35=X)
Each Market Data Entry represents bid, offer, trade, settlement price, session high/low, trade volume, open interest, or price limits. Full book or top-of-book subscriptions are available.
Market Data Incremental Refresh messages update specific book levels incrementally.
Requests that cannot be fulfilled result in a MarketData Request Reject message.
Subscription Types
_Type_ | _Tag 263 Value_ | _Description_ |
—————– | —————– | ————————————————- |
Subscribe | 1 | Snapshot + Updates: full feed until unsubscribed |
UnSubscribe | 2 | Cancel existing subscription |
SnapShot | 0 | Snapshot only (equivalent to 1 currently) |
Subscribe Incremental | 7 | Snapshot + Incremental Updates |
Data Throughput and Buffering Levels
T4 FIX API offers various buffering levels controlling throughput and bandwidth:
_Level_ | _Description_ |
————- | ———————————————————————————————- |
SlowTrade | SlowSmart + every trade; high bandwidth, use sparingly |
SmartTrade | Smart + every trade; high bandwidth, use sparingly |
SlowSmart | Slowed Smart buffering; ~1 update per second if changes occur |
Smart | Recommended; varies frequency based on changes to best bid/offer/last trade |
FastSmart | Faster than Smart; more frequent updates on best bid/offer |
All | No buffering; all depth updates sent; high bandwidth |
FastTrade | FastSmart + every trade; high bandwidth |
TradeOnly | Only individual trades; no depth or limits |
Book Depth
MarketDepth (Tag 264) controls the number of book levels requested, max 10. - Level 1: Top of Book - Level 10: Full Book If the security does not support 10 levels, the maximum supported is returned.
Matching Market Data Messages
Market Data messages can be matched by: - SecurityID (Tag 48) (default) - MDReqID (Tag 262) if SecurityDesc (Tag 107) is set to 262 (SecurityID omitted in this case)
Chart Data Requests
Chart (Time-and-Sales) Data requests are available for historical graph construction.
- Requires FIX Session with Enable Chart Data Requests (Tag 372=V) - Session auto-logs out if no Chart Data request within 60 seconds - Requests via Market Data Request (Tag 35=V) with SubscriptionRequestType (Tag 263):
_Type_ | _Tag 263 Value_ | _Description_ |
————————- | —————– | —————————————– |
TIME_AND_SALES_DATA_BATCH | 4 | Multiple days, customizable session time (recommended) |
TIME_AND_SALES_CONTRACT | 5 | Single day, all markets for a contract, total traded volume only |
Chart Data requests may specify: - TradeDateStart (Tag 3200) and TradeDateEnd (Tag 3201) - SessionStartTime (Tag 3202) and SessionEndTime (Tag 3203) - ChartType (Tag 3204) (granularity) - DataFormat (Tag 3205) for compression (U=Uncompressed, T=Compressed with Deflate, Z=Compressed with ZLib)
Responses are MarketData Snapshot messages (Tag 35=W).
Message Dictionary
Tag | Field Name | Req'd | Comments |
——- | ———————— | ——- | ————————————————————————————— |
Standard Header | Y | MsgType = V | |
262 | MDReqID | Y | Unique ID. Needed for unsubscribe |
263 | SubscriptionRequestType | Y | Subscription type (see table above) |
264 | MarketDepth | Y | Requested market depth (max 10) |
265 | MDUpdateType | N | Market data throughput buffer level (see buffering levels above) |
267 | NoMDEntryTypes | Y | Number of Market Data Entry Types requested |
269 | MDEntryType | Y | Market data entry types requested (e.g., 0=Bid, 1=Offer, 4=Last Trade, etc.) |
146 | NoRelatedSym | Y | Number of requested symbols (repeating group) |
55 | Symbol | Y | Contract ID |
48 | SecurityID | Y | Market ID |
167 | SecurityType | Y | Instrument type (e.g. FUT, OPT, STK) |
207 | SecurityExchange | Y | Exchange ID |
201 | PutOrCall | N | Option Put/Call indicator (0=Put, 1=Call) |
107 | SecurityDesc | N | Set to 262 to identify by MDReqID |
1070 | QuoteType | N | Obsolete. Pricing scheme (ticks/decimal) |
3200 | TradeDateStart | N | Start date for Chart Data requests (UTCDateOnly) |
3201 | TradeDateEnd | N | End date for Chart Data requests |
3202 | SessionStartTime | N | Session start time (UTCTimeOnly) |
3203 | SessionEndTime | N | Session end time (UTCTimeOnly) |
3204 | ChartType | N | Chart data granularity |
3205 | DataFormat | N | Compression format for chart data |
Standard Trailer | Y |
Subscribe to Streaming Data from a Specific Market [FIXMARKETDATAREQUEST] 34=1891 49=T4Example 56=T4 52=20121010-14:37:58.720 262=md-10/10/2012 9:37:58 AM # Unique Market Data Request ID 263=1 # SubscriptionRequestType = Subscribe (Snapshot + Updates) 264=10 # MarketDepth = 10 levels (full book) 265=5 # MDUpdateType = Smart buffering 1070=1 # QuoteType (decimal pricing) 267=3 # NoMDEntryTypes = 3 entry types requested 269=0 # MDEntryType = Bid 269=1 # MDEntryType = Offer 269=2 # MDEntryType = Implied Bid 146=1 # NoRelatedSym = 1 instrument requested 55=ES # Symbol (Contract ID) 48=CME_20121200_ESZ2 # SecurityID (Market ID) 167=FUT # SecurityType = Future 207=CME_Eq # SecurityExchange (Exchange ID) Unsubscribe from a Currently Streaming Market [FIXMARKETDATAREQUEST] 34=1892 49=T4Example 56=T4 52=20121010-14:37:59.765 262=md-10/10/2012 9:37:59 AM # Same or new MDReqID for unsubscribe 263=2 # SubscriptionRequestType = Unsubscribe (stop streaming) 264=10 265=5 1070=1 267=3 269=0 269=1 269=2 146=1 55=ES 48=CME_20121200_ESZ2 167=FUT 207=CME_Eq Chart Data Request (Uncompressed 1-minute Bar for 10 minutes over 2 days) [FIXMARKETDATAREQUEST] 34=3 49=T4Example 56=T4 52=20130626-23:40:01.294 262=mdc-6/26/2013 6:40:01 PM # Unique ID for Chart Data Request 263=4 # SubscriptionRequestType = TIMEANDSALES_DATA_BATCH (multi-day chart data) 264=1 # MarketDepth = 1 level (for chart data, usually 1) 265=5 # MDUpdateType = Smart buffering 1070=1 267=0 # NoMDEntryTypes (not required for chart data) 146=1 55=ZC 48=LVCME_20121200_ZCZ2 167=FUT 207=LVCME_C 3200=20121212 # TradeDateStart (YYYYMMDD) 3201=20121213 # TradeDateEnd (YYYYMMDD) 3202=09:00:00 # SessionStartTime (HH:MM:SS, CST) 3203=09:10:00 # SessionEndTime (HH:MM:SS, CST) 3204=2 # ChartType = Minute bars 3205=U # DataFormat = Uncompressed Chart Data Response (Excerpt) [FIXMARKETDATASNAPSHOT] 34=3 49=T4 56=T4Example 50=T4FIX 52=20130626-23:40:01.528 262=mdc-6/26/2013 6:40:01 PM-0 # Response referencing the request ID 55=ZC 48=LVCME_20121200_ZCZ2 207=LVCME_C 965=16 # Success status code 3200=20121212 # TradeDateStart 3201=20121213 # TradeDateEnd 3202=09:00:00.000 # SessionStartTime 3203=09:10:00.000 # SessionEndTime 3204=2 # ChartType (Minute) 3205=2 # DataFormat (compressed T4 binary) 268=2 # Number of Market Data Entries (NoMDEntries) 269=Y # MDEntryType = CHART_DATA_BATCH (chart data block) 75=20121213 # TradeDate for this batch 3210=15 # NoChartDatas (number of data points) ... # Followed by trade bars, market modes, settlements, and other fields