Cboe Futures Exchange
Dataset ID: XCBF.PITCH
Cboe disseminates full depth-of-book data for their Cboe Futures Exchange (CFE) through their Multicast Depth of Book (PITCH) feed, which Databento receives over UDP multicast in our NY4 data center.
PDF specifications are available on Cboe's website for Multicast PITCH and Options on Futures Multicast PITCH.
Trading hours
CFE operates from Sunday through Friday on weekly schedule, with daily sessions.
Trading sessions vary by product, refer to the Cboe trading hours for up to date information.
- Regular trading runs each day from Monday through Friday
- There is extended trading both before and after each regular trading session.
- At the end of the post-session extended trading all orders are canceled
- There is a pause between 4:00 PM and 5:00 PM CT
| Description | Hours |
|---|---|
| Regular Trading Hours | 8:30 AM to 3:00 PM (CT) |
| Extended Trading Hours (pre-session) | 5:00 PM (previous day) to 08:30 AM (CT) |
| Extended Trading Hours (post-session) | 3:00 PM to 4:00 PM (CT) |
| Daily pause | 4:00 PM to 5:00 PM (CT) |
Note: Not all products have extended trading.
The trading hours for some commonly traded products are:
- VX and VXM] futures: Sunday 5:00 PM – Friday 4:00 PM CT (extended trading hours + regular trading hours), with a daily trading halt from 4:00 PM to 5:00 PM CT.
- UX (Options on VX futures): Monday–Friday, 8:30 AM – 3:00 PM CT (regular trading hours).
Timestamps
Cboe messages received by Databento will generally include one timestamp with nanosecond precision.
As with all of our datasets, we also collect a ts_recv timestamp when the packet was received by our capture server.
As this protocol does not have a Sending Time field, the field ts_in_delta is set to 0 and should be ignored.
| Databento Field | Pitch Field | Description |
|---|---|---|
ts_recv |
N/A | The capture-server-received timestamp. |
ts_event |
EpochTime + TimeOffset | The matching-engine-received timestamp. |
More details about our timestamps are available in our timestamping guide.
MBO normalization
Order lifecycle messages
There are seven message types in CFE PITCH that change the state of the order book. Databento normalizes these messages to MBO records as follows:
| CFE Message | Databento Message(s) | Description |
|---|---|---|
| Add Order (long) | Add | |
| Add Order (short) | Add | |
| Order Executed | Trade, Fill, Cancel | |
| Reduce Size (long) | Cancel | The size field indicates the number of contracts to remove from the display size |
| Reduce Size (short) | Cancel | The size field indicates the number of contracts to remove from the display size |
| Modify (long) | Modify | The price and size fields indicate the new order price and quantity |
| Modify (short) | Modify | The price and size fields indicate the new order price and quantity |
| Delete | Cancel | The size field indicates the remaining display size of the deleted order |
Trade records normalized from Order Executed will have order_id set to 0, as Cboe does not provide information about the aggressor's order.
Trade records normalized from Order Executed will have side set to the opposite side of the matched resting order.
Trade messages
CFE Multicast PITCH also has a Trade message for providing execution details for match events that occur off the CFE book, such as ECRP or Block trades.
Databento normalizes this Trade message as a single MBO Trade record with side None and publisher set to XCBF.PITCH.XOFF.
Cboe sends Trade messages with an obfuscated Order Id, this is passed through in the normalized Trade record.
Statistics normalization
For the XCBF.PITCH dataset, statistics records are normalized from the following CFE messages.
| CFE Message | StatType(s) |
|---|---|
| Price Limits | UPPER_PRICE_LIMIT and LOWER_PRICE_LIMIT |
| Settlement | SETTLEMENT_PRICE |
| Open Interest | OPEN_INTEREST |
| End of Day Summary | HIGHEST_BID, TRADING_SESSION_HIGH_PRICE, LOWEST_OFFER, TRADING_SESSION_LOW_PRICE, OPENING_PRICE, CLOSE_PRICE, CLEARED_VOLUME, BLOCK_VOLUME, VENUE_SPECIFIC_VOLUME_1 |
Note: Fields Accrued Day Variance, Num Final Returns, and Num Elapsed Returns from the Futures Variance Symbol Mapping Message are not currently normalized.
Fields from these messages are normalized into records in the statistics schema with appropriate StatType.
Price Limits
CFE publishes Upper Price Limit and Lower Price Limit in a Price Limits Message.
These fields are normalized into statistics records with StatTypes UPPER_PRICE_LIMIT and LOWER_PRICE_LIMIT respectively, as prices.
Settlement
CFE publishes Settlement Price in a Settlement Message.
This field is normalized into a statistics record with StatType SETTLEMENT_PRICE, as a price.
Open Interest
CFE publishes Open Interest in an Open Interest Message.
This field is normalized into a statistics record with StatType OPEN_INTEREST, as a quantity.
End of Day Summary
The End of Day Summary message is sent after trading ends for a symbol.
Quantity Fields
Total Volume represents the total number of contracts traded for the day including Block and ECRP trades. Block Volume represents the total number of Block and Derived contracts traded for the day. ECRP Volume represents the total number of ECRP contracts traded for the day.
These fields are normalized as statistics records as quantities, with the following StatTypes:
| CFE Field | StatType |
|---|---|
| Total Volume | CLEARED_VOLUME |
| Block Volume | BLOCK_VOLUME |
| ECRP Volume | VENUE_SPECIFIC_VOLUME_1 |
Price Fields
High Price is the higher of highest bid and highest trade price for the day.
Low Price is the lower of lowest offer and lowest trade price for the day.
Open Price is set by the first trade of the day (in any session).
Close Price is set by the last trade of the day (in any session).
Block and ECRP trades do not affect these price fields.
| CFE Field | StatType |
|---|---|
| High Price (if from bid) | HIGHEST_BID |
| High Price (if from trade) | TRADING_SESSION_HIGH_PRICE |
| Low Price (if from offer) | LOWEST_OFFER |
| Low Price (if from trade) | TRADING_SESSION_LOW_PRICE |
| Open Price | OPENING_PRICE |
| Close Price | CLOSE_PRICE |
Status normalization
Trading Status messages are normalized into records in the status schema.
| CFE Trading Status | action |
is_trading |
is_quoting |
|---|---|---|---|
| Suspended | SUSPEND |
No | No |
| Queuing | PRE_OPEN |
No | Yes |
| Trading | TRADING |
Yes | Yes |
| Halted | HALT |
No | No |
Definition normalization
Definition records are sourced from Futures Instrument Definition and OOF Symbol Mapping messages.
The Complex Instrument Definition Expanded message which defines Complex Options on Futures symbols is not currently normalized and records for these symbols are not published.
The current lists of CFE products can be downloaded from the CFE Contract Listings and Product Level System Parameters on the Cboe page.
Simple Futures Variance Futures Complex Futures Options on Futures Complex Options on Futures
Instrument IDs
CFE publishes instrument IDs as a six character base-62 ASCII value. Databento normalizes this to instrument ID by converting from base62 to decimal base 10.
For example:
| CFE Symbol | instrument_id |
|---|---|
| "000000"b62 | 0 |
| "000001"b62 | 1 |
| "00000z"b62 | 61 |
| "000100"b62 | 3844 (62*62) |
Complex Options on Futures symbols start at values "z00000"b62, which is 55884102752.
The maximum base-10 value that can be represented by a six-char base62 string is "zzzzzz" which is 56800235583.
The Databento instrument_id field is 32-bit unsigned, which has a maximum value of 4294967295.
Because of this, values above 4000000000 are reserved for future normalization of Complex Option on Futures symbols. Values of "z00000"b62 will be mapped to 4000000000.
| CFE Symbol | instrument_id |
|---|---|
| "z00000"b62 | 4000000000 |
| "z00001"b62 | 4000000001 |
| "z0000z"b62 | 4000000061 |
Futures Instrument Definition Message
| CFE Field | Databento Field | Description |
|---|---|---|
| Symbol | instrument_id |
Converted from base62 |
| Unit Timestamp | ts_event |
Used only if non-zero, otherwise populated from TimeOffset |
| Report Symbol | asset |
|
| Futures Flags | not normalized | Always zero |
| Expiration Date | expiration |
|
| Contract Size | original_contract_size |
|
| Listing State | not normalized | |
| Price Increment | min_price_increment |
|
| Leg Count | leg_count |
|
| Leg Offset | not normalized | |
| Contract Date | maturity_year, maturity_month, maturity_day |
Zero for spread instruments |
| Leg Ratio | leg_ratio_qty_numerator, leg_ratio_qty_denominator |
|
| Leg Symbol | leg_instrument_id |
Converted from base62 |
The raw_symbol for Simple Futures attempts to match the Cboe "Product".
This field is not published in the Futures Instrument Definition message.
Instead it is constructed from the Report Symbol and Contract Date fields.
The format is [asset]/[maturity_month_code][maturity_year_code].
Where these fields are derived from:
Month Codes:
| Month | Code |
|---|---|
| January | F |
| February | G |
| March | H |
| April | J |
| May | K |
| June | M |
| July | N |
| August | Q |
| September | U |
| October | V |
| November | X |
| December | Z |
Maturity year uses the last digit of the year for maturities before 2030. Two digits are used for maturities from 2030 onward.
Examples:
| Asset | Maturity Month | Maturity Year | raw_symbol |
|---|---|---|---|
| VX | January | 2026 | VX/F6 |
| PBT | December | 2035 | PBT/Z35 |
The raw symbol for future spreads is determined by the legs.
The format is: LegSymbol:Ratio:Side - LegSymbol:Ratio:Side.
For example:
Spread with ratio 1:1:
Leg1: 'VX/J6'
Leg2: 'VX/H6'
Symbol: 'VX/H6:1:S - VX/J6:1:B'
OOF Symbol Mapping Message
| CFE Field | Databento Field | Description |
|---|---|---|
| Time Offset | ts_event |
|
| Feed Symbol | instrument_id |
Converted from base62 |
| Futures Product | group |
The underlying futures product root (e.g. VX) |
| Futures Expiration | not normalized | |
| Futures Symbol | underlying_id |
Converted from base62 |
| Strike Price | strike_price |
|
| Call Put Indicator | instrument_class |
|
| Options Expiration | expiration |
|
| Options on Futures Name | raw_symbol |
|
| Symbol Condition | not normalized |
The asset field is derived from the raw_symbol by extracting the root up to the first / character.
The security_type field is set to OOF.
The raw_symbol comes from the Options on Futures Name field, which follows Cboe US Symbology definition.
See section CFE Options on Futures Symbology of the Cboe US Symbology Reference.