Skip to content

H1 Regime Stress Test — deep e-mini parent history (Phase 2e)

H1 (pullback mean reversion) is the project's one graduated edge, but it graduated on the 2019+ micro window, which is a single secular bull regime (post-COVID recovery + AI boom). H1 is a long/flat 200-day-SMA dip-buyer — it can only be long or in cash — so its structural failure mode is a sustained downtrend that oscillates around the 200-SMA, generating repeated entries stopped out at the 10-bar time stop. Every episode of that kind before COVID sits outside the micro history, so it was never scored.

This is the Phase 2e "surgical step back": before spending live-adapter engineering on H1, run the single cheapest experiment that can break it — re-run H1's exact walk-forward on the full-size e-mini parents (ES/NQ), whose Databento GLBX history reaches 2010-06-06, a decade deeper than the micros. If H1 survives 2015-16 and 2018-Q4 out-of-sample, the edge earns real external validity; if it whipsaws through them, we learned in days — for a config change and $0.10 of daily bars — that the "one real edge" was a post-2019 bull artifact, instead of months of paper-trading infrastructure. Code: regime_stress.py.

Pre-registration. Hypothesis, method, the exact windows, and the pass bar below were written before the ES/NQ run. Only the Results / Verdict were filled afterward. Nothing in H1 changed — the signal, the 200-SMA gate, the 10-bar time stop, the grid, and the 1-tick slippage prior are the graduated config, re-pointed at deeper data.

Hypothesis

If H1's edge is structural short-horizon mean reversion inside an uptrend (the Phase 2c/2d thesis), it should survive out-of-sample on the same underlyings over a decade that contains genuine corrections and bear legs — the 2011 US-downgrade selloff, the 2015-16 correction, the 2018-Q4 selloff, the 2020 COVID crash, and the 2022 bear. If instead the graduated Sharpe was a post-2019 bull-regime artifact, the deeper out-of-sample record should degrade materially — most diagnostically in a slow-bleed regime, where a long/flat dip-buyer keeps buying oversold closes that keep falling.

Why the parents (proxy series)

The micros (MES/MNQ) launched 2019-05, so they cannot reach these regimes. The full-size e-mini parents trade the same underlying index and share the reversion structure, and Databento's GLBX.MDP3 carries them to 2010-06-06. They are added to config.MARKETS as role="proxy" markets — backtest-only (multiplier 50/20 vs the micros' 5/2; we still trade the micros), and excluded from the campaign lineup because the overlay candidates need per-symbol VIX/COT the parents don't carry. H1 needs neither: its 200-SMA gate is computed from the bars' own close (h1_trend_gate), so a parent needs no auxiliary series to score H1.

Method

Identical to H1's graduated walk-forward, re-pointed at the deep parent series:

  • Signal / priors, unchanged: enter below the prior-N-day low inside the 200-day uptrend; exit on the prior-M-day high or the 10-bar time stop. N/M re-fit per split from the PULLBACK_GRID (N∈{3,5,7}, M∈{3,5}); 200-SMA gate and 10-bar stop fixed.
  • Walk-forward: 504-bar train / 126-bar test, rolling, scored only on the stitched out-of-sample curve, 1-tick/side slippage debited in. With the deep history the first test window opens ~mid-2012 (a 504-bar train needs ~2 years before it), so the scored OOS span is ~2012 → 2026 — roughly triple the micro window, adding 2015-16 and 2018-Q4 as scored regimes.
  • Data lineage: raw volume-rolled continuous daily bars, Panama back-adjusted at load, roll dates recovered from the per-contract symbol column (same as the micros). The splice is a genuine proxy — different contract/multiplier — so the back-adjustment carries the usual caveat that old absolute levels shift.
  • Reported for the deploy decision (Phase 2e additions, all reproducible in the harness): the OOS Sharpe with its bootstrap 90% CI; correlation and beta to buy-and-hold (H1 is conditional long equity, so how much of the edge is diluted long vs measured alpha); the close-vs-next-open fill sensitivity (--fill); the 0/1/2-tick slippage sensitivity; and a per-regime sub-period breakdown — H1's return, max drawdown, and trade count through each named window, beside buy-and-hold over the same dates.

The one regime the walk-forward can't reach

The 2011 US-downgrade selloff sits ~14 months after the 2010-06 GLBX floor — too little for a 2-year train window before it — so it lands in the first, train-only split and is never scored out-of-sample. It is reported from the in-sample full-period run (clearly flagged), the only view that covers it. Reaching 2011/2008/2000 out-of-sample would need pre-2010 data below the Databento floor (free Stooq / ES=F, or Norgate ES-from-1997) — a follow-up, not this config-only step.

Pass bar (pre-register)

The deep-history OOS result passes if, on both ES and NQ, H1's stitched walk-forward Sharpe stays positive with its bootstrap 90% CI excluding 0, remains above buy-and-hold on the same span, and shows no regime in the sub-period breakdown where H1's drawdown blows out relative to the micro-era result (the slow-bleed failure mode). A material degradation — Sharpe collapsing toward 0, the CI spanning 0, or a stress window where the dip-buyer bleeds badly — is a documented negative that would move H1 back from "ready for paper" to "regime- fragile."

Evaluation protocol

sh
cd strategies
uv run python -m vibe_trader.data.databento_ingest --symbol ES --schema ohlcv-1d
uv run python -m vibe_trader.data.databento_ingest --symbol NQ --schema ohlcv-1d
uv run python -m vibe_trader.backtest.regime_stress --symbol ES,NQ --source databento

Results

Real-data run 2026-07-15, Databento GLBX daily bars 2010-06-07 → 2026-07-13 (4,995 bars each, Panama back-adjusted). Walk-forward 35 splits, stitched OOS 2012-01-23 → 2026-04-09 — ~3x the micro window, adding the 2015-16 correction and the 2018-Q4 selloff as scored regimes. Each parent runs on a US$1M account so 1 full-size contract carries the same leverage as 1 micro on US$100k: a full-size e-mini is 10x the micro multiplier (ES 50 vs MES 5), so sizing 1 contract on $100k would inflate the drawdown ~10x and is not comparable to the graduated micro result.

Walk-forward out-of-sample, H1 vs buy-and-hold, beside the graduated micro numbers (1-contract, 1-tick slippage, the honest deployable baseline):

Metric (OOS, 1-tick slippage)ES parentMES microNQ parentMNQ micro
Scored span2012-20262020-20262012-20262020-2026
OOS Sharpe0.740.840.580.86
Sharpe 90% CI[0.39, 1.10][0.34, 1.48][0.23, 0.95][0.31, 1.42]
Buy-and-hold Sharpe (same span)0.560.550.510.36
Max drawdown−2.3%−2.8%−4.9%−4.9%
Total return (vs B&H)+17.7% (+25.3%)+10.5% (+12.7%)+24.8% (+37.7%)+20.5% (+14.7%)
Corr / beta to buy-and-hold0.47 / 0.250.50 / 0.270.48 / 0.290.49 / 0.27
Next-open-fill Sharpe0.730.800.570.82
Trades / exposure160 / 24%71 / 30%163 / 25%66 / 27%

Per stress regime, out-of-sample — H1 return / max-drawdown vs buy-and-hold's return over each window. Levels are small because exposure is ~25% and the account is matched-leverage; compare H1's return to buy-and-hold's over the same window:

RegimeES H1 ret / maxDDES B&H retNQ H1 ret / maxDDNQ B&H ret
2015-16 correction+0.0% / −0.4%−0.7%−0.6% / −1.0%−0.7%
2018-Q4 selloff−0.1% / −0.3%−1.7%−0.5% / −1.1%−2.2%
2020 COVID crash−1.2% / −2.2%−2.4%−1.2% / −2.4%−1.8%
2022 bear market−0.8% / −1.3%−4.1%−2.6% / −3.4%−10.1%

In every scored OOS window H1's return beats buy-and-hold's on both symbols — the 200-SMA filter keeps it out of the worst of each downtrend. It still posts a small absolute loss in each (it is a dip-buyer, not a hedge), but it does not lose more than buy-and-hold in any scored window.

2011 (in-sample only — it lands in the first, train-only split): H1 −0.9% / −1.0% (ES), −0.5% / −0.7% (NQ) vs a shallow buy-and-hold −0.3% / −0.2%. This is the one window where H1 loses more than buy-and-hold — a fast round-trip selloff whipsawed repeated dip-buys while buy-and-hold simply rode it out. It is the whipsaw failure mode the review predicted, but it surfaces only here, in-sample, and small.

Reading

The edge survives — but the deep history right-sizes the confidence the micro window inflated. Three things hold; three temper.

Holds up:

  • Positive and significant on both symbols, across a decade the micros never saw: OOS Sharpe 0.74 (ES) / 0.58 (NQ), both bootstrap CIs exclude 0, both above buy-and-hold on the same span. H1 is not a post-2019 bull artifact.
  • Drawdown at matched leverage stays modest — ES −2.3% (≈ micro −2.8%), NQ −4.9% (= micro −4.9%). The low-drawdown profile is real (H1 is mostly in cash), not a regime illusion.
  • Fill realism holds at depth — next-open Sharpe 0.73 / 0.57 ≈ the close-fill 0.74 / 0.58 over ~320 OOS trades, the same reassurance the micro window gave.

Tempers the graduation:

  • The Sharpe edge is materially thinner over a full cycle: 0.84 → 0.74 (ES), 0.86 → 0.58 (NQ). The graduated numbers were the top of the range.
  • The margin over buy-and-hold collapses. The micro headline had H1 crushing buy-and-hold (0.86 vs 0.36 on MNQ); on the full NQ cycle it is 0.58 vs 0.51 — a slim edge. Much of the micro-era outperformance was buy-and-hold's own 2022 drawdown sitting inside the 2020-2026 window, not H1 alpha.
  • The whipsaw failure mode is real, but mild and mostly in-sample. H1 is not immune to downtrends — it posts a small absolute loss in every stress window (the dip-buyer buys in and takes some losing trades). But the 200-SMA filter earned its keep: in every scored OOS stress window it still lost less than buy-and-hold on both symbols, so the low-relative-drawdown property largely holds on deep history. The failure mode — H1 losing more than the market — surfaces only in the in-sample-only 2011 whipsaw. So this tempers the story less than the thinner Sharpe does; the caution is that sizing up (as the graduation did on MES) would scale the absolute losing trades too.

H1 also trails buy-and-hold on absolute return on both parents (ES +17.7% vs +25.3%; NQ +24.8% vs +37.7%) at ~25% exposure, beta ~0.25-0.29 — so the Sharpe edge is largely a lower-volatility / idle-cash effect. This is measured conditional long equity, not a large independent alpha.

Verdict — qualified pass; the surgical step-back paid for itself

H1 clears the pre-registered deep-history bar on both ES and NQ: positive OOS Sharpe with a CI excluding 0, above buy-and-hold, and no drawdown blow-up at matched leverage. The edge is real and worth keeping — not the regime artifact the null feared. But the deep history shows the graduated micro numbers (sized Sharpe 1.05 / unsized 0.84 on MES, 0.86 on MNQ, "drawdown < half buy-and-hold") were the flattering end of the distribution: over a full cycle the edge is a thinner ~0.6-0.75 Sharpe and only slightly ahead of buy-and-hold (whose own Sharpe is higher across 2012-2026 than in the 2020-2026 window that flattered the micro result). The dip-buyer's whipsaw risk is real but stayed mild and in-sample here.

Answering the Phase 2e question (go / step back / in between): the step-back was correct, and it paid for itself. For ~$0.10 of daily bars and a day of compute we learned that H1 is deployable with calibrated expectations — a modest, honestly- positive, low-exposure long-biased reversion sleeve to be sized and monitored for a real drawdown in the next sustained downtrend, not the 1.05-Sharpe, 2.8%-drawdown, buy-and-hold-crushing edge the micro window advertised. That is a sounder footing to take H1 toward paper trading on — and a far cheaper thing to learn now than after building the live adapter. Recorded in the ledger as "H1 regime stress — qualified pass".

What this does not settle. The pre-2010 regimes (2008, 2000) sit below the Databento GLBX floor and remain untested — reaching them needs a second data source (free Stooq / ES=F, or Norgate ES-from-1997). And cross-asset generality (does the reversion edge exist off equity indices?) is untouched. Both are deliberate follow-ups, not part of this config-only step.