3.4 KiB
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:
- History length used for entries (≈4y vs since 2016-07)
- 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.sqliteafter sector-resid deepen (prod names from ~2016, breadth deep, completion manifestcomplete=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.