research: volatility-standardized residual momentum screen, failed

Strategy review (2026-09-08) and a frozen, paired signal screen of
residual 12-1 momentum divided by its formation-window residual
volatility. Across 73 non-overlapping windows the normalized signal's IC
is 0.0128 against 0.0145 for the matched control, below the frozen 0.03
floor, so the conditional portfolio replay was not run and nothing in
production changes.

Code-review fixes to the runner, before first commit: a missing OHLC
price stops the run instead of reading as 0; the snapshot connection is
closed explicitly (on Windows it otherwise kept the file locked); the
paired-coverage check raises instead of asserting, so python -O cannot
strip it; and source files are recorded as git blob ids with line
endings normalized, so the report can be checked against history. The
report was regenerated with the fixed runner; its screen section is
byte-identical to the original run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
dennisthiessenandClaude Opus 5.5 committed 2026-10-10 18:45:24 +02:00
1 parent 70d17c1491
commit 7a9b3ad38b
9 files changed
+2659

No files matched your search

+7
View File
@@ -1,5 +1,12 @@
# Backtest report index
The 2026-09-08 residual-normalization signal experiment is preserved in
`residual-normalization-20260908.json` and its generated Markdown table.
The JSON includes every retained window, coverage, paired uncertainty, the
mechanical verdict, the snapshot hash, and the git blob ids of the source it
ran. The screen failed its frozen IC floor, so no portfolio replay was run. Interpretation:
[`residual-normalization-findings.md`](../docs/research/residual-normalization-findings.md).
The 2026-10-09 breakeven-stop exit test is preserved in
`backtest-20261009-breakeven-stop.json` (regenerated 2026-10-10 after a code
review, with no graded number changed). Its `breakeven_stop_study` section holds
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,35 @@
# Residual normalization — signal screen
Generated: 2026-10-10T07:53:06.165467+00:00
**Verdict: FAIL**
Previously inspected historical data; no production change or new out-of-sample claim.
| Era | Arm | Windows | Avg stocks | Mean IC | IC 95% interval | Quintile spread |
|---|---|---:|---:|---:|---|---:|
| full | unrestricted_control | 73 | 485.5 | 0.0145 | [-0.0257, 0.0450] | 0.97% |
| full | paired_control | 73 | 485.4 | 0.0145 | [-0.0257, 0.0450] | 0.97% |
| full | normalized | 73 | 485.4 | 0.0128 | [-0.0271, 0.0442] | 0.75% |
| pre_2021 | unrestricted_control | 30 | 472.0 | 0.0078 | [-0.0338, 0.0682] | 0.76% |
| pre_2021 | paired_control | 30 | 471.7 | 0.0078 | [-0.0338, 0.0683] | 0.75% |
| pre_2021 | normalized | 30 | 471.7 | 0.0050 | [-0.0395, 0.0661] | 0.46% |
| post_2021 | unrestricted_control | 42 | 495.2 | 0.0238 | [-0.0125, 0.0630] | 1.26% |
| post_2021 | paired_control | 42 | 495.2 | 0.0238 | [-0.0125, 0.0630] | 1.26% |
| post_2021 | normalized | 42 | 495.2 | 0.0226 | [-0.0147, 0.0631] | 1.06% |
Paired normalized-minus-control IC differences:
- full: -0.0016; 95% interval [-0.004960466538844113, 0.0015584142071432597].
- pre_2021: -0.0028; 95% interval [-0.008151700038659202, 0.001515881215178447].
- post_2021: -0.0012; 95% interval [-0.005965195533675296, 0.003076462018338155].
Screen checks: `{"mean_ic_ge_0_03": false, "at_least_12_windows": true, "pre_2021_positive": true, "post_2021_positive": true}`
Portfolio stage: **not_run_failed_signal_screen**.
Signal IC and quintile spreads are predictive diagnostics, not simulated strategy returns.
Intervals resample paired blocks of four non-overlapping forward windows; they remain exploratory.
The unrestricted control shows the effect of requiring complete formation history.
[Frozen protocol](../docs/research/residual-normalization.md)