US Futures Trade and Quote Guide
US Futures Trade and Quote Guide
version 2.2 (Jul 2021)
We are here to help you do great things with our market and reference data. For questions, feedback, and other concerns, you may reach our team of experts using the following contact information:
algoseek customer support
support@algoseek.com
(+1) 646 583 1832
algoseek sales
sales@algoseek.com
(+1) 646 583 1832
DATA ORGANIZATION AND FILE FORMAT 5
TIMESTAMP AND MAINTENANCE PERIODS 9
APPENDIX A. TYPEMASK COLUMN 11
APPENDIX B. FREQUENTLY ASKED QUESTIONS 13
algoseek’s Futures, Spreads, and Future Options Trade and Quote datasets contain high-quality intraday trade and quote data for all securities listed on US exchanges.
The contract specifications such as underlying asset, the quantity of the asset or contract size, expiration months, delivery location, and the delivery date upon execution can be found on the US futures products list, which is available on the following link: http://www.cmegroup.com/trading/products/.
algoseek provides Futures market data in plain-text CSV files. The first row of the CSV file is a fixed header, and then rows of data corresponding to individual events (see Table 1). By default, data is organized into one file per symbol per trading day. For example, all events for ticker ESH0 on Jan 28, 2020, are stored in one CSV file.
Due to the large data size, CSV files are gzip-compressed (having a csv.gz extension) with a compression ratio of about 8:1.
Table 1: Sample Trade and Quote Data
LocalDate | LocalTime | Ticker | Type Mask | Type | Price | Quantity | Orders | Flags |
20200127 | 180000441 | ESH0 | 161 | QUOTE BID | 3247.00 | 27 | 12 | 0 |
20200127 | 180000487 | ESH0 | 161 | QUOTE BID | 3247.00 | 28 | 13 | 0 |
20200127 | 180000580 | ESH0 | 162 | TRADE AGRESSOR ON BUY | 3247.25 | 1 | 2 | 0 |
20200127 | 180000580 | ESH0 | 97 | QUOTE SELL | 3247.25 | 36 | 28 | 0 |
20200127 | 180000580 | ESH0 | 97 | QUOTE SELL | 3247.25 | 35 | 27 | 0 |
20200127 | 180000735 | ESH0 | 162 | TRADE AGRESSOR ON BUY | 3247.25 | 1 | 2 | 0 |
20200127 | 180000735 | ESH0 | 97 | QUOTE SELL | 3247.25 | 34 | 26 | 0 |
20200127 | 180001130 | ESH0 | 97 | QUOTE SELL | 3247.25 | 38 | 27 | 0 |
20200127 | 180001203 | ESH0 | 97 | QUOTE SELL | 3247.25 | 39 | 28 | 0 |
20200127 | 180001204 | ESH0 | 98 | TRADE AGRESSOR ON SELL | 3247.00 | 1 | 2 | 0 |
Note: Columns UTCDate, UTCTime, and SecurityID are not shown.
Table 2 (below) provides the name, description, and data type for each data field (column) in a Futures TAQ data file.
Table 2: CSV File Fields Schema
Field | Type (Format) | Description |
UTCDate | string (yyyymmdd) | Trading date in yyyymmdd format (UTC time) |
UTCTime | string (HH:MM:SS.mmm or HH:MM:SS.mmmiiinnn) | Event timestamp in nanoseconds (milliseconds before 2016) |
LocalDate | string (yyyymmdd) | Trading date in yyyymmdd format (CT time) |
LocalTime | string (HH:MM:SS.mmm or HH:MM:SS.mmmiiinnn) | Event timestamp in nanoseconds (milliseconds before 2016) |
Ticker | string | Instrument name |
CallPut | string | Option type (Call or Put) displayed as "C" or "P". Note: available only in Future Options dataset |
Strike | integer | A fixed price for buying or selling underlying outright future contract. Note: available only in Future Options dataset |
Month | string | A code for the expiration month for the option contract (as a single letter). Note: available only in Future Options dataset |
ExpirationYear | integer | The expiration year of the option contract. Note: available only in Future Options dataset |
SecurityID | integer | internal security ID used by algoseek |
TypeMask | integer | Not in use |
Type | string | The type of event |
Price | decimal | The opening, trade, ask/bid, and settlement price depending on the type of event |
Quantity | integer | The total number of contracts traded or quoted at this price |
Orders | integer | The number of customer orders at the price level |
Flags | integer | Conditions applicable to the trade/quote |
Ticker represents the name of the instrument with a maximum of 20 characters. It is a combination of the product code and an expiration month and year code. It may also include a code for spread type, call or put code, and its corresponding strike price for options on futures.
The general symbology scheme for Futures/Futures Options is ZZZMY/ZZZMY.SXXXX, where ZZZ is the base symbol, M is the expiration month code and Y is the last digit of the expiration year, S is the type of the option contract (Call/Put), XXXX is the option contract’s strike price.
Some sample tickers:
Use the link below to match the expiration month code with the corresponding month https://www.cmegroup.com/month-codes.html. The expiration year code corresponds to the last digit of the year.
Table 3 and Table 4 contain names and descriptions of event types which can be found in Futures TAQ data files.
Table 3: Trade and Quote Event Types
Type | Description |
QUOTE BID | Exchange’s best bid quote |
QUOTE SELL | Exchange’s best sell (ask) quote |
TRADE AGRESSOR ON BUY | Refers to the trade with the initiator on the buy-side |
TRADE AGRESSOR ON SELL | Refers to the trade with the initiator on the sell-side |
TRADE | Refers to the trade with the initiator unknown (the side cannot be determined) |
Table 4: Statistics Event Types
Type | Description |
OPENING PRICE | Indicates the first trade for the opening or re-opening of the instrument |
FIXING PRICE | A volume-weighted average price for the nearby (front month) contract |
TRADE VOLUME | Represents the number of contracts traded for the given instrument for the trading session |
SETTLEMENT PRICE | An official price established for the instrument at a given point in the trading day |
OPEN INTEREST | The total number of contracts per instrument that are not yet offset or fulfilled for the previous trading day. It is sent before the start of the trading session |
FINAL EMPTY BOOK | Indicates that there is no current bid or ask. It is used during regular trading hours when there is a reset in the feed, and during maintenance or halt periods when stopping and starting the feed |
Implied Events. Each event type present in the table above can have an implied indicator. For instance, an implied trading volume is IMPLIED TRADE VOLUME, implied Bid quote is IMPLIED QUOTE BID, etc. An implied event represents a quantity not derived from any fundamental market information
Implied Quotes. An Implied Quote is based on relationships between futures contracts. It is not the actual price of the Futures' bid or ask but is rather implied from another trade ( e.g., as part of a spread). It is often away from the current regular bid or ask. For more details, see: http://www.cmegroup.com/confluence/display/EPICSANDBOX/Implied+Orders
Multiple settlement prices. There are multiple settlement prices because exchanges publish settlement prices several times during the day. For the SETTLEMENT PRICE event type, the field “Quantity” represents the trade date (yyyymmdd format) that the settlement price references. For further details, please refer to the link below: http://www.cmegroup.com/market-data/settlements/settlements-details.html
Empty Book. This is used by exchanges to indicate that there is no current bid or ask. It is used during regular trading hours when there is a reset in the feed, and during maintenance or halt periods when stopping and starting the feed. An EMPTY BOOK event may also be displayed as EMPTY BOOK BID, EMPTY BOOK FINAL, or EMPTY BOOK BID FINAL.
For trade events, this field is zero before Nov 22, 2015. Starting Nov 22, 2015. the exchanges moved from FAST/FIX to MDP protocol. That is when this field started to get populated. But it still needs to be ignored as per specs for trades.
Some events have a flag set for extra information about the event message. Table 5 summarizes flag values.
Table 5: Flags Used in the Dataset
Flag Value | Flag Name |
0 | Regular |
1 | Implied |
2 | SHFlag |
4 | SLFlag |
8 | CalculatedPrice |
16 | Opening |
SHFlag and SLFlag refer to the session’s high and low prices.
Note: When backtesting or building trade bars, do not include trades with Flag 8. This indicates that no actual contracts are being bought/sold as these are calculated prices without any quantity.
Each symbol has one file per contract on each trading day containing quotes, trades, open interest, settlement prices, etc. A trading day means UTC time from 00:00 to 24:00.
The field “UTCTime'' contains timestamps based on a 24-hour system and follows an HHMMSSZZZ format wherein HHMMSS represents 2-digit values for hours, minutes, and seconds, while ZZZ indicates a 3-digit millisecond value.
The field “LocalTime” reflects the current time in Chicago (CST). During winter, the local timestamp is adjusted to UTC –6 and is changed to UTC –5 during daylight saving time (DST). For example, an algoseek Futures timestamp of 181514415 is 18:15:14.415 UTC. During daylight saving time, this converts to 13:15:14.415 CST.
Futures contracts have different maintenance and trading halt periods based on each specification. For example, Gold’s (GC) daily maintenance period is specifically set from 4 pm to 5 pm CST. Please refer to https://www.cmegroup.com/trading-hours.html for the comprehensive list of trading hours and maintenance periods for all US exchanges-traded instruments.
During the maintenance period, you will see Quote Bid and Quote Sell prices towards the end of the period. This is indicative of the opening price at 5 pm CST.
Table 6 below shows an example of a maintenance period. The last trade before the period and the first trade afterward are highlighted in red.
Table 6: Maintenance Period in GCQ7 Trading Session
LocalDate | LocalTime | Ticker | TypeMask | Type | Price | Quantity | Orders | Flags |
20170614 | 155958077 | GCQ7 | 2 | TRADE AGRESSOR ON SELL | 1262.600 | 1 | 2 | 0 |
20170614 | 155959323 | GCQ7 | 2 | TRADE AGRESSOR ON SELL | 1262.500 | 1 | 2 | 0 |
20170614 | 160000026 | GCQ7 | 12 | IMPLIED EMPTY BOOK FINAL | 0.000 | 0 | 0 | 1 |
20170614 | 160000026 | GCQ7 | 12 | IMPLIED EMPTY BOOK FINAL | 0.000 | 0 | 0 | 1 |
20170614 | 164147331 | GCQ7 | 7 | SETTLEMENT PRICE | 1275.900 | 20170614 | 0 | 0 |
20170614 | 165313448 | GCQ7 | 5 | OPENING PRICE | 1263.300 | 0 | 0 | 0 |
20170614 | 165320557 | GCQ7 | 5 | OPENING PRICE | 1263.400 | 0 | 0 | 0 |
20170614 | 170000019 | GCQ7 | 2 | TRADE | 1262.700 | 2 | 4 | 0 |
20170614 | 170000084 | GCQ7 | 2 | TRADE AGRESSOR ON SELL | 1262.600 | 2 | 2 | 0 |
20170614 | 170000084 | GCQ7 | 2 | TRADE | 1262.006 | 0 | 0 | 4 |
20170614 | 170000085 | GCQ7 | 2 | TRADE AGRESSOR ON BUY | 1262.600 | 1 | 2 | 0 |
The Typemask Column is an event type in an 8-bit mask format.
Note: the bit position 0 corresponds to the rightmost bit and 7 is the leftmost bit.
Table 7: TypeMask Flags
Bit Position | Description |
0-4 | Message type (integer 5-bit value). See Message Type Table |
5 | Final flag (1 if the transaction is complete; 0 if there is another transaction following this one) |
6 | Aggressor on the sell-side (trades) or offer (quotes). This is only valid for quotes or trades |
7 | Aggressor on the buy-side (trades) or bid (quotes). This is only valid for quotes or trades |
Table 8 lists integer codes for message type bits.
Table 8: Message Type (Bits 0-4)
Value | Message | Value | Message |
0 | Heartbeat | 13 | Insert |
1 | Quote | 14 | Update |
2 | Trade | 15 | Delete |
3 | SessionEnd | 16 | SecurityStatus |
4 | Prior | 17 | ElectronicVolume |
5 | OpeningPrice | 18 | ThresholdLimits |
6 | ClosingPrice | 19 | BandingHighLimitPriceAdd |
7 | SettlementPrice | 20 | BandingLowLimitPriceAdd |
8 | FixingPrice | 21 | BandingMaxPriceVariationAdd |
9 | CashNote | 22 | BandingHighLimitPriceRemove |
10 | TradeVolume | 23 | BandingLowLimitPriceRemove |
11 | OpenInterest | 24 | BandingMaxPriceVariationRemove |
12 | EmptyBook |
Example 1. SETTLEMENT PRICE: Type 39 = 0010 0111
Message Type (Bits 0-4) = 7, Settlement Price
Bit 5, Transaction Complete
Example 2. TRADE VOLUME: Type 42 = 0010 1010
Message Type (Bits 0-4) = 10, Trade Volume
Bit 5, Transaction Complete
Example 3. OPEN INTEREST: Type 43 = 0010 1011
Message Type (Bits 0-4) = 11, Open Interest
Bit 5, Transaction Complete
Example 4. EMPTY BOOK: Type 108 = 0110 1100
Message Type (Bits 0-4) = 12, EmptyBook
Bit 5, TransactionComplete; Bit 6, Ignore for EmptyBook
Example 5. QUOTE SELL: Type 97 = 0110 0001
Message Type (Bits 0-4) = 1, Quote
Bit 5, Transaction Complete; Bit 6, Aggressor on Offer
Example 6. QUOTE BID: Type 161 = 1010 0001
Message Type (Bits 0-4) = 1, Quote
Bit 5, Transaction Complete; Bit 7, Aggressor on Bid
Example 7. TRADE AGRESSOR ON SELL: Type 98 = 0110 0010
Message Type (Bits 0-4) = 2, Trade
Bit 5, Transaction Complete; Bit 6, Aggressor on Sell
Example 8. TRADE AGRESSOR ON BUY: Type 162 = 1010 0010
Message Type (Bits 0-4) = 2, Trade
Bit 5, Transaction Complete Bit; 7, Aggressor on Buy
Why do I see incorrect timestamps while importing data into Excel or data frame?
The data columns UTCTime and LocalTime should be imported as text and then just split according to the following scheme
HHMMSSZZZ should be HH:MM:SS.ZZZ