research: prepare prod book universe x horizon 4-arm matrix
Pre-register A-D (4y/2016 x 505/505+liquid) with unchanged production knobs. Runner caches full GTL candidates then re-ranks per arm; MacBook entry via run_tier1_macbook.sh --prod-book-matrix.
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
# 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
|
||||
|
||||
*(filled after run)*
|
||||
|
||||
| arm | universe | entry start | Sharpe | SE | CAGR % | max DD % | trades | notes |
|
||||
|---|---|---|---:|---:|---:|---:|---:|---|
|
||||
| A | 505 | 2022-07-01 | | | | | | |
|
||||
| B | 505+liquid | 2022-07-01 | | | | | | |
|
||||
| C | 505 | 2016-07-01 | | | | | | |
|
||||
| D | 505+liquid | 2016-07-01 | | | | | | |
|
||||
|
||||
---
|
||||
|
||||
## Verdict
|
||||
|
||||
**PENDING_HUMAN** after numbers land.
|
||||
Reference in New Issue
Block a user