Upcoming changes to CME data normalization

July 07, 2026
Title picture for Upcoming changes to CME data normalization

Starting July 7, 2026, we're rolling out a series of improvements to how we normalize data for CME Globex MDP3 (GLBX.MDP3).

This update includes five changes:

  1. Per-leg definition records
  2. Standalone F_LAST record
  3. Price limits in statistics schema
  4. Implied matching status
  5. New FX spot instrument class

The new normalization will replace the current normalization and apply to both live data and the full historical dataset retroactively.

Some of these updates may be breaking changes for certain users. To allow time to validate and update integrations before the cutover, we'll run a month-long testing period during which the current normalization remains available alongside a preview environment with the new normalization.

Multi-leg products such as spreads, strategies, and combos are difficult to work with under the current normalization because their definitions lack metadata for each leg.

With these changes, each strategy leg will have its own definition record, so a strategy with three legs will have three definition records. Fields shared by the strategy remain the same across those records, while the leg_ fields carry data specific to each leg. This makes it possible to interpret the components of a strategy directly, without parsing raw_symbol, which often lacks sufficient information to identify the legs.

Under the current normalization, an option spread strategy appears as follows:

ts_recv                                  symbol instrument_class                expiration  strike_price  underlying_id
2019-03-13 00:00:00+00:00  UD:T$: ST 0304976550                T 2019-03-15 21:59:00+00:00           NaN              0

This tells us only that the instrument is an option spread expiring on March 15, 2019. The strategy code ST from the symbol indicates it's a straddle, but we still don't know the instruments or strikes of its legs.

The new normalization includes a distinct record for each leg, showing that the strategy buys both a call and a put at the same strike price.

ts_recv                                  symbol instrument_class                expiration  leg_index  leg_count leg_side leg_instrument_class leg_raw_symbol
2019-03-13 00:00:00+00:00  UD:T$: ST 0304976550                T 2019-03-15 21:59:00+00:00          0          2        B                    C    OZBM9 C1440
2019-03-13 00:00:00+00:00  UD:T$: ST 0304976550                T 2019-03-15 21:59:00+00:00          1          2        B                    P    OZBM9 P1440

Code that handles definition records should account for one record per leg rather than a one record per strategy. Logic that infers a strategy's legs from raw_symbol should instead use the fields prefixed with leg_. See the definition schema reference for the full list of leg_ fields.

Currently, for events spanning multiple packets, we buffer all MBO records until the packet containing the last event is processed. F_LAST is then set on the final record for each instrument to mark the end of the event. This delays earlier records in the event. The resulting latency can be particularly pronounced during large events such as mass cancels.

To reduce latency, records will be published immediately after each packet is processed rather than being buffered until the event is complete. As a result, the final book update will no longer contain F_LAST. Instead, the end of the event for each instrument is marked by a new, separate record with F_LAST and action='N' (None).

An example of this change is shown below. Note the additional record with F_LAST set (flags=128 corresponds to the F_LAST flag).

Current normalization:

                            ts_recv                              ts_event  rtype  publisher_id  instrument_id action side  price  size  channel_id         order_id  flags  ts_in_delta  sequence      symbol
2026-06-01 00:00:04.632724628+00:00   2026-06-01 00:00:04.632429323+00:00    160             1       42955214      A    B  34.25     4           1  541244112527323      0        16747   4858684  ESM6 P7440
2026-06-01 00:00:04.632724628+00:00   2026-06-01 00:00:04.632429323+00:00    160             1       42955214      A    A  38.25     4           1  541244112527324    128        16747   4858684  ESM6 P7440

New normalization:

                            ts_recv                              ts_event  rtype  publisher_id  instrument_id action side  price  size  channel_id         order_id  flags  ts_in_delta  sequence      symbol
2026-06-01 00:00:04.632724628+00:00   2026-06-01 00:00:04.632429323+00:00    160             1       42955214      A    B  34.25     4           1  541244112527323      0        16747   4858684  ESM6 P7440
2026-06-01 00:00:04.632724628+00:00   2026-06-01 00:00:04.632429323+00:00    160             1       42955214      A    A  38.25     4           1  541244112527324      0        16747   4858684  ESM6 P7440
2026-06-01 00:00:04.632733191+00:00   2026-06-01 00:00:04.632429323+00:00    160             1       42955214      N    N    NaN     0           1                0    128        15819   4858685  ESM6 P7440

Two new types will be added to the statistics schema: UPPER_PRICE_LIMIT (17) and LOWER_PRICE_LIMIT (18). The values reported for these types indicate the price range within which a futures contract can trade during a session. If the price reaches one of these limits, it may trigger a halt or other action, depending on the product.

Implied matching status will be added to the status schema. This indicates whether CME's matching engine is constructing implied depth—additional liquidity inferred from related spread and outright markets that would not otherwise be visible. The status will appear in the trading_event field as either IMPLIED_MATCHING_ON or IMPLIED_MATCHING_OFF. See CME's documentation for more information.

FX spot instruments will be detected and assigned a separate instrument_class=X in the definition schema, whereas previously they were grouped with futures. Integrations that locate FX spot instruments under the futures instrument_class should be updated to look for instrument_class=X.

We'll provide public preview environments for both historical and live data, giving customers time to test the new normalization and update their code accordingly. The preview environments follow the same billing rates and plan coverage as the production environment.

To access the preview environments, use these gateways:

import databento as db

# Historical
client = db.Historical(gateway="hist-preview.databento.com")
# make API calls as usual

# Live
client = db.Live(gateway="glbx-mdp3.preview.lsg.databento.com", port=13_000)
# subscribe and replay as usual

The timeline of the rollout is as follows:

  • 2026-07-07: Data with the new normalization is available in the preview environment
  • 2026-08-08: Data with the new normalization will be available in production from the live and historical APIs. End of the live preview environment.

We strongly recommend validating your integration via the preview environments before the August 8 cutover. These improvements provide clearer visibility into strategy components and more consistent data structures across all CME instruments.