# GPU prop-firm strategy miner (Pillar-2 search) -- run A report: Discovery finished, 0 survivors at the frozen gates

**Tested by:** Claude (2026-10-11 run, written 2026-10-12). **Status:** EMPIRICAL RESEARCH CANDIDATE (NOT LAW / NOT DEPLOYED). **Ledger:** +11,712 (one closing event,
backup `global_trial_ledger.json.bak_gpuminer_runA`; 684,929 -> 696,641). **Run ID:** `GPUMINER-2026-10-11-A`; prereg `prop_gpu_miner/PREREG.md`, sha256
`2d4223ec...e8bc3` (`PREREG.lock`), verified unchanged after the run, together with the sha256 of all 11 code files it lists.
Supersedes the Phase-0 report `GPU_MINER_REPORT_2026-10-11.md` (that run stopped before an engine existed; the owner ordered the build on 2026-10-11 17:56Z).

## Verdict
**0 survivors.** Stage 1 passed 1 cell, stage 2 passed 0. Validation (2021-01..2023-06) and Holdout (2023-07+) stayed closed; `PILLAR2_CANDIDATES.json` is `[]`.
The gates are the frozen ones of the prompt; none was changed.

## Numbers
| item | value |
|---|---|
| assets / windows / timeframes | nas100usd (2005-2020), us30usd, spx500usd, us2000usd, de30eur (2015-2020); LONDON_AM, NY_OPEN, LONDON_FIX, AFTERNOON; M5, M15, M30 |
| (asset, window, timeframe) combinations with an eligible stop (cost <= 0.030R) | 25 of 60; 61 (combination, stop) pairs |
| cells evaluated | **11,712** = 10,248 selectable (42 signal cells x 244 stop/target configurations) + 1,464 controls |
| cells with n >= 300 (selectable) | 3,988 |
| stage 1 (t >= 3.0, 2x > 0, >= 60% years, plateau) | 1 |
| max-statistic null (1,000 day-block shifts + 1,000 random-sign draws) | q95 **3.21** (shift 3.21, sign 3.19); median maximum 2.28 / 2.41 |
| best observed gate t | **3.01**; empirical p against the null maximum 0.085 (shift) / 0.108 (sign) |
| stage 2 survivors | **0** |
| controls passing stage 1 | 0 (EMATREND best t +2.91 of 488 cells, RAND best +2.08 of 976) |
[withheld: a line that refers to the lab's private live strategy]
| distribution of t over the 3,988 cells | >= 3.0: 1; >= 2.5: 9; >= 2.0: 62; <= -2.5: 403; <= -3.0: 202 |
| runtime | 22 minutes on the RTX 3080 Ti (below-normal priority); selftest + null calibration + parity before it |

The grid is net-negative on average (403 cells below -2.5 against 9 above +2.5): the broad families (ORB, Donchian, VWAP reversion, engulfing, sweeps) lose
their cost on these five indices, as the board predicted. Only US100 produced any cell above t = 2.5; the best cells of us2000, de30 and us30 peak at t = 1.4, 0.9 and 0.4, and spx500 (one eligible combination) has no cell with n >= 300.

## Leaderboard (net, 1x cost)
| # | cell | n | net R | t | 2x t | years+ |
|---|---|---|---|---|---|---|
| 1 | NAS100 NY_OPEN M15 SWEEP OR30 F1 eps 0.0, stop 1.0 ATR, target 2.5R | 1,352 | +0.0879 | 3.01 | 2.28 | 13/16 |
| 2 | same signal, target EOD | 1,351 | +0.0906 | 2.99 | 2.30 | 14/16 |
| 3 | same signal, target 2.0R | 1,358 | +0.0798 | 2.83 | 2.08 | 11/16 |
| 4 | same, eps 0.25, target EOD | 808 | +0.1106 | 2.83 | 2.28 | 12/16 |
| 5 | NAS100 AFTERNOON M15 SWEEP OR30 F1 eps 0.25, stop 1.0, EOD | 1,529 | +0.1074 | 2.62 | 1.84 | 11/16 |
| 6 | NAS100 NY_OPEN M30 ENGULF trend q 0.5, stop 1.0, 2.5R | 414 | +0.0864 | 2.47 | 2.09 | 12/16 |
| 7 | NAS100 NY_OPEN M5 DONCH N 10 F0, stop 1.5, 2.5R | 3,759 | +0.0412 | 2.45 | 1.00 | 10/16 |

## The nearest miss (not a candidate)
The top cluster is one signal: a sweep of the 30-minute opening range (price pierces the OR30 extreme and closes back inside, bar range >= 1 ATR), faded,
on the Nasdaq-100 CFD between 09:45 and 11:30 ET on M15 bars. Its cells share trade sets, so the 52 configurations are one hypothesis, not 52.
- net +0.088R on 1,352 trades 2005-2020; long +0.095R (754), short +0.080R (598); top-5 trades are 10.5% of the total, mean without them +0.079R;
  negative in 2005, 2006 and 2017 (-0.18, -0.07, 0.00), +0.39R in 2018.
- it decays with the stop: +0.088R at 1.0 ATR (t 3.01), +0.049R at 1.5 (t 2.18), +0.030R at 2.0 (t 1.75), same 2.5R target; the 2x-cost t is 2.28.
- deflated Sharpe (report-only, `lab_stats.dsr`, daily R over all Discovery days): 0.21 at N = 11,712 and 0.44 at N = 1,000.
- per-trade file: `out/trades/nas100usd_NY_OPEN_M15_SWEEP_eps-0.0-filt-F1-level-OR30_S1.0_T2.5.csv`.
Against the null maximum it is an unremarkable best-of-10,248 (p about 0.1). The frozen protocol does not let it go forward.

## Integrity notes (all disclosed, none changes the verdict)
1. **Two processes.** I misread the end of the launching shell task as the death of the first Discovery process and started a second one. Both ran, both resumed
   from the same ledger chunks and finished within seconds of each other (22.9 and 21.9 minutes; two `discovery_done` events with identical summaries).
   Seeds and shifts are deterministic, so the chunks they both rewrote are identical.
2. **A stray unlock record.** `out/unlock.json` appeared at 2026-10-11T20:00:03Z with `cells_sha256 = "test"`, note `inspection`, for BOTH validation and holdout.
   I did not write it (the stage-transition step never ran: there was no stage-2 survivor), and nothing else in the package changed after 21:36 local.
   Moved to `out/unlock.json.QUARANTINED_inspection_20261011T2000Z` and logged in the ledger. Whoever ran it may have read Validation / Holdout rows through
   the loader; this miner evaluated nothing there, and no result depends on it. If the near miss is ever tested on those windows, treat them as read.
3. Code and prereg hashes verified after the run: all unchanged. The cost-eligibility table and the grid were frozen before any candidate return was read.

## What could I be wrong about?
[withheld: a line that refers to the lab's private live strategy]
[withheld: a line that refers to the lab's private live strategy]
- **The statistic is conservative on purpose:** min(trade-level t, day-clustered t) and a maximum over 10,248 correlated cells (many duplicates by target).
  With t = 3.0 as the stage-1 bar and the null at 3.2 a single real +0.09R edge on 1,350 trades sits right at the boundary.
- **Grid choices are mine** (parameter values, F1 / F2 definitions, STRUCT stop, entry ranges). Different values would be a new run with a new prereg.
- **Costs.** US100 uses the project's 1.70 pt model in US windows; the other four use 1.25 x the file spread (1.2-2.4x above today's FTMO-measured values),
  so de30 / us30 / spx500 / us2000 are judged harshly. They produced nothing near t = 2 in any case.
- **No volume.** RVOL could not be tested and VWAP is the unweighted session mean.

## Decision for Kaloyan
Opening Validation for the near-miss cluster as ONE pre-registered hypothesis (new run ID) bypasses stage 2 and therefore needs an explicit yes. Bar: n >= 100,
t >= 2.0 at 1x, >= 1.0 at 2x, same sign, mean >= 50% of +0.088R, win-rate drift < 10 points; then Holdout once. Expected: the cell trades 0.32 times a day, so about 210 trades in Validation; even a true
+0.088R reaches t >= 2.0 only about 20% of the time, a zero edge about 2%. Cost: nothing but the window, which can be read only once for this rule.

## Files
`prop_gpu_miner/`: `PREREG.md`, `PREREG.lock`, `run_miner.py`, `engine_gpu.py`, `engine_ref.py`, `indicators_gpu.py`, `gates.py`, `stages.py` (validate / holdout, not run),
`selftest.py`, `synth_suite.py`, `ledger.py`, `data_loader.py`, `config.py`; `out/`: `STATUS.md`, `results_discovery.parquet` (11,712 rows), `null_discovery.json`,
`eligibility_dsl.json`, `ledger.sqlite`, `trades/`, `discovery/` (per-combination chunks), logs.
