Retire completed GTL tuning harnesses

This commit is contained in:
2026-07-13 16:40:29 +02:00
parent 1d84a40c04
commit 8e09f239c8
16 changed files with 59 additions and 2057 deletions
+16 -28
View File
@@ -806,10 +806,10 @@ or perform a production deployment.
#### GTL tuning matrix
Exact parity establishes a safe, explicit control, but it does not prove that
the inherited GTL constants are optimal. The `gtl_tuning` backtest arm exposes
only those constants to an offline configuration; the live scanner continues
to call the frozen default helper and cannot read this research configuration.
Exact parity established a safe, explicit control but did not prove that the
inherited GTL constants were optimal. A temporary offline harness exposed those
constants without changing the live scanner. That harness has now been retired;
the compact consolidated reports remain as the reproducible decision record.
The single-command matrix contains 20 full-period arms. Each non-control arm
changes exactly one input:
@@ -826,11 +826,6 @@ changes exactly one input:
| Pivots | Five-bar swings | None / eleven-bar swings | Do pivots add anything beyond the range ladder? |
| Traffic strength scale | 500 | 250 / 1000 | Does strength saturation affect probability/selection? |
```bash
.venv/bin/python scripts/run_gtl_tuning_matrix.py \
backtest_snapshots/prod.sqlite --workers 14
```
Arms execute sequentially so multiprocessing pools never compete. Each arm
produces full-period production metrics, train/test books split at 2024-07-01,
robust expectancy after removing the top 5% of setups, and retained/added/
@@ -862,22 +857,16 @@ The paired cohorts do expose a narrower mechanism worth testing:
| Grid without pivots | 428 at +0.232R (+0.100) | 392 at +0.176R (+0.046) | 658 at +0.208R (+0.041) |
Replacement mixes the retained and added cohorts and also discards the removed
cohort, so its portfolio result cannot say which part helped. The follow-up
`gtl_confirmation` matrix therefore preserves frozen control geometry and
decomposes each selected variant into:
cohort, so its portfolio result could not say which part helped. The archived
confirmation matrix therefore preserved frozen control geometry and decomposed
each selected variant into:
- **intersection** — only control setups also core-qualified by the variant;
- **union** — all core-qualified control setups plus genuinely added variant
setups, using tuned geometry only for those additions.
It also tests pre-registered intersections among the three high-breadth
confirmers. Its control path must exactly reproduce the completed tuning
matrix before any research arm is accepted.
```bash
.venv/bin/python scripts/run_gtl_confirmation_matrix.py \
backtest_snapshots/prod.sqlite --workers 12
```
confirmers. Its control path exactly reproduced the completed tuning matrix.
Result: **13/13 arms completed with exact control parity; no arm passed all six
guardrails.** The decomposition does identify one near-hit:
@@ -894,17 +883,12 @@ ex-top-5%. This is consistent with a weak tail-dependence filter. It is not yet
a winner: the original drawdown guardrail remains fixed, and 21.7% is worse
than 21.4% even though the difference is small.
The final parameter test is therefore deliberately one-dimensional. It sweeps
The final parameter test was deliberately one-dimensional. It swept
coarse strength scales around 1000 (625, 750, 875, 1000, 1125, 1250, 1500,
2000), using intersection only. It must reproduce both the frozen control and
the completed strength-1000 result exactly. Promotion requires at least two
2000), using intersection only. It reproduced both the frozen control and the
completed strength-1000 result exactly. Promotion required at least two
adjacent non-control scales to pass all six original checks; an isolated winner
is rejected as sensitivity.
```bash
.venv/bin/python scripts/run_gtl_strength_sensitivity.py \
backtest_snapshots/prod.sqlite --workers 12
```
was rejected as sensitivity.
Final result: **9/9 arms completed, control parity passed, and the
strength-1000 replication passed.** Scale 1500 was the only arm to clear all
@@ -928,6 +912,10 @@ model. This snapshot is now exhausted for GTL fitting; any future challenger
must be pre-registered and evaluated on genuinely new forward data rather than
another iteration over the same history.
The temporary GTL matrix scripts, configurable detector branches, and
confirmation hooks were removed after this decision. The normal snapshot
backtester and frozen `explicit_target_ladder` parity arm remain.
The post-2024 window has been opened and is now analysis data, not a valid final
promotion holdout. These arms can isolate mechanism, but neither may ship without
new future data or a separately pre-registered walk-forward protocol.