Finalize GTL and retire S/R research harness

This commit is contained in:
2026-07-13 17:58:04 +02:00
parent 9d362bd568
commit bee5a5ce89
35 changed files with 374 additions and 5385779 deletions
+20 -92
View File
@@ -1,99 +1,27 @@
# Backtest report index
Reports dated 2026-07-11 or earlier are the historical production research
record and are intentionally left untouched.
record and remain untouched.
The retained 2026-07-12/13 S/R reports mark a decision or provide the matching
control for one:
The completed 2026-07-12/13 S/R and Gate Target Ladder research is preserved as
compact decision evidence instead of full per-arm replay output:
- The initial full-period clean-detector regression,
`backtest-20260712-sr-detector-rewrite.json`, remains a local-only report and
is intentionally not added to version control.
- `backtest-sr-v2-train-production_control.json`: pre-July-2024 production
control shared by the detector matrices.
- `backtest-sr-v2-train-rewrite.json` and
`backtest-sr-v2-train-rewrite_legacy_primary.json`: isolate detector geometry
from the primary-target selector.
- `backtest-sr-v2-train-rr_aligned_control.json` and
`backtest-sr-v2-validation-rr_aligned_control.json`: show why primary target
selection must not simply inherit the 2.0 activation floor.
- `backtest-sr-traffic-train-legacy_traffic_grid_only.json`: reproduces the
accidental legacy grid edge.
- `backtest-sr-traffic-train-legacy_range_grid_neutral.json`: proves that the
grid effect does not require volume or touch strength.
- `backtest-sr-v2-validation-production_control.json` and
`backtest-sr-v2-validation-legacy_range_grid_neutral.json`: the post-2024
control and failed range-grid replication. The compact paired result remains
in `sr-v2-validation-comparison.json` and `sr-v2-validation-cohorts.csv`.
- `backtest-sr-range-factor-train-production_range504.json` and
`backtest-sr-range-factor-train-rewrite_range504_legacy_primary.json`: isolate
the explicit 504-day multiplicative-range factor.
- `backtest-sr-range-residual-train-rewrite_range504_structural_legacy_primary.json`
and `backtest-sr-range-residual-train-rewrite_range504_structural_primary2.json`:
the final target-source and primary-floor decision.
- `sr-v2-validation-comparison.json` and `sr-v2-validation-cohorts.csv` record
the held-out detector comparison.
- `sr-full-production-vs-candidate-comparison.json` and its cohort CSV record
the full-period clean-structure replacement decision.
- `sr-explicit-target-ladder-comparison.json` and its cohort CSV record exact
GTL parity: 202,765 candidates, 1,086 qualified setups, 321 book trades,
Sharpe 2.03, CAGR 50.0%, and max drawdown 21.4% in both arms.
- The three `backtest-20260713-gtl-*.json/.md` pairs record the tuning,
confirmation, and strength-sensitivity decisions. No stable improvement was
found, so the production GTL stayed frozen.
The full-period production comparison writes:
The large `backtest-sr-*.json` replay files were removed after consolidation.
They duplicated hundreds of thousands of candidate rows while adding no
decision information beyond the compact comparisons and the narrative in
`docs/research/sr-levels-and-exits.md`. The original raw files remain available
in Git history if a forensic reconstruction is ever necessary.
- `backtest-sr-full-production_control.json`
- `backtest-sr-full-rewrite_range504_structural_legacy_primary.json`
- `sr-full-production-vs-candidate-comparison.json`
- `sr-full-production-vs-candidate-cohorts.csv`
Those outputs should be retained as the final decision point for this research
branch.
The follow-up breadth-preserving ranking experiment writes
`backtest-sr-overlay-full.json`. Retain it only as the decision point for the
pre-registered 5% clean-structure overlay; exploratory weight sweeps should not
be committed.
The Gate Target Ladder (the `explicit_target_ladder` research arm) parity run
writes:
- `backtest-sr-full-explicit_target_ladder.json`
- `sr-explicit-target-ladder-comparison.json`
- `sr-explicit-target-ladder-cohorts.csv`
These establish the final architectural decision: the volume-free explicit
ladder retains all 1,086 qualified setups and exactly reproduces the production
book (Sharpe 2.03, CAGR 50.0%, max drawdown 21.4%, 321 trades). The final rerun
after scanner integration passed: the regenerated report changed only its
`generated_at` timestamp, confirming that the shared helper preserves exact
parity. Nothing in this research branch deploys the change to production.
The archived single-parameter decision point is:
- `backtest-20260713-gtl-tuning-matrix.json`
- `backtest-20260713-gtl-tuning-matrix.md`
These two compact consolidated files are retained; the 20 full per-arm reports
were removed after consolidation.
The completed 2026-07-13 matrix found no single-parameter replacement that
passed all robustness checks. Retain its JSON and Markdown as that decision
point. The retained-versus-added decomposition is retained as:
- `backtest-20260713-gtl-confirmation-matrix.json`
- `backtest-20260713-gtl-confirmation-matrix.md`
Detailed per-arm reports were not retained.
The completed confirmation matrix found one near-hit but no formal winner:
strength-1000 intersection improved full/train/post-2024 Sharpe and CAGR, while
max drawdown worsened from 21.4% to 21.7%. Retain that matrix as the cohort-
decomposition decision point. The final stability check is retained as:
- `backtest-20260713-gtl-strength-sensitivity.json`
- `backtest-20260713-gtl-strength-sensitivity.md`
Its pre-registered decision requires at least two adjacent scales to pass all
six unchanged checks.
Final sensitivity result: exact control and strength-1000 replication passed.
Scale 1500 was the sole 6/6 arm, but no adjacent scale passed, so the stable-
plateau rule rejected it. Retain the consolidated JSON/Markdown as the closing
GTL decision point. No confirmation or tuned strength value should be promoted
from this snapshot.
The temporary matrix runners and their configurable backtest hooks were removed
after consolidation. The normal local snapshot backtester remains.
The initial untracked `backtest-20260712-sr-detector-rewrite.json` is local-only
and is intentionally not part of the repository.