# MIROSCOPE ROUND-3 OUT-OF-SAMPLE VALIDATION — REPORT
Date: 2026-09-25. Protocol: `variants/ROUND3-SPEC.md` (locked BEFORE any run;
no parameters changed, no pairs removed, no mid-run re-ranking, no new variants).
Variant definitions frozen from `variants/ROUND2-SPEC.md`.
Data: 8 unseen FX pairs, Yahoo H1, 2025-01-01 → 2026-09-20 UTC, ~10.5k bars each
(see `variants/PLAN-R3.md` for validation). Engine: `variants/run_variants.py`
(stdlib, deterministic; round-3 extension verified by exact round-2 EURUSD
reproduction). Accounting: $10k, 1% risk/setup, R-multiple, no spread/commission.
All 64 runs completed: 5 variants x 8 pairs + 3 robustness x 8 pairs.
Raw per-run records: `variants/results-r3.jsonl`.

## VERDICTS (pre-registered criteria)

| Variant | Agg E(R) | Agg PF | Trades | Min pair n | Pos pairs | Worst pair | Verdict |
|---|---|---:|---:|---:|---:|---:|---|
| V3-L5 | +0.389 | 2.15 | 964 | 102 | 8/8 | +0.268 (USDJPY) | **SURVIVED** |
| V3-L3 | +0.375 | 2.08 | 1,158 | 128 | 8/8 | +0.290 (USDCAD) | **SURVIVED** |
| V2-EMA20 | +0.285 | 1.79 | 915 | 99 | 8/8 | +0.219 (AUDUSD) | **SURVIVED** |
| V1-RSI45 | +0.490 | 2.49 | 194 | 19 (USDCAD) | 8/8 | +0.239 (NZDUSD) | **INCONCLUSIVE** |
| V9c | +0.102 | 1.21 | 321 | 23 | 6/8 | -0.150 (USDCHF) | **INCONCLUSIVE** |

SURVIVED required ALL of: E>=+0.10R, PF>=1.30, >=20 trades on EVERY pair,
>=6/8 positive pairs, worst pair >-0.25R.
- **V3-L5** clears all five with margin (worst pair still +0.268R on 140 trades).
- **V3-L3** clears all five with margin (worst pair +0.290R on 135 trades).
- **V2-EMA20** clears all five (worst pair +0.219R on 111 trades).
- **V1-RSI45** fails SURVIVED on exactly one criterion: USDCAD produced 19 trades,
  one short of the 20-trade minimum. Its expectancy (+0.490R), PF (2.49), 8/8
  positive pairs, and worst pair (+0.239R) all clear the survival bars. No
  hard-death condition applies (E>0, PF>1.00, >3/8 positive, worst>-0.50R).
  Verdict: INCONCLUSIVE — by the letter of the pre-registered law, one trade
  short on one pair. The protocol forbids re-running or adjusting; it stays
  INCONCLUSIVE.
- **V9c** fails SURVIVED on aggregate PF (1.21 < 1.30) despite clearing the
  expectancy bar (+0.102R >= +0.10R), 6/8 positive pairs, and worst pair -0.150R.
  Two pairs negative (GBPUSD -0.067R n=42, USDCHF -0.150R n=37). No hard-death
  condition applies. Verdict: INCONCLUSIVE — the round-2 entry-mechanics fix
  transferred weakly but not convincingly.

## PER-VARIANT PER-PAIR TABLES

### V3-L5 — SURVIVED
| Pair | n | Win% | PF | Exp(R) | MaxDD% |
|---|---:|---:|---:|---:|---:|
| GBPUSD | 110 | 60.9 | 2.39 | +0.455 | 3.8 |
| USDJPY | 140 | 56.4 | 1.70 | +0.268 | 4.6 |
| AUDUSD | 119 | 67.2 | 3.33 | +0.574 | 2.3 |
| USDCAD | 105 | 62.9 | 1.95 | +0.337 | 7.6 |
| USDCHF | 111 | 61.3 | 2.09 | +0.392 | 5.0 |
| NZDUSD | 143 | 62.9 | 2.17 | +0.402 | 5.0 |
| EURGBP | 102 | 61.8 | 2.31 | +0.402 | 3.2 |
| EURJPY | 134 | 58.2 | 1.85 | +0.312 | 4.9 |
Aggregate E(R) = +0.389 (total R / total trades). Mean pair E(R) = +0.393.

