Pre-registration — 2026-07-14 — London Breakout (harness dry run)
Written BEFORE any testing (brief §7.3.1). Purpose: this is the reference-strategy dry run — its job is to battle-test the validation harness end-to-end, not to find an edge. The honest expected outcome is FAIL.
- Champion version: none (genesis dry run; harness v0)
- Hypothesis: the London-open breakout of the Asian-session range on GBPUSD carries structural-flow follow-through (edge family 3), and it does NOT survive retail CFD costs at the London open when spread and slippage are modeled honestly. Expected verdict: no net edge.
- Exact rule spec (deterministic):
- Instrument: GBPUSD, M1 bars (bid/ask) aggregated from Dukascopy ticks.
- Asian range: high/low of 00:00–06:59 UTC (inclusive) each weekday.
- From 07:00 UTC, enter long if ask prints range_high + buffer; enter short if bid prints range_low − buffer. First trigger wins; max one trade per day; no entries after 10:00 UTC.
- Buffer: parameter, {1, 2, 3} pips.
- Stop: opposite side of the Asian range (broker-side semantics: long stop triggers on bid ≤ stop).
- Target: entry ± 1.0 × range height (parameter R_mult ∈ {0.5, 1.0, 1.5}).
- Time exit: 16:00 UTC at market if neither stop nor target hit.
- Sizing: fixed-fractional 1% of a $10,000 nominal account; risk = entry-to-stop distance.
- Days with range height < 10 pips or > 150 pips: no trade (degenerate ranges).
- Deciding metric: net expectancy (net R per trade) on out-of-sample trades.
- Required sample: ≥100 out-of-sample trades.
- Pass threshold (ALL must hold):
- OOS net expectancy > +0.05R;
- beats the dumb baseline (random-direction entry at 07:00 with identical stop/target structure, sizing, and costs) on net expectancy;
- max drawdown of the OOS equity path not worse than 2× the baseline's.
- Walk-forward: rolling, in-sample 12 months / out-of-sample 3 months, stepped by 3 months across 2024-01 → 2026-06. Parameters (buffer, R_mult) selected in-sample by net expectancy, frozen for the OOS window. Walk-forward efficiency reported.
- Data segment used for design: 2024-01 → 2026-06 GBPUSD (segment "dukascopy-gbpusd-v1"). Iteration budget for this segment after this run: 2/3 remaining.
- Cost model: bid/ask fills (spread inherent in prices) + stop-slippage haircut 0.8 pips + commission $7/lot round-turn + swap per costmodel defaults. All results also reported gross (mid-price fills) purely to measure the gross-vs-net gap.
- Date written: 2026-07-14, before any download or backtest ran.
Result (filled AFTER the run)
- Run: 2026-07-17,
reports/dryrun-2026-07-17.md, MLflow run 058eb94c02474323a7f97d31167734a2 (prereg fingerprint logged).
- Outcome vs threshold: FAIL (as pre-registered).
- OOS net expectancy −0.0453R over 335 trades — fails the > +0.05R bar. Gross was +0.0198R: the 0.065R/trade cost drag consumed the entire gross edge, confirming the hypothesis's cost half.
- Beats the dumb baseline (−0.378R net): PASS — the baseline sanity check behaves.
- OOS max drawdown −26.9R vs baseline −218.5R: within 2×.
- Sample: 335 OOS trades (≥100 required).
- Walk-forward efficiency −2.24: in-sample expectancy did not transfer out-of-sample (selected params flipped between windows; classic noise-fitting).
- Decision: No edge; strategy not promoted (none was expected). Harness verdict machinery, cost model, baseline, walk-forward, and MLflow watermarking all exercised end-to-end on real data — the dry run's actual deliverable. Segment "dukascopy-gbpusd-v1" iteration budget now 2/3 remaining. No parameter re-runs on this segment without a new pre-registration.