CFE
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.
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.
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).
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, 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 the 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 a StatType of 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 a StatType of 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 a StatType of 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, OOF Symbol Mapping, and Complex Instrument Definition Expanded messages.
The current lists of CFE products can be downloaded from the CFE Contract Listings and Product Level System Parameters on the Cboe page.
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 used for normalization of Complex Option on Futures symbols. Values of "z00000"b62 and above are mapped to offset 4000000000.
| CFE Symbol | instrument_id |
|---|---|
| "z00000"b62 | 4000000000 |
| "z00001"b62 | 4000000001 |
| "z0000z"b62 | 4000000061 |
Futures Instrument Definition Message
| Databento Field | CFE Field | Description |
|---|---|---|
instrument_id |
Symbol | The mapped value from base62 |
raw_instrument_id |
Symbol | The original decoded base62 value |
ts_event |
Unit Timestamp | Used only if non-zero, otherwise populated from TimeOffset |
asset |
Report Symbol | |
expiration |
Expiration Date | |
original_contract_size |
Contract Size | |
min_price_increment |
Price Increment | |
leg_count |
Leg Count | |
maturity_year |
Contract Date | Zero for spread instruments |
maturity_month |
Contract Date | Zero for spread instruments |
maturity_day |
Contract Date | Zero for spread instruments |
leg_ratio_qty_numerator |
Leg Ratio | Absolute value of the leg ratio |
leg_ratio_qty_denominator |
Leg Ratio | Always 1 |
leg_side |
Leg Ratio | Positive ratio=BID, negative ratio=ASK |
leg_instrument_id |
Leg Symbol | Converted from base62 |
The following fields are not normalized: Futures Flags, Listing State, Leg Offset.
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 | 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, for a spread with ratio 1:1, with legs VX/J6 and VX/H6 the resulting spread raw_symbol will be VX/H6:1:S - VX/J6:1:B
OOF Symbol Mapping Message
| Databento Field | CFE Field | Description |
|---|---|---|
ts_event |
Time Offset | |
instrument_id |
Feed Symbol | The mapped value from base62 |
raw_instrument_id |
Feed Symbol | The original decoded base62 value |
group |
Futures Product | The underlying futures product root (e.g. VX) |
underlying_id |
Futures Symbol | Converted from base62 |
strike_price |
Strike Price | |
instrument_class |
Call Put Indicator | |
expiration |
Options Expiration | |
raw_symbol |
Options on Futures Name |
The following fields are not normalized: Futures Expiration, Symbol Condition.
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 the Cboe US Symbology definition.
See section CFE Options on Futures Symbology of the Cboe US Symbology Reference.
Complex Instrument Definition Expanded Message
| Databento Field | CFE Field | Description |
|---|---|---|
ts_event |
Time Offset | |
instrument_id |
Complex Instrument Id | The mapped value from base62 |
raw_instrument_id |
Complex Instrument Id | The original decoded base62 value |
group |
Complex Instrument Underlying | The underlying futures product root (e.g. VX) |
leg_count |
Leg Count | |
leg_instrument_id |
Leg Symbol | Converted from base62 |
leg_ratio_qty_numerator |
Leg Ratio | Absolute value of the leg ratio |
leg_ratio_qty_denominator |
Leg Ratio | Always 1 |
leg_side |
Leg Ratio | Positive ratio=BID, negative ratio=ASK |
The following fields are not normalized: Complex Instrument Type.
The instrument_class is set to OPTION_SPREAD and security_type is set to OOF.
The asset field is determined from the leg definitions.
The raw_symbol for complex options is determined by the legs, using the same format as complex futures:
LegSymbol:Ratio:Side - LegSymbol:Ratio:Side.
For example, for an option spread with ratio 1:1 and legs UX4E/J6 C3000 and UX4E/J6 C4000, where both sides are BID, the resulting raw_symbol would be UX4E/J6 C3000:1:B - UX4E/J6 C4000:1:B