aura-quadriga — Arc 1

Does an EMA trend regime reshape an H1 breakout’s R-distribution?

engine 1ebb94cproject 221c4082018-01 → 2026-06 · m1GER40 · US500 · EURUSD · XAUUSDgross R — no cost modelseed 0
8
cells — 2 strategies × 4 instruments
100
walk-forward rolls per cell (90 d IS / 30 d OOS)
17 640 / 20 163
pooled OOS trades — bo_h1 / bo_h1_trend
0.080
best-cell P(E[R]≤0) — US500, bo_h1_trend
0 / 4
cross-instrument sign agreement, either variant
−1.06
worst generalization floor (E[R], bo_h1_trend)
The gate reshapes the R-distribution — per instrument, not uniformly. On the pooled walk-forward OOS bootstrap, GER40 flips sign: mean E[R] −0.151 (P(E[R]≤0) = 0.895) without the gate, +0.139 (0.177) with it. US500 improves, EURUSD deteriorates sharply, XAUUSD stays roughly flat. That per-instrument conditionality — B reshapes A, instrument-dependently — is the finding of this arc. No variant survives as a deployable edge: the best cell still shows P(E[R]≤0) = 0.080 across eight unadjusted comparisons, the cross-instrument worst case is deeply negative for both variants (−0.75 plain, −1.06 gated), sign agreement is 0/4 — and every figure on this page is gross of costs.
02

The experiment

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.

bo_h1 variant A — base signal

82515a31bfe58ae087b4bd09eb4adb032cc2cabddd71a2761c543066bd237d3d

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)

bo_h1_trend variant B — gated

82d61d13bf21984068d6fd3ae9de9766fe99edb5163ea50ffb3485bfae9f56bc

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)
std::sweep 9 trials

3×3 channel grid (hi/lo ∈ {24, 48, 96}), argmax on sqn_normalized, deflated (1 000 resamples, block 5).

std::walk_forward 100 rolls

Rolling 90-day IS refit over the same axes, 30-day OOS, 30-day step; argmax on sqn_normalized per roll.

std::monte_carlo 1 000 × block 5

Block bootstrap of the R-series pooled over all walk-forward OOS trades: E[R] quantiles and P(E[R]≤0) per cell.

std::generalize expectancy_r

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.

03

R-distribution — pooled-OOS bootstrap

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.

bo_h1 (A — breakout)bo_h1_trend (B — gated)
−0.20+0.2+0.4pooled walk-forward OOS E[R] per trade (gross)GER40bo_h1P(≤0) 0.895 · n 4 576bo_h1_trendP(≤0) 0.177 · n 4 893US500bo_h1P(≤0) 0.104 · n 4 362bo_h1_trendP(≤0) 0.080 · n 4 947EURUSDbo_h1P(≤0) 0.884 · n 4 700bo_h1_trendP(≤0) 0.988 · n 5 442XAUUSDbo_h1P(≤0) 0.142 · n 4 002bo_h1_trendP(≤0) 0.150 · n 4 881

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.

04

Per-instrument metrics — default params, full window

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.

GER40 default params · gross

bo_h1bo_h1_trend
expectancy_r+0.0716+0.0563
win_rate9.9 %11.6 %
profit_factor1.0581.046
sqn_normalized+0.0761+0.0606
max_r_drawdown751.5 R756.4 R
n_trades6 4356 664
bias_sign_flips8611 882
T1T2T3

conviction terciles — mean R per trade by tercile; within each group: left bar bo_h1, right bar bo_h1_trend; green/red by sign

US500 default params · gross

bo_h1bo_h1_trend
expectancy_r+0.0450+0.1572
win_rate9.6 %11.3 %
profit_factor1.0361.128
sqn_normalized+0.0494+0.1448
max_r_drawdown804.8 R440.8 R
n_trades7 2937 157
bias_sign_flips9772 001
T1T2T3

conviction terciles — mean R per trade by tercile; within each group: left bar bo_h1, right bar bo_h1_trend; green/red by sign

EURUSD default params · gross

bo_h1bo_h1_trend
expectancy_r−0.0866−0.0771
win_rate10.3 %11.5 %
profit_factor0.9310.937
sqn_normalized−0.1100−0.0969
max_r_drawdown1005.4 R1313.6 R
n_trades6 7887 398
bias_sign_flips9142 055
T1T2T3

conviction terciles — mean R per trade by tercile; within each group: left bar bo_h1, right bar bo_h1_trend; green/red by sign

XAUUSD default params · gross

bo_h1bo_h1_trend
expectancy_r+0.1406+0.0299
win_rate10.1 %12.2 %
profit_factor1.1141.024
sqn_normalized+0.1435+0.0361
max_r_drawdown451.9 R586.4 R
n_trades6 2016 825
bias_sign_flips8692 029
T1T2T3

conviction terciles — mean R per trade by tercile; within each group: left bar bo_h1, right bar bo_h1_trend; green/red by sign

05

Walk-forward — stitched OOS R

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.

bo_h1 (A — breakout)bo_h1_trend (B — gated)

GER40 OOS, refit per roll

−5000+5002019202120232025A −678 RB +628 R
windowspositivestitched R
bo_h110040 %−678.0
bo_h1_trend10049 %+627.9

US500 OOS, refit per roll

0+500+10002019202120232025A +825 RB +1064 R
windowspositivestitched R
bo_h110042 %+825.1
bo_h1_trend10048 %+1063.6

EURUSD OOS, refit per roll

−1000−50002019202120232025A −696 RB −1112 R
windowspositivestitched R
bo_h110047 %−696.1
bo_h1_trend10036 %−1111.7

XAUUSD OOS, refit per roll

0+250+5002019202120232025A +668 RB +583 R
windowspositivestitched R
bo_h110050 %+668.0
bo_h1_trend10048 %+583.0
06

Full-period R-curves — default params

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.

bo_h1 (A — breakout)bo_h1_trend (B — gated)

GER40 r_equity · full window

0+5002019202120232025A +460.6 RB +375.1 R

US500 r_equity · full window

0+500+1000+15002019202120232025A +328.5 RB +1125.3 R

EURUSD r_equity · full window

−5000+5002019202120232025A −588.0 RB −570.6 R

XAUUSD r_equity · full window

0+500+10002019202120232025A +871.8 RB +203.7 R
07

Artifacts & reproduce

Everything on this page is derived from the runs/ registry; every artifact is content-addressed. Same documents, same seed → same numbers.

aura-quadriga — reproduce
$ 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

Blueprints

bo_h1
82515a31bfe58ae087b4bd09eb4adb032cc2cabddd71a2761c543066bd237d3d
bo_h1_trend
82d61d13bf21984068d6fd3ae9de9766fe99edb5163ea50ffb3485bfae9f56bc

Processes

screen-wf-mc-generalize
41863fcae9300b334056c6f2a899e8c2672ecb29387d294e9a6e58f159ef51b4
curves-sweep
476752f5af365c85be3e5bd6265e5503040fc691ac548c0bd42e67714110e05f

Campaigns

arc1-breakout-trend
490d14df576a7ef2ad099bbfdd21b9840f4cd9436e499f7e541316dc646e47eb
arc1-curves
da886931b0688d57a17e64a016cc004af792038454513dc7b8826763d778c685

generated by site/build.py from the runs/ registry · engine 1ebb94c · project 221c408 · 2026-07-13