### V3-L3 — SURVIVED
| Pair | n | Win% | PF | Exp(R) | MaxDD% |
|---|---:|---:|---:|---:|---:|
| GBPUSD | 133 | 61.7 | 2.36 | +0.444 | 3.6 |
| USDJPY | 165 | 59.4 | 1.97 | +0.350 | 3.9 |
| AUDUSD | 138 | 65.2 | 2.79 | +0.485 | 2.9 |
| USDCAD | 135 | 60.0 | 1.76 | +0.290 | 8.5 |
| USDCHF | 139 | 59.0 | 1.87 | +0.330 | 5.0 |
| NZDUSD | 162 | 61.7 | 2.09 | +0.384 | 5.0 |
| EURGBP | 128 | 57.8 | 2.05 | +0.353 | 3.8 |
| EURJPY | 158 | 60.8 | 2.04 | +0.365 | 4.6 |
Aggregate E(R) = +0.375. Mean pair E(R) = +0.375.

### V2-EMA20 — SURVIVED
| Pair | n | Win% | PF | Exp(R) | MaxDD% |
|---|---:|---:|---:|---:|---:|
| GBPUSD | 108 | 51.9 | 2.27 | +0.384 | 2.8 |
| USDJPY | 108 | 50.9 | 1.75 | +0.300 | 4.7 |
| AUDUSD | 111 | 48.6 | 1.60 | +0.219 | 5.9 |
| USDCAD | 144 | 52.1 | 1.76 | +0.278 | 5.6 |
| USDCHF | 123 | 48.0 | 1.63 | +0.254 | 6.3 |
| NZDUSD | 99 | 47.5 | 1.62 | +0.232 | 4.8 |
| EURGBP | 112 | 51.8 | 2.04 | +0.327 | 5.5 |
| EURJPY | 110 | 51.8 | 1.82 | +0.291 | 5.2 |
Aggregate E(R) = +0.285. Mean pair E(R) = +0.286.

### V1-RSI45 — INCONCLUSIVE (USDCAD n=19 < 20)
| Pair | n | Win% | PF | Exp(R) | MaxDD% |
|---|---:|---:|---:|---:|---:|
| GBPUSD | 20 | 55.0 | 2.33 | +0.534 | 1.8 |
| USDJPY | 27 | 66.7 | 3.59 | +0.711 | 1.7 |
| AUDUSD | 33 | 51.5 | 2.04 | +0.368 | 4.5 |
| USDCAD | 19 | 73.7 | 3.76 | +0.667 | 1.3 |
| USDCHF | 20 | 60.0 | 3.17 | +0.709 | 1.8 |
| NZDUSD | 23 | 56.5 | 1.60 | +0.239 | 3.3 |
| EURGBP | 21 | 52.4 | 1.83 | +0.257 | 3.2 |
| EURJPY | 31 | 61.3 | 2.53 | +0.492 | 2.6 |
Aggregate E(R) = +0.490. Mean pair E(R) = +0.497. USDCAD marked INSUFFICIENT
SAMPLE per protocol (<20 trades); excluded from positive/negative counts, which
blocks the SURVIVED verdict.

### V9c — INCONCLUSIVE (aggregate PF 1.21 < 1.30)
| Pair | n | Win% | PF | Exp(R) | MaxDD% |
|---|---:|---:|---:|---:|---:|
| GBPUSD | 42 | 35.7 | 0.88 | -0.067 | 6.6 |
| USDJPY | 36 | 33.3 | 1.16 | +0.064 | 4.2 |
| AUDUSD | 46 | 43.5 | 1.35 | +0.173 | 5.6 |
| USDCAD | 23 | 30.4 | 1.22 | +0.078 | 3.3 |
| USDCHF | 37 | 29.7 | 0.72 | -0.150 | 9.6 |
| NZDUSD | 50 | 40.0 | 1.28 | +0.150 | 7.6 |
| EURGBP | 48 | 43.8 | 1.45 | +0.189 | 6.9 |
| EURJPY | 39 | 43.6 | 1.65 | +0.318 | 7.5 |
Aggregate E(R) = +0.102. Mean pair E(R) = +0.094.

