From 9717d8176bdb68cf072c71644679ee6dd8732266 Mon Sep 17 00:00:00 2001 From: Dennis Thiessen Date: Sun, 19 Jul 2026 11:45:15 +0200 Subject: [PATCH] research: archive Task 1 sector residual as CLOSED/REJECTED Deep masked retest failed the iron IC bar (0.027 < 0.03). Log as rejected #13 in research README; close sector-residual and history-depth docs. Production market residual unchanged. --- docs/research/README.md | 1 + docs/research/history-depth-extension.md | 39 +++++++------ docs/research/sector-residual-momentum.md | 67 ++++++++++++----------- 3 files changed, 57 insertions(+), 50 deletions(-) diff --git a/docs/research/README.md b/docs/research/README.md index 47e5add..0bd30b6 100644 --- a/docs/research/README.md +++ b/docs/research/README.md @@ -47,6 +47,7 @@ score, Structural S/R, the Gate Target Ladder, sentiment, fundamentals) is | 10 | **Inverse-vol position sizing** | The apparent "win" was **mis-attributed**: the 20% notional cap bound on 95% of entries, so it measured concentration, not vol-sizing. Genuine inverse-vol cuts DD to −18.2% but costs ~58pp return at flat Sharpe | **Rejected** as edge; it's a risk-preference trade | `backtest-20260709-position-sizing*.json` | | 11 | **FIP path-smoothness** as tie-breaker/filter | Non-monotonic within the qualified set; thinning the entry stream costs more compounding than the tilt returns | **Rejected as a filter** — but see §4, it's the strongest raw signal we've measured | — | | 12 | **Fixed take-profit sweep** (R-multiples) | No interior optimum ever found — the best TP is "no TP" | **Rejected.** Momentum's edge lives in the right tail | `backtest_service.py:450` | +| 13 | **Sector-residual 12-1** (`mom_12_1_sector_resid` / sector demean) as replacement for market residual | Short-window IC/A/B looked knife-edge green; deep repaired + **liquid-1500** retest: weeks 83, mild +IC **0.027** / t 1.69, **below iron bar 0.03** (FAIL). Demean already weaker | **Rejected / closed.** Keep production market residual. Do not resurrect without a new pre-registered protocol | [sector-residual-momentum.md](sector-residual-momentum.md) · `sector-resid-deep-20260719-113319.json` · history-depth supersession note | --- diff --git a/docs/research/history-depth-extension.md b/docs/research/history-depth-extension.md index 3f9d97a..182b315 100644 --- a/docs/research/history-depth-extension.md +++ b/docs/research/history-depth-extension.md @@ -1,8 +1,9 @@ # History-depth extension (Tier-1 alpha research) -**Status:** sector-resid deep test **FAIL** — see supersession section. PENDING_HUMAN beyond PASS/FAIL. -**Branch:** `research/earnings-gap-and-sue` (MacBook commit `f6e0ca7`) +**Status:** **CLOSED.** Sector-residual deep test **FAIL** — Task 1 archived as rejected (see supersession). +**Branch:** `research/earnings-gap-and-sue` **Superseded artifact (do not cite):** `reports/history-depth-20260719-103315.json` — **UNMASKED, TWO-TIER SNAPSHOT** +**Authoritative sector grade:** `reports/sector-resid-deep-20260719-113319.json` **Production impact:** none. **Do not retune any production knob on deep history.** --- @@ -159,17 +160,11 @@ report does not change that without a separate A/B. Flag for human awareness onl ## What a human must decide next -1. **Sector residual:** keep research-only until either - (a) sector ETF + sector map cover the full deep window **and** IC is re-run - with weeks ≫ 35 on a documented universe, or - (b) explicitly accept short-window-only evidence (weaker case). -2. **Do not** merge sector residual into production from this depth run. -3. **Do not** retune residual vs raw, FIP, or vol blend from these IC tables +1. **Sector residual — decided:** CLOSED / REJECTED (archive complete). No wire-in. +2. **Do not** retune residual vs raw, FIP, or vol blend from deep IC tables without a pre-registered book A/B on the intended universe. -4. Optional follow-up: extend sector ETF history + sector labels to nasdaq_all, - re-run **only** sector residual IC on deep research.sqlite with race guard. -5. Optional: finish earnings backfill (48→506) and re-run SUE; depth alone did - not include SUE. +3. Optional (separate threads only): finish earnings backfill and re-run SUE; + snapshot per-symbol depth guard as tooling. --- @@ -187,12 +182,22 @@ report does not change that without a separate A/B. Flag for human awareness onl The table and interpretation from **`history-depth-20260719-103315`** are **UNMASKED, TWO-TIER SNAPSHOT — superseded, directional only, do not cite**. Prod-universe names (and sector residual coverage) were left shallow while breadth names were deepened; sector residual weeks=35 was a data gap. -### Sector-residual deep test outcome: **FAIL** +### Sector-residual deep test outcome: **FAIL** (archived) -Task 1 CLOSED — sector residual dead on deep evidence. +**Task 1 CLOSED / REJECTED** — sector residual dead on deep evidence. Archived in +the research log rejected table (#13). Do not resurrect without a new +pre-registered protocol. + +| check | result | +|---|---| +| weeks | **83** (data fix worked) | +| mean IC | **0.0268** (below 0.03 bar) → FAIL | +| t vs resid same CS | 1.69 ≥ 1.30 pass | +| era signs | both + pass | -- Reason: failed one or more pre-registered checks (see checks) - Artifact: `reports/sector-resid-deep-20260719-113319.json` -- Mechanical checks: see that report. +- Summary write-up: [sector-residual-momentum.md](sector-residual-momentum.md) -**Future snapshot rebuilds must verify per-symbol depth** (earliest-bar uniformity across the intended universe) — guard is a to-do, not part of this order. +**Future snapshot rebuilds must verify per-symbol depth** (earliest-bar +uniformity across the intended universe) — guard is a to-do, not part of this +order. diff --git a/docs/research/sector-residual-momentum.md b/docs/research/sector-residual-momentum.md index 90a15ee..8400bf0 100644 --- a/docs/research/sector-residual-momentum.md +++ b/docs/research/sector-residual-momentum.md @@ -1,9 +1,24 @@ # Sector-residual momentum (Tier-1 alpha research) -**Status:** **PROMOTE (to human design decision only)** — IC + A/B bars cleared; **do not ship**. -**Branch:** `research/sector-residual-momentum` -**Production impact:** none. Local research only. No scheduler / gate / prod-config changes. -**Artifacts:** `reports/sector-residual-20260719-083356.json` (+ companion `.md`) +**Status:** **CLOSED / REJECTED** — do not resurrect without a new pre-registered protocol. +**Branch:** `research/earnings-gap-and-sue` (final grade) · earlier short-window work on `research/sector-residual-momentum` +**Production impact:** none. Market residual 12-1 remains the production momentum leg. +**Authoritative deep grade:** `reports/sector-resid-deep-20260719-113319.json` (**FAIL**) +**Short-window A/B (superseded for promotion):** `reports/sector-residual-20260719-083356.json` — knife-edge only; not decisive after deep masked retest. + +### Closure (2026-07-19) + +Pre-registered deep test on repaired snapshot + liquid-1500 mask: + +| check | result | +|---|---| +| weeks extended (≫ 35) | pass (83) | +| sign +, reliable, eras both + | pass | +| t ≥ `mom_12_1_resid` same CS | pass (1.69 ≥ 1.30) | +| \|mean IC\| ≥ 0.03 | **fail (0.0268)** | + +**Verdict:** Task 1 CLOSED — sector residual dead on deep evidence. +`mom_12_1_sector_demeaned` remains DEAD for promotion. No further sector-residual variants from this thread. --- @@ -176,45 +191,31 @@ gates a slightly larger set). --- -## Verdict +## Verdict (final — archived) | signal | verdict | note | |---|---|---| -| **`mom_12_1_sector_resid`** | **PROMOTE → human wire-in decision** | IC modestly beats market residual; A/B clears pre-reg bar narrowly. **Do not ship from this branch.** | -| **`mom_12_1_sector_demeaned`** | **DEAD** (for promotion) | Iron-rule IC magnitude ok, but t-stat loses to `mom_12_1_resid`. Cheap variant not competitive. | +| **`mom_12_1_sector_resid`** | **CLOSED / REJECTED** | Deep masked IC 0.0268 < 0.03 bar (`sector-resid-deep-20260719-113319`). Short-window PROMOTE superseded. | +| **`mom_12_1_sector_demeaned`** | **DEAD** | Never cleared t vs market residual; stays dead. | -### Read carefully (for the human) +Short-window evidence below is **historical only** (pre-deep retest). Do not use it +to reopen promotion. -1. **IC edge is real but small.** Sector residual IC 0.0578 / t 2.34 vs market - residual 0.0552 / t 1.98 on the **same** 35 windows — better consistency - (ic+ 65.7% vs 60%) and slightly higher mean, not a different factor class. -2. **A/B is not a clear Sharpe win.** Full-period Sharpe is flat (2.09). - Validation Sharpe is **lower** than control (2.57 vs 2.92) and only clears - the pre-registered “within 0.5 SE” cushion by ~0.001. Train improves; - validation worsens — classic regime-split noise on ~2 years. -3. **Risk side is friendly.** Full max DD improves (19.8% vs 21.4%); train DD - also better. Matches the “lower factor vol” half of the hypothesis more than - the “higher Sharpe” half on this window. -4. **Survivorship / short history.** Same caveats as all current research: - today’s constituents, ~35 independent weekly windows, one post-2021 regime - dominant. Task 3 (history depth) should re-check IC stability before any - wire-in. -5. **Not shipped.** Machinery lives on the research branch; production residual - path is untouched. +### Read carefully (archived context) + +1. Short-window IC (0.058 / t 2.34 vs resid 0.055 / t 1.98 on 35 weeks) and knife-edge + A/B looked openable — that was the data gap era (shallow prod bars). +2. Deep repaired + liquid-1500 retest closed the case: weeks 83, mild +IC, **below bar**. +3. Production keeps **market** residual 12-1. Research harness may still *emit* + sector residual for diagnostics; it is not a promotion candidate. +4. **Do not resurrect** without a new pre-registered protocol and new data. --- ## What a human must decide next -1. **Accept or reject** replacing `mom_12_1_resid` with `mom_12_1_sector_resid` - as the production residual (gate + 80/20 mom leg), **or** keep market residual - and treat sector residual as research-only. -2. If leaning accept: require **Task 3 history-depth** confirmation (IC era split - pre/post-2021) before any production PR. -3. Optional: run **sector-cap ≤3** A/B with full tail diagnostics (not run here). -4. **Do not** merge this verdict into main strategy docs without review. -5. Wire-in design (live sector map refresh, ETF series ops, fallback when sector - missing) is a **separate** approved engineering step. +**Nothing on Task 1** — archived. Optional: leave research machinery in tree +(harmless) or delete later as cleanup; not a strategy decision. ---