# Production book × universe × horizon matrix **Status:** PRE-REGISTERED — prepare / MacBook run; no production changes. **Branch:** `research/earnings-gap-and-sue` **Runner:** `scripts/run_prod_book_universe_matrix.py` --- ## Question How does the **live production book** (unchanged knobs) behave when we only vary: 1. **History length** used for entries (≈4y vs since 2016-07) 2. **Tradable universe** (prod ~505 vs 505 + PIT liquid Nasdaq/breadth) No strategy modifications: same residual gate, 80/20 high-vol rank, GTL entry machinery, 3× ATR trail, 30d max hold, gate-reset re-entry, `fill_mode=close`, cost 10 bps/side, max 10, 1% risk. --- ## Pre-registered arms (locked) | id | label | Entry start | Tradable universe | |---|---|---|---| | **A** | prod_4y_505 | **2022-07-01** | Prod ~505 only | | **B** | prod_4y_505_liquid | **2022-07-01** | Prod ∪ liquid top-1500 | | **C** | prod_2016_505 | **2016-07-01** | Prod ~505 only | | **D** | prod_2016_505_liquid | **2016-07-01** | Prod ∪ liquid top-1500 | - **End:** last available bar in snapshot (no artificial end). - **4y start** chosen to align with recent Phase‑A / book baselines (~mid‑2022 → mid‑2026). - **2016-07-01** = first full month after typical Alpaca floor (~2016-01); residual 12‑1 needs ~1y bars so first residual ranks appear mid‑2017 where feed allows. ### Universe definitions | set | definition | |---|---| | **Prod ~505** | Symbols **not** in `research_rank_only` on the research snapshot (the original prod-universe copy). | | **Liquid top-1500** | Point-in-time: among names with as-of close ≥ **$5** and valid 63d median $vol, keep top **1500** by that $vol. Same definition as breadth IC research. | | **Prod ∪ liquid** | A name may enter the book on date *t* if it is prod **or** in the liquid top-1500 at *t*. | Cross-sectional residual / vol / 80/20 ranks are **recomputed inside each arm’s eligible candidate set** that period (so breadth arms are not ranked against non-eligible thin names). ### Explicit non-goals - No sector residual, SUE, FIP filter, gap-cap, take-profit, vol-target, corr-cap - No retune of trail / cutoff / min_rr - Survivorship: report levels with the standard caveat; **compare arms relatively** ### Reporting (required table) Per arm: Sharpe, Sharpe SE (Mertens), CAGR %, max DD %, total return %, trades, win rate if available, start/end, n qualified longs. One markdown table + JSON. **No promotion rule** — descriptive matrix only. Human decides whether breadth or depth changes the risk story. --- ## Snapshot requirements - Prefer MacBook **deep** `research.sqlite` after sector-resid deepen (prod names from ~2016, breadth deep, completion manifest `complete=true`). - Race-guard before run. - Sector map / sector ETFs optional (not used for ranking). --- ## Results Generated: `2026-07-19T14:07:37.458454` | arm | universe | entry start | Sharpe | SE | CAGR % | max DD % | trades | |---|---|---|---:|---:|---:|---:|---:| | A_prod_4y_505 | prod_505 | 2022-07-01 | 1.32 | 0.49 | 31.8 | 18.9 | 374 | | B_prod_4y_505_liquid | prod_plus_liquid | 2022-07-01 | 0.14 | 0.499 | -1.8 | 55.3 | 706 | | C_prod_2016_505 | prod_505 | 2016-07-01 | 0.88 | 0.314 | 16.7 | 24.4 | 763 | | D_prod_2016_505_liquid | prod_plus_liquid | 2016-07-01 | -0.06 | 0.316 | -7.0 | 73.9 | 1567 | Full report: `reports/prod-book-universe-horizon-20260719-140737.json` ## Verdict **PENDING_HUMAN** — descriptive only; production knobs unchanged.