US Futures Trade Only Guide
US Futures Trade Only 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 10
APPENDIX B. FREQUENTLY ASKED QUESTIONS 12
algoseek’s Futures, Spreads, and Future Options Trade Only datasets contain high-quality intraday trade 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 Only Data
LocalDate | LocalTime | Ticker | Type Mask | Type | Price | Quantity | Orders | Flags |
20200127 | 180000580 | ESH0 | 162 | TRADE AGRESSOR ON BUY | 3247.2500 | 1 | 2 | 0 |
20200127 | 180000735 | ESH0 | 162 | TRADE AGRESSOR ON BUY | 3247.2500 | 1 | 2 | 0 |
20200127 | 180001204 | ESH0 | 98 | TRADE AGRESSOR ON SELL | 3247.0000 | 1 | 2 | 0 |
20200127 | 180002525 | ESH0 | 162 | TRADE AGRESSOR ON BUY | 3247.2500 | 1 | 2 | 0 |
20200127 | 180003091 | ESH0 | 162 | TRADE AGRESSOR ON BUY | 3247.2500 | 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 Trade Only 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, and settlement price depending on the type of event |
Quantity | integer | The total number of contracts traded at this price |
Orders | integer | The number of customer orders at the price level |
Flags | integer | Conditions applicable to the trade |
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 option 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 TAQ data files.
Table 3: Trade Event Types
Type | Description |
TRADE AGGRESSOR ON BUY | Refers to the trade with the initiator on the buy-side |
TRADE AGGRESSOR ON SELL | Refers to the trade with the initiator on the sell-side |
TRADE | Refers to the trade with the initiator unknown (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
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 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.
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 only 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 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