Retire completed GTL tuning harnesses
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user