Isolate legacy range-expansion factor

This commit is contained in:
2026-07-13 08:37:55 +02:00
parent f8e1107851
commit 1daf762bda
5 changed files with 156 additions and 6 deletions
+47 -4
View File
@@ -541,10 +541,53 @@ Run only these new arms on macOS:
--only-arm legacy_range_grid_neutral --workers 14
```
The touch arm should closely reproduce `legacy_traffic_grid_only`; that is the
volume-removal parity check. The touch-versus-neutral comparison then attributes
any remaining difference to occupancy strength. Freeze the winner before running
the post-2024-06-30 validation command; do not tune the bin count on training data.
The touch arm reproduced `legacy_traffic_grid_only` exactly: all 121,464
candidates, 504 qualified setups, cohort membership, expectancy, and portfolio
metrics match. Volume contributes nothing. Neutral strength won the training
portfolio comparison (Sharpe 1.98 versus 1.72), but failed the locked validation:
| validation arm | Sharpe | CAGR | MaxDD | net avg R | ex-top-5% |
|---|---:|---:|---:|---:|---:|
| production control | **2.78** | **73.3%** | **11.7%** | 0.174 | 0.022 |
| neutral range grid | 1.85 | 43.2% | 15.2% | **0.178** | **0.039** |
The neutral grid is a no-ship. The validation failure prompted a causal audit of
the control rather than another detector sweep. One relationship survives both
periods: dense legacy ladders are a proxy for a wide multiplicative price range.
| control cohort | training ex-top-5% | validation ex-top-5% |
|---|---:|---:|
| at least 70 legacy levels | +0.165R | +0.185R |
| fewer than 70 levels | +0.004R | -0.379R |
Level count is not independently useful after controlling for the last 504
trading days' range. For `log(max(high) / min(low)) >= 1.0315` (about a 2.8x
high/low ratio), the overlap cohort returns +0.292R training and +0.322R
validation ex-top-5%. High density without high range returns -0.096R and
+0.029R. Correlation between the explicit range and legacy level count is 0.864
training and 0.822 validation.
This isolates the hidden feature as a two-year realized price-excursion factor,
accidentally encoded by how many full-history pivots survive a 0.5% merge. It is
not evidence that the arbitrary lines are structural. A rounded threshold of
`log range >= 1.0` remains positive across a 0.9/1.0/1.1 sensitivity plateau.
Two diagnostic-only arms now test whether the explicit scalar replaces the side
effect:
- `production_range504`: deployed targets plus the explicit range gate;
- `rewrite_range504_legacy_primary`: clean targets, frozen primary selection,
plus the identical range gate.
Run on pre-2024 training data only:
```bash
.venv/bin/python scripts/run_sr_v2_matrix.py factor --workers 14
```
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.
**Next runs, if picked back up:**