Pre-registration — 2026-07-14 — Dual Thrust (harness dry run)
Written BEFORE any testing (brief §7.3.1). Second reference strategy for the harness dry run. Honest expected outcome: FAIL.
- Champion version: none (genesis dry run; harness v0)
- Hypothesis: the Dual Thrust day-breakout (Pruitt/Michaels family) on EURUSD monetizes intraday under-reaction (edge family 2); expected NOT to survive retail CFD costs. Expected verdict: no net edge.
- Exact rule spec (deterministic):
- Instrument: EURUSD, M1 bars (bid/ask), trading day = 00:00–23:59 UTC weekdays.
- Range = max(HH − LC, HC − LL) over the prior N days, N ∈ {3, 4, 5} (HH=highest high, LC=lowest close, HC=highest close, LL=lowest low, mid prices).
- Buy trigger = day open + K × Range; sell trigger = day open − K × Range, K ∈ {0.4, 0.5, 0.7} (symmetric K1=K2).
- Long entry when ask ≥ buy trigger; short when bid ≤ sell trigger. Reversals allowed (stop-and-reverse on opposite trigger). Flat at 21:00 UTC (before rollover spread spike).
- Protective stop: 1.0 × Range from entry (broker-side semantics), in addition to the reverse trigger.
- Sizing: fixed-fractional 1% of $10,000 nominal; risk = entry-to-stop.
- No new entries after 20:00 UTC.
- Deciding metric: net expectancy (net R per trade) out-of-sample.
- Required sample: ≥100 out-of-sample trades.
- Pass threshold (ALL must hold):
- OOS net expectancy > +0.05R;
- beats the dumb baseline (random direction at day open + K×Range-equivalent stop/target structure, same sizing/costs) on net expectancy;
- OOS max drawdown not worse than 2× baseline's.
- Walk-forward: rolling, IS 12 months / OOS 3 months, step 3 months, 2024-01 → 2026-06. Params (N, K) chosen in-sample by net expectancy, frozen per OOS window.
- Data segment used for design: 2024-01 → 2026-06 EURUSD (segment "dukascopy-eurusd-v1"). Iteration budget after this run: 2/3 remaining.
- Cost model: identical treatment to the London Breakout prereg.
- 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-dual_thrust.md, MLflow run d78bfe7ced2b43ada27a39834d5b0eb8 (prereg fingerprint logged).
- Outcome vs threshold: FAIL (as pre-registered).
- OOS net expectancy −0.0211R over 106 trades — fails the > +0.05R bar. Gross +0.0132R; the 0.034R/trade cost drag flipped it negative.
- Beats the dumb baseline (−1.057R net): PASS.
- OOS max drawdown −6.4R vs baseline −418.7R: within 2×.
- Sample: 106 OOS trades (≥100 required).
- Walk-forward efficiency −0.50: IS selection did not transfer OOS (K pinned at 0.7 every window — grid-edge selection — while later windows went negative).
- Decision: No edge; nothing promoted (none expected). Second reference strategy through the harness end-to-end; both dry runs behaved per hypothesis: thin gross edges exist, retail CFD costs erase them. Segment "dukascopy-eurusd-v1" iteration budget now 2/3 remaining; no re-runs without a new pre-registration.