## ROBUSTNESS VARIANTS (perturbation analysis, no verdicts)
- **R1 (V3-L5, session 09:00-19:00 UTC):** agg E(R) +0.366, PF 2.08, 8/8 positive,
  worst pair +0.259 (USDJPY). The spec's worry condition (collapse to PF<1.00 or
  negative expectancy across most pairs) did NOT trigger. The session boundary
  is not the mechanism; V3-L5's edge is not a 07:00-17:00 artifact.
- **R2 (V2-EMA20, slope >= 0.15 ATR):** agg E(R) +0.296, PF 1.83, 8/8 positive,
  worst pair +0.218 (AUDUSD). The worry condition (survives only at 0.05,
  collapses at 0.15) did NOT trigger — R2 is marginally *better* than the base
  (+0.296 vs +0.285). The slope threshold is a live but gentle knob, not a
  load-bearing one.
- **R3 (V1-RSI45, TP2 = 2.75R):** agg E(R) +0.480, PF 2.46, 8/8 positive, worst
  pair +0.222 (NZDUSD). Nearly identical to the 3.00R base (+0.490R). The worry
  condition (result disappears with a 0.25R target move) did NOT trigger. The
  edge is not concentrated in the exact 3R tail.

## TRAP COMPLIANCE AND HONEST NOTES
- **Pre-test underperformance hypotheses were mostly wrong** (recorded honestly):
  V3-L5 was expected weak on EURGBP/USDJPY — USDJPY was weakest (+0.268) but
  EURGBP was solid (+0.402). V3-L3/USDCAD was weakest, not EURGBP/USDJPY.
  V2-EMA20/AUDUSD was weakest, not EURGBP/USDCAD (EURGBP was above average).
  V1-RSI45/USDJPY was the *best* pair (+0.711), opposite of the hypothesis.
  V9c/EURGBP was above average (+0.189). The hypotheses did not alter the test,
  per protocol; the transfer was broader than predicted.
- **Currency-family clustering:** none. All three survivors are positive on EUR
  pairs, USD pairs, and JPY pairs alike. The finding is not driven by one
  currency family.
- **Independence caveat:** the 8 pairs are NOT 8 independent experiments (shared
  EUR/USD/JPY exposure). No false significance claim is made; the unit of
  evidence is the cross-pair pattern.
- **Data-mining bias:** the 5 candidates were selected after ~30 in-sample runs
  on EURUSD. Round 3 tests *transferability*, not unbiased discovery. The
  pre-registered criteria were locked before any OOS run.
- **Calendar overlap:** all pairs share the 2025-01 → 2026-09 window, so a
  macro-regime effect common to all FX cannot be ruled out cross-sectionally.
  Temporal validation (round 4) is the remaining check.
- **Costs omitted:** no spread/commission/slippage in any round. Real results
  would be somewhat worse. Expectancies of +0.2R to +0.4R leave room, but this
  is not yet a tradable claim.
- **V1-RSI45 one-trade-short note:** the protocol is explicit — a variant cannot
  be declared dead for firing rarely, and SURVIVED requires >=20 on every pair.
  USDCAD's 19 trades make it INCONCLUSIVE. No re-runs, no adjustments.

## DECISION-TREE CASE
**Case A fires for V3-L5** (survived) — and by the same logic **Case D fires for
V2-EMA20** (survived while being a different mechanism). V3-L3's survival
alongside V3-L5 keeps the 3pt-vs-5pt question open but does not trigger Case B
(L5 did not die). Recommended round 4 (NOT started): temporal validation —
split the calendar into the four pre-registered blocks (2025H1, 2025H2, 2026H1,
2026-07-01→09-22) and require >=+0.05R and PF>=1.15 in at least 3/4 blocks with
no block below -0.25R, for V3-L5 and V2-EMA20. No parameter tuning between blocks.

## BOTTOM LINE FOR MICHAEL
Three strategies survived genuine out-of-sample validation on eight unseen
currency pairs: V3-L5 (+0.389R/trade, PF 2.15, 964 trades), V3-L3 (+0.375R,
PF 2.08, 1,158 trades), and V2-EMA20 (+0.285R, PF 1.79, 915 trades). Every
robustness perturbation held. V1-RSI45 missed survival by a single trade on one
pair — inconclusive, not dead. V9c is weakly positive but unconvincing.
This is the first result in the program that is not explainable by in-sample
luck alone. It is still not a paper-trading authorization: costs are unmodeled
and temporal validation (round 4) has not run. That decision is his.
