Skip to content

fix: honor CME crypto trading cutover and business trade dates #107

Closed

Description

@stefan-jansen

Reproduced public workflow

On immutable main 721adee, Python 3.14.3, Polars 1.43.2 and pandas_market_calendars 5.5.0, use real offline SyntheticProvider minute rows:

import polars as pl
from ml4t.data.providers import SyntheticProvider
from ml4t.data.sessions import SessionAssigner

with SyntheticProvider(calendar_mode="continuous") as provider:
    frame = provider.fetch_ohlcv("BTCUSD", "2026-10-17", "2026-10-17", "minute")
frame = frame.filter(pl.col("timestamp").dt.strftime("%H:%M") == "12:00")
assigned = SessionAssigner.from_exchange("CME").assign_sessions(frame, bar_frequency="intraday")
print(assigned["session_date"].to_list())

Actual result is [None]; this open Saturday observation belongs to the Monday October 19 CME business trade date. Completion of actual 12:00/12:02 UTC provider rows through SessionCompleter("CME Globex Crypto") raises an outside-template error instead of retaining the observations and filling the single open minute. Data does not silently delete those input rows: assignment retains null labels and completion rejects its invalid template.

The retained 17-case producer/assignment/completion baseline has nine failures and eight passing controls, covering post-cutover weekends, weekday reopening, launch-day reopening, DST and holiday trade dates. Pre-cutover closure, maintenance, spot 24/7 civil-date behavior and explicit calendar=None controls are distinct. No acquisition, calendar or completion mocks and no paid API/credentials.

Authoritative schedule and required repair

  • CME cryptocurrency FAQ distinguishes Globex maintenance, business trade dates and excluded spot-quoted futures. Globex maintenance is weekdays 16:00-16:02 Chicago time and Saturday 02:00-04:00; do not substitute ClearPort hours.
  • May 2026 electronic-trading notice identifies the May 29 transition.
  • CME migration material distinguishes calendar dates from following business trade dates. The CME client migration notice specifies launch-day maintenance through 16:30 Chicago time; ordinary weekday two-minute maintenance is not sufficient for that date.

Preserve historical sessions before the transition. Implement the selected CME crypto schedule, correct business labels, maintenance and sufficient schedule-query coverage in native assignment/completion and downstream schedule consumers. Do not apply these hours to other CME products or equate CME trade dates with ordinary spot 24/7 civil-day sessions. Reuse shared FeedSpec selection, explicit calendar > metadata > NYSE; explicit None remains disabled. Any business-holiday backend must be qualified against exchange rules, not assumed correct from its name.

Retain original observations, validate boundaries and original volume/price values, fill only real open missing minutes, and preserve existing outside-session policy/custom-calendar behavior. Reuse one focused issue/PR and require failing-base/passing-fix public workflows and complete supported quality gates. AI-assisted maintenance under owner direction. No new release, deployment, client dataset rewrite or credential authority.

Activity

  1. added a commit that references this issue on Oct 20, 2026
    0737b6a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions