Does an EMA trend regime reshape an H1 breakout’s R-distribution?
Two blueprint variants over an identical data / window / risk / seed matrix; the comparison is per cell. Risk regime Vol{length: 3, k: 2.0} — the protective stop defines 1 R. No cost block: net == gross everywhere.
H1-resampled donchian-style breakout: RollingMax/Min(24) over Delay(1) high/low, close vs channel (Gt), an SR-latch pair holds the breakout state; bias = latch_long − latch_short ∈ {−1, 0, +1}.
h1.period_minutes = 60 prev_high/low.lag = 1
channel_hi.length = 24 channel_lo.length = 24
risk = Vol { length: 3, k: 2.0 } (shared)The same breakout, gated post-latch by an EMA(12) vs EMA(48) trend-regime latch (Mul per side): a held breakout is suppressed the moment the regime flips against it. Same channel params, same risk, same seed.
ema_fast.length = 12 ema_slow.length = 48
channel_hi.length = 24 channel_lo.length = 24
risk = Vol { length: 3, k: 2.0 } (shared)3×3 channel grid (hi/lo ∈ {24, 48, 96}), argmax on sqn_normalized, deflated (1 000 resamples, block 5).
Rolling 90-day IS refit over the same axes, 30-day OOS, 30-day step; argmax on sqn_normalized per roll.
Block bootstrap of the R-series pooled over all walk-forward OOS trades: E[R] quantiles and P(E[R]≤0) per cell.
Cross-instrument floor: apply each instrument’s winner to the other three; worst case and sign agreement.
Screen campaign 490d14df… runs the full pipeline; curves campaign da886931… re-runs both variants at default params (channel 24/24, EMA 12/48), selection-free, persisting equity / exposure / r_equity taps for sections 4 and 6.
1 000-resample block-5 bootstrap of per-trade R, pooled over each cell’s 100 walk-forward OOS windows (screen campaign). Whisker p5–p95, box p25–p75, tick median, dot mean. The dashed line is E[R] = 0 — mass to its right is what an edge would look like. Gross R.
GER40 is the reshaping case: the gate moves essentially the whole interval across zero. EURUSD moves the other way — the gate makes it decisively worse. A conditioner, not an improvement.
Single members from the curves campaign (channel 24/24, EMA 12/48, no selection), full 2018–2026 window, gross R. This isolates the gate’s effect from the screen’s parameter selection. The shape is classic vol-stop breakout: ~10 % hit rate, average win an order of magnitude larger than average loss.
| bo_h1 | bo_h1_trend | |
|---|---|---|
| expectancy_r | +0.0716 | +0.0563 |
| win_rate | 9.9 % | 11.6 % |
| profit_factor | 1.058 | 1.046 |
| sqn_normalized | +0.0761 | +0.0606 |
| max_r_drawdown | 751.5 R | 756.4 R |
| n_trades | 6 435 | 6 664 |
| bias_sign_flips | 861 | 1 882 |
conviction terciles — mean R per trade by tercile; within each group: left bar bo_h1, right bar bo_h1_trend; green/red by sign
| bo_h1 | bo_h1_trend | |
|---|---|---|
| expectancy_r | +0.0450 | +0.1572 |
| win_rate | 9.6 % | 11.3 % |
| profit_factor | 1.036 | 1.128 |
| sqn_normalized | +0.0494 | +0.1448 |
| max_r_drawdown | 804.8 R | 440.8 R |
| n_trades | 7 293 | 7 157 |
| bias_sign_flips | 977 | 2 001 |
conviction terciles — mean R per trade by tercile; within each group: left bar bo_h1, right bar bo_h1_trend; green/red by sign
| bo_h1 | bo_h1_trend | |
|---|---|---|
| expectancy_r | −0.0866 | −0.0771 |
| win_rate | 10.3 % | 11.5 % |
| profit_factor | 0.931 | 0.937 |
| sqn_normalized | −0.1100 | −0.0969 |
| max_r_drawdown | 1005.4 R | 1313.6 R |
| n_trades | 6 788 | 7 398 |
| bias_sign_flips | 914 | 2 055 |
conviction terciles — mean R per trade by tercile; within each group: left bar bo_h1, right bar bo_h1_trend; green/red by sign
| bo_h1 | bo_h1_trend | |
|---|---|---|
| expectancy_r | +0.1406 | +0.0299 |
| win_rate | 10.1 % | 12.2 % |
| profit_factor | 1.114 | 1.024 |
| sqn_normalized | +0.1435 | +0.0361 |
| max_r_drawdown | 451.9 R | 586.4 R |
| n_trades | 6 201 | 6 825 |
| bias_sign_flips | 869 | 2 029 |
conviction terciles — mean R per trade by tercile; within each group: left bar bo_h1, right bar bo_h1_trend; green/red by sign
Cumulative out-of-sample R across the 100 rolled windows (per-window expectancy × trades, refit each roll). The IS winner is unstable: in every one of the eight cells the per-roll argmax visits all 9 cells of the 3×3 channel grid at least once over the 100 rolls — the full-window screen winner is not a stable optimum, which is exactly what the deflated sweep scores already hinted at.
| windows | positive | stitched R | |
|---|---|---|---|
| bo_h1 | 100 | 40 % | −678.0 |
| bo_h1_trend | 100 | 49 % | +627.9 |
| windows | positive | stitched R | |
|---|---|---|---|
| bo_h1 | 100 | 42 % | +825.1 |
| bo_h1_trend | 100 | 48 % | +1063.6 |
| windows | positive | stitched R | |
|---|---|---|---|
| bo_h1 | 100 | 47 % | −696.1 |
| bo_h1_trend | 100 | 36 % | −1111.7 |
| windows | positive | stitched R | |
|---|---|---|---|
| bo_h1 | 100 | 50 % | +668.0 |
| bo_h1_trend | 100 | 48 % | +583.0 |
Cumulative realized + unrealized R from the persisted r_equity taps (curves campaign, default params — gate-effect isolation, no selection), ~2.6 M m1 points per member decimated to ≤1 100 min–max envelope buckets: the band is the per-bucket min–max range (drawdown spikes survive the decimation), the line its midpoint. Gross R.
Everything on this page is derived from the runs/ registry; every artifact is content-addressed. Same documents, same seed → same numbers.
$ aura campaign run research/campaign-arc1.json # screen → 490d14df… $ aura campaign run research/campaign-arc1-curves.json # curves → da886931… $ aura runs families # registry index $ aura reproduce 490d14df-0-GER40-w0-r0-s1-0 # any family, bit-identical $ aura chart da886931-0 --tap r_equity # interactive trace viewer
generated by site/build.py from the runs/ registry · engine 1ebb94c · project 221c408 · 2026-07-13