finding · findings/evolution/shared_data/REGIME-SLICING-ROBUSTNESS-FIX.md
A change to how we slice up market history when checking whether a trading "feature" is genuinely robust: instead of chopping time into bland, equal calendar windows, we deliberately pick the wildest, most extreme market periods — crashes, blow-offs, collapses — so a feature has to survive the worst the market has ever thrown at it.
This finding describes a concrete, ready-to-apply fix for a research tool called the orthogonality probe (orthogonality_probe.py) — the program that tests whether a candidate trading feature carries genuinely new information (rather than just repeating what we already measure). A few terms first, in plain words:
The headline problem: the old design used 21 uniform 2-month windows (a setting called _PRESPEC_SLICES, covering 2021 onward). Uniform calendar windows are a weak robustness test, because nothing stops them all from landing in the same kind of market. If every window happens to be a quiet bull market, "robust across all 21 windows" really just means "robust in one mood."
The whole point of the orthogonality probe is to ask a hard question: does this feature hold up across the widest possible range of market conditions? If your test conditions secretly all look alike, a fragile feature can sail through and look strong — until the market does something it never saw, and the feature breaks when real money is on the line. Picking the regimes by hand, on purpose, guarantees the test spans the genuine extremes instead of leaving diversity to luck.
Introduce a second slicing option made of 10 hand-picked crypto regimes, chosen to span the extremes (crash / bull blow-off / bear / structural collapse / etc.). Crucially, don't delete the old uniform grid — keep both.
The old cutoff (MIN_YEAR=2021) is now stale. Data is dense all the way back to 2018 for all 6 probe symbols, so the 2018–2020 regimes are now usable. (Example: the bear_2018 window in Nov 2018 holds a median of ~25,000 bars per cell — plenty.)
Keep the probe's own source-of-truth symbol list (SYMBOL_THRESHOLDS — 6 symbols across 21 symbol×sensitivity combos). Do not swap in a raw 16-symbol database scan; the curated set is the standard.
For cross-asset robustness, apply the same idea to currencies: copy the forex multislice probe (multislice_orthogonality_probe.py) — regime-named windows plus 2 trading sessions (Asian, London/NY) run against the forex bars table.
Each name is a real, memorable market episode. The exact start/end dates live in the companion audit document.
| regime name | what happened (plain English) |
|---|---|
bear_2018 | The grinding 2018 bear market after the 2017 peak. |
recovery_2019 | The partial 2019 bounce off the bottom. |
covid_crash_2020 | The March-2020 pandemic crash — markets fell off a cliff. |
defi_summer_2020 | The 2020 "DeFi summer" speculative surge. |
bull_blowoff_2021q1 | The early-2021 parabolic blow-off top. |
may_crash_2021 | The sharp May-2021 sell-off. |
ath_2021q4 | The late-2021 all-time-high peak. |
luna_2022 | The Terra/LUNA stablecoin collapse — a structural blow-up. |
ftx_2022 | The FTX exchange implosion in late 2022. |
etf_bull_2024 | The 2024 rally driven by spot-ETF approvals. |
Before recommending the change, the team ran a read-only "smoke test" — a quick, harmless look at the database (SELECT-only, nothing modified) — across all 20 slices (10 crypto regimes + 8 forex windows + 2 forex sessions), using the exact same symbol-and-sensitivity sets the real probe uses. The question being checked: does every regime actually have enough data in every cell? The answer was a near-perfect yes.
BTCUSDT@750 / ftx_2022 at 952 bars (just shy of 1000). This is already handled automatically by the probe's existing density gate — the built-in rule that skips under-populated cells.The two approaches trade off differently. Regime-named windows win on robustness; the old uniform grid wins only on one narrow technical property (a smooth, evenly-spaced series), which is occasionally useful for trend/auto-correlation math but irrelevant to the robustness verdict.
| property | uniform 2-month grid | regime-named slices |
|---|---|---|
| Regime diversity do the windows span different market moods? | not guaranteed — could all be one regime | maximal by construction |
| Robustness stress how hard does it push the feature? | weak | strong — named crashes / collapses / blow-offs |
| Time-series regularity evenly spaced for AR/trend math? | regular | irregular — use worst-regime + spread as the robust reads |
The decision: keep both. Use the regime-named slices for the robustness verdict (the "did it survive the storms?" answer), and keep the uniform grid on hand for the rare case when a smooth, evenly-spaced series is needed for an auto-regression or trend calculation. "AR/trend" here just means math that assumes data points are evenly spaced through time.
orthogonality_probe.py.2026-05-26-forward-orthogonality-prediction/COMBINED-REGIME-SLICING.md, which lists the exact date windows for every regime.