Add lagged/tier/prod-subset/mom-conditional checks on research.sqlite. Log: unconditional sign is a winner/bleeder tug-of-war; mom-conditional fip stays negative and reliable; warn on high-vol tilt if universe broadens.
7.2 KiB
Broad-universe fip_id IC research (Phase B)
Status: research complete enough for a platform decision on unconditional fip.
Production impact: none. Display card remains context-only.
Generated: 2026-07-18 (breadth run + diagnostics same day).
Scope
- Research only — production universe, gate, scanner, schedule unchanged.
- Price-only signal harness; no sentiment/fundamentals on the broad tier.
- Snapshot:
research.sqlite— ~4,650 tickers (prod + nasdaq_all extend). - IC mask: top 1,500 by point-in-time 63d median $vol, price ≥ $5, per week.
Caveats
- Survivorship bias — today's constituents, history backfilled (worse in small caps).
- IEX volume undercount — relative $vol rank only, not absolute floors.
- Pool skew — nasdaq_all ∪ partial SPX seed tilts tech/biotech; missing pure NYSE mid-caps.
- Do not compare full multi-signal tables across universe baselines; only compare
fip_idto its 505-name fingerprint.
Fingerprint (505-name prod snapshot)
| Expected | Observed | |
|---|---|---|
| mean IC | −0.045 | −0.045 |
| t-stat | −2.9 | −2.91 |
| weeks | ≥12 | 35 |
| avg N | ~500 | 497.7 |
| reliable | true | true |
Pass. Pipeline and formula are trustworthy.
Artifacts: reports/fip-breadth-20260718-211440-fingerprint.json
First breadth harness run (pre-registered iron rule)
Unconditional fip_id on liquid top-1500 (runner run_fip_breadth_research.py):
| metric | value |
|---|---|
| mean_ic | +0.0575 |
| ic_t_stat | +5.12 |
| ic_positive_pct | 88.6% |
| weeks | 35 |
| avg_cross_section | 1471.2 |
| reliable | true |
Iron rule as written (need negative sign): not green.
Honest call: no production change from that screen alone.
Artifact: reports/fip-breadth-20260718-211440-breadth.json
Why “+IC on Nasdaq” is not a jumpiness-premium story
fip_id = sign(PRET) × (%neg − %pos) pools two opposite continuous populations:
| Leg | Formation | Continuation intuition | IC contribution |
|---|---|---|---|
| Continuous winners | PRET>0, mostly up days (smooth climbers) | Paper: keep going up | negative |
| Continuous losers / bleeders | PRET<0, mostly down days (grind-down biotechs, SPACs, etc.) | Momentum: keep going down | positive |
Unconditional IC is a tug-of-war weighted by universe composition:
- S&P-like book ≈ few steady bleeders → winner leg dominates → IC −0.045.
- Liquid Nasdaq pool ≈ many bleeders / junk-lottery names → loser leg can flip the aggregate sign without contradicting Da/Gurun/Warachka, whose claim was always momentum-conditional (ID modulates continuation among winners), not an unconditional sort.
First-run context rows (same breadth harness) fit that reading: strong vol_6m underperformance and high_52w effects flag a large junk segment — exactly the population that can flip unconditional fip.
Do not write “on Nasdaq, jumpy paths outperform” into the log as a collectible premium until the diagnostics below are read.
Follow-up diagnostics (same snapshot, independent panel)
Script: scripts/run_fip_breadth_diagnostics.py
Artifact: reports/fip-breadth-diagnostics-20260718-213908.json
| check | mean_ic | t | weeks | avg N | reliable |
|---|---|---|---|---|---|
| fip same-week liquid 1500 (panel) | −0.017 | −1.85 | 35 | 1471 | true |
| fip lagged membership (prior-week $vol) | −0.010 | −0.93 | 35 | 1471 | true |
| fip tier 1–800 (senior liquid) | −0.035 | −2.99 | 35 | 791 | true |
| fip tier 801–1500 (junior liquid) | +0.014 | +1.25 | 35 | 700 | true |
| fip prod-universe subset inside liquid | −0.044 | −2.88 | 35 | 498 | true |
| fip mom-conditional (top 20% mom_12_1) | −0.088 | −4.58 | 35 | 294 | true |
| vol_6m liquid 1500 (panel) | −0.047 | −1.3 | 35 | 1471 | true |
| mom_12_1 liquid 1500 | +0.046 | +1.91 | 35 | 1471 | true |
| mom_12_1_resid liquid 1500 | +0.029 | +1.33 | 35 | 1471 | true |
What the checks settle
- Lagged membership — same sign as same-week panel (mildly negative); does not recreate a large positive IC. Not a clean “liquidity explosion leak manufactures +0.06” story for the panel path. (The first harness run’s +0.0575 still does not match the independent panel’s −0.017 — treat the +0.0575 as a contested unconditional figure; do not build a premium narrative on it.)
- Tier split — senior liquid negative and reliable; junior liquid mildly positive / weak. Bias and bleeder weight are stronger in the junior tier.
- Prod-universe subset — IC −0.044 / t −2.88, ~498 names/week — matches the fingerprint. Sign flip is compositional, not “the whole market regime flipped.”
- Momentum-conditional fip (the platform test) — IC −0.088 / t −4.58, reliable, ~294 winners/week. Negative sign, |IC| ≳ 0.03. This is the paper’s claim and the only version a gate could consume.
Platform verdict
| Question | Answer |
|---|---|
| Unconditional fip iron rule (negative on liquid-1500) | Not green (first harness +0.06 fails sign; panel mild neg fails magnitude) |
| Production change now? | No |
| Is fip “dead forever”? | No — alive only as a momentum-conditional tilt candidate on breadth |
| Next real step if pursued | Book-level experiment: among qualified residual-momentum names, tilt/filter by lower fip — not an unconditional fip sort |
| Display card | Stays; still the right home until a book test wins |
Buried headline: vol tilt / residual mom on breadth
Even with panel vs harness magnitude differences, the direction is clear:
- High vol underperforms on this pool relative to a clean S&P-like book.
- Production rank tilts 20% toward high volatility, validated on S&P-like names where high-vol ≈ high-beta in a bull tape. On broad Nasdaq liquid, high-vol often means lottery junk.
- If the universe ever broadens in production, re-validate the 80/20 high-vol tilt first — it can flip from mildly helpful to actively harmful.
- Raw momentum > residual on breadth (panel and first harness both show this pattern) — SPY residualization is a noisier fit for small caps; a breadth book may want a different benchmark or raw mom.
How to re-run (research branch only)
# Windows
.\.venv\Scripts\python.exe scripts\run_fip_breadth_diagnostics.py `
--research-snapshot backtest_snapshots\research.sqlite `
--prod-snapshot backtest_snapshots\prod.sqlite `
--workers 6
# macOS
python scripts/run_fip_breadth_diagnostics.py \
--research-snapshot backtest_snapshots/research.sqlite \
--prod-snapshot backtest_snapshots/prod.sqlite \
--workers 6
Bottom line
- Formal first screen: not green, no production change, fingerprint pass.
- Deeper reading: unconditional sign is a compositional tug-of-war, not a new jumpiness premium.
- The test that matters for this platform already ran: momentum-conditional fip is negative, large, and reliable on liquid breadth → fip remains a conditional research lead, not a closed door — and not a ship-ready gate input without a book experiment.