OptionalbreaksIntraday breaks (e.g. a lunch), each local "HH:MM", within [open, close].
Regular close, local "HH:MM" (or "24:00" for end-of-day). Must be after open.
OptionalearlyPer-date early closes (YYYY-MM-DD → local "HH:MM") — half-days that override the regular close.
OptionalholidaysDates (YYYY-MM-DD) with no session — the market is closed.
Regular open, local "HH:MM".
IANA zone the wall-clock hours are interpreted in, e.g. "America/New_York".
OptionalweekmaskTrading days of week as ISO weekday numbers (1 = Monday … 7 = Sunday). Defaults to Monday–Friday [1, 2, 3, 4, 5].
The rule-based construction path: a compact description that generates a session schedule over a date range. The other, first-class path is an explicit Session list (see
session.ts); rules are for consumers who have hours + a holiday list rather than dated instants.Session hours are given in exchange-local wall time against an IANA zone and resolved to UTC instants per-day, so DST is handled correctly (a 09:30 open is 09:30 local year-round, not a fixed UTC offset).
Only regular (same-day,
open < close) sessions are supported here, plus the full-day"24:00"close. True overnight sessions (close on the next calendar day, e.g. CME 17:00→16:00) need an explicit trading-day-assignment rule and are deferred to a later phase — build those via an explicit Session list for now.