research: interpret history-depth MacBook harness (PARK sector residual wire-in)
Authoritative report history-depth-20260719-103315: race guard pass on deep research.sqlite. Sector residual still short-window only (no pre-2021); fip sign flips on broad deep sample; no production retune.
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
# History-depth extension (Tier-1 alpha research)
|
# History-depth extension (Tier-1 alpha research)
|
||||||
|
|
||||||
**Status:** PRE-REGISTERED — run on MacBook (heavy I/O + full harness).
|
**Status:** **RUN COMPLETE — human interpretation below.**
|
||||||
**Branch:** `research/history-depth-extension` (create from latest research stack).
|
**Branch:** `research/earnings-gap-and-sue` (MacBook commit `f6e0ca7`)
|
||||||
|
**Authoritative artifact:** `reports/history-depth-20260719-103315.json`
|
||||||
**Production impact:** none. **Do not retune any production knob on deep history.**
|
**Production impact:** none. **Do not retune any production knob on deep history.**
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -43,166 +44,139 @@ the 2018 vol shock and full 2020 crash (where the feed allows).
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## MacBook runbook
|
|
||||||
|
|
||||||
Prefer the bundled script (one entry point):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git fetch origin && git checkout research/earnings-gap-and-sue
|
|
||||||
# .env: ALPACA_* required; FMP_* if resuming earnings
|
|
||||||
# copy backtest_snapshots/prod.sqlite if not already local
|
|
||||||
|
|
||||||
chmod +x scripts/run_tier1_macbook.sh
|
|
||||||
|
|
||||||
# Default: coverage → deep rebuild → harness (+ era split)
|
|
||||||
./scripts/run_tier1_macbook.sh
|
|
||||||
|
|
||||||
# Optional variants
|
|
||||||
./scripts/run_tier1_macbook.sh --all # + earnings resume first
|
|
||||||
./scripts/run_tier1_macbook.sh --earnings-only # multi-day FMP + 2a/2b only
|
|
||||||
./scripts/run_tier1_macbook.sh --harness-only # skip rebuild
|
|
||||||
./scripts/run_tier1_macbook.sh --coverage-only
|
|
||||||
|
|
||||||
# Tunables
|
|
||||||
WORKERS=12 HISTORY_DAYS=5000 ./scripts/run_tier1_macbook.sh
|
|
||||||
./scripts/run_tier1_macbook.sh --workers 12 --fmp-limit 250
|
|
||||||
```
|
|
||||||
|
|
||||||
Then commit `reports/` + updated research docs, or copy them back to Windows.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Data provenance
|
## Data provenance
|
||||||
|
|
||||||
*(filled at run time)*
|
| check | result |
|
||||||
|
|---|---|
|
||||||
|
| Snapshot | MacBook `research.sqlite` |
|
||||||
|
| Manifest `complete` | **true** (finished 2026-07-19T08:19Z) |
|
||||||
|
| Live counts match | yes — 4655 tickers / 6,609,926 OHLCV / 4149 rank_only |
|
||||||
|
| `history_days` | 5000 |
|
||||||
|
| fetch_ok / fail | 4152 / 0 |
|
||||||
|
| Race guard | **pass** |
|
||||||
|
|
||||||
|
> **SURVIVORSHIP BIAS:** today’s constituents backfilled historically. Absolute
|
||||||
|
> Sharpe/CAGR levels on deep history are optimistic. Use **relative** signal IC
|
||||||
|
> comparisons and era stability only — not levels.
|
||||||
|
|
||||||
|
**Coverage JSON was empty in the auto-written doc** (harness-only phase after
|
||||||
|
rebuild). Manifest is the race-guard source of truth for this run.
|
||||||
|
|
||||||
|
Earlier MacBook files `history-depth-20260719-093853` … `095156` are intermediate
|
||||||
|
/ incomplete passes — **do not cite**. Only **103315** is authoritative.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Results
|
## Results (authoritative: 103315)
|
||||||
|
|
||||||
Generated: `2026-07-19T10:33:15.322673`
|
### Full-window signal IC (broad research universe, deep bars)
|
||||||
|
|
||||||
> **SURVIVORSHIP BIAS: today's constituents backfilled historically. Absolute Sharpe/CAGR levels on deep history are optimistic. Use RELATIVE signal IC comparisons and era stability only — not levels.**
|
| signal | mean_ic | t | weeks | avg_N | notes |
|
||||||
|
|
||||||
### Coverage
|
|
||||||
|
|
||||||
```json
|
|
||||||
{}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Race guard
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"manifest": {
|
|
||||||
"schema_version": 1,
|
|
||||||
"snapshot": "research.sqlite",
|
|
||||||
"snapshot_resolved": "/Users/taathde3/git/lab/signal_platform/backtest_snapshots/research.sqlite",
|
|
||||||
"complete": true,
|
|
||||||
"finished_at": "2026-07-19T08:19:02.992206+00:00",
|
|
||||||
"ticker_count": 4655,
|
|
||||||
"ohlcv_row_count": 6609926,
|
|
||||||
"rank_only_count": 4149,
|
|
||||||
"sources": {
|
|
||||||
"nasdaq_all": "nasdaq_trader",
|
|
||||||
"sp500": "wikipedia_sp500"
|
|
||||||
},
|
|
||||||
"history_days": 5000,
|
|
||||||
"min_bars": 260,
|
|
||||||
"fetch_ok": 4152,
|
|
||||||
"fetch_fail": 0,
|
|
||||||
"limit": null,
|
|
||||||
"extra": {
|
|
||||||
"prod_symbols_at_start": 506,
|
|
||||||
"pool_size": 4648,
|
|
||||||
"to_fetch": 4152
|
|
||||||
},
|
|
||||||
"live_counts": {
|
|
||||||
"ticker_count": 4655,
|
|
||||||
"ohlcv_row_count": 6609926,
|
|
||||||
"rank_only_count": 4149
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ok": true
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Signal IC (full extended window)
|
|
||||||
|
|
||||||
| signal | mean_ic | ic_t_stat | weeks | avg_N | reliable |
|
|
||||||
|---|---:|---:|---:|---:|---|
|
|---|---:|---:|---:|---:|---|
|
||||||
| high_52w | 0.1111 | 6.41 | 84 | 2280.3 | True |
|
| high_52w | **0.111** | **6.41** | 84 | 2280 | strong on deep breadth |
|
||||||
| mom_12_1 | 0.0663 | 5.11 | 83 | 2277.5 | True |
|
| mom_12_1 | **0.066** | **5.11** | 83 | 2278 | raw momentum strong |
|
||||||
| mom_12_1_sector_resid | 0.0578 | 2.34 | 35 | 497.7 | True |
|
| trend_200 | 0.055 | 4.30 | 85 | 2308 | |
|
||||||
| trend_200 | 0.0546 | 4.3 | 85 | 2308.1 | True |
|
| mom_6_1 | 0.049 | 4.91 | 88 | 2376 | |
|
||||||
| mom_6_1 | 0.0493 | 4.91 | 88 | 2375.7 | True |
|
| mom_3_1 | 0.036 | 3.58 | 90 | 2426 | |
|
||||||
| mom_3_1 | 0.0363 | 3.58 | 90 | 2425.6 | True |
|
| fip_id | **+0.027** | **3.25** | 83 | 2278 | **sign flip vs prod fingerprint** |
|
||||||
| mom_12_1_sector_demeaned | 0.034 | 1.32 | 35 | 496.7 | True |
|
| mom_12_1_resid | 0.026 | 2.21 | 83 | 2278 | market residual still + but weaker than raw |
|
||||||
| fip_id | 0.0267 | 3.25 | 83 | 2277.5 | True |
|
| reversal_1m | ~0 | 0.31 | 91 | 2443 | dead |
|
||||||
| mom_12_1_resid | 0.0256 | 2.21 | 83 | 2277.5 | True |
|
| vol_6m | **−0.123** | **−6.34** | 88 | 2376 | low-vol anomaly strong |
|
||||||
| reversal_1m | 0.003 | 0.31 | 91 | 2443.2 | True |
|
| mom_12_1_sector_resid | 0.058 | 2.34 | **35** | **498** | **not deep-sample — see caveats** |
|
||||||
| vol_6m | -0.1226 | -6.34 | 88 | 2375.7 | True |
|
| mom_12_1_sector_demeaned | 0.034 | 1.32 | **35** | **497** | same short fingerprint |
|
||||||
|
|
||||||
### Era split (diagnostic only)
|
### Era split (diagnostic only — not a tuning input)
|
||||||
|
|
||||||
#### full
|
| signal | pre-2021 IC / t / w / N | post-2021 IC / t / w / N |
|
||||||
|
|---|---|---|
|
||||||
|
| mom_12_1 | +0.041 / 2.94 / 36 / 1425 | +0.079 / 3.64 / 48 / 2913 |
|
||||||
|
| mom_12_1_resid | +0.023 / 1.68 / 36 / 1425 | +0.027 / 1.37 / 48 / 2913 |
|
||||||
|
| fip_id | +0.012 / 1.35 / 36 / 1425 | +0.037 / 2.91 / 48 / 2913 |
|
||||||
|
| vol_6m | −0.056 / −2.16 / 40 / 1461 | −0.162 / −4.94 / 48 / 3123 |
|
||||||
|
| high_52w | +0.049 / 2.0 / 36 / 1422 | +0.138 / 4.34 / 48 / 2915 |
|
||||||
|
| **sector_resid** | **absent** | 0.058 / 2.34 / 35 / 498 (short only) |
|
||||||
|
| **sector_demeaned** | **absent** | 0.034 / 1.32 / 35 / 497 (short only) |
|
||||||
|
|
||||||
| signal | mean_ic | t | weeks | N |
|
---
|
||||||
|---|---:|---:|---:|---:|
|
|
||||||
| fip_id | 0.0267 | 3.25 | 83 | 2277.5 |
|
|
||||||
| high_52w | 0.1111 | 6.41 | 84 | 2280.3 |
|
|
||||||
| mom_12_1 | 0.0663 | 5.11 | 83 | 2277.5 |
|
|
||||||
| mom_12_1_resid | 0.0256 | 2.21 | 83 | 2277.5 |
|
|
||||||
| mom_12_1_sector_demeaned | 0.034 | 1.32 | 35 | 496.7 |
|
|
||||||
| mom_12_1_sector_resid | 0.0578 | 2.34 | 35 | 497.7 |
|
|
||||||
| mom_3_1 | 0.0363 | 3.58 | 90 | 2425.6 |
|
|
||||||
| mom_6_1 | 0.0493 | 4.91 | 88 | 2375.7 |
|
|
||||||
| reversal_1m | 0.003 | 0.31 | 91 | 2443.2 |
|
|
||||||
| trend_200 | 0.0546 | 4.3 | 85 | 2308.1 |
|
|
||||||
| vol_6m | -0.1226 | -6.34 | 88 | 2375.7 |
|
|
||||||
|
|
||||||
#### pre_2021
|
## Critical caveats (must read)
|
||||||
|
|
||||||
| signal | mean_ic | t | weeks | N |
|
### 1. Sector residual did **not** get a deep-history stress test
|
||||||
|---|---:|---:|---:|---:|
|
|
||||||
| fip_id | 0.0116 | 1.35 | 36 | 1424.8 |
|
|
||||||
| high_52w | 0.0494 | 2.0 | 36 | 1422.2 |
|
|
||||||
| mom_12_1 | 0.0413 | 2.94 | 36 | 1424.8 |
|
|
||||||
| mom_12_1_resid | 0.0226 | 1.68 | 36 | 1424.8 |
|
|
||||||
| mom_3_1 | 0.0217 | 1.84 | 42 | 1480.0 |
|
|
||||||
| mom_6_1 | 0.0205 | 1.63 | 40 | 1461.2 |
|
|
||||||
| reversal_1m | 0.0019 | 0.15 | 44 | 1501.4 |
|
|
||||||
| trend_200 | 0.0322 | 2.23 | 38 | 1440.9 |
|
|
||||||
| vol_6m | -0.056 | -2.16 | 40 | 1461.2 |
|
|
||||||
|
|
||||||
#### post_2021
|
`mom_12_1_sector_resid` / `_demeaned` still show **exactly** the Task‑1 short-window
|
||||||
|
fingerprint: **35 weeks, N≈498, IC 0.0578, t 2.34**.
|
||||||
|
|
||||||
| signal | mean_ic | t | weeks | N |
|
On the same run, raw `mom_12_1` has **83 weeks, N≈2278**. So depth worked for
|
||||||
|---|---:|---:|---:|---:|
|
price-only signals, but sector residual is still limited to the **~505 labeled
|
||||||
| fip_id | 0.0366 | 2.91 | 48 | 2913.0 |
|
prod names × short factor calendar** (sector map only covers prod; and/or sector
|
||||||
| high_52w | 0.1375 | 4.34 | 48 | 2914.5 |
|
ETF / two-factor path did not extend usable residual weeks).
|
||||||
| mom_12_1 | 0.0791 | 3.64 | 48 | 2913.0 |
|
|
||||||
| mom_12_1_resid | 0.0265 | 1.37 | 48 | 2913.0 |
|
|
||||||
| mom_12_1_sector_demeaned | 0.034 | 1.32 | 35 | 496.7 |
|
|
||||||
| mom_12_1_sector_resid | 0.0578 | 2.34 | 35 | 497.7 |
|
|
||||||
| mom_3_1 | 0.0291 | 1.54 | 48 | 3234.2 |
|
|
||||||
| mom_6_1 | 0.0779 | 4.36 | 48 | 3122.6 |
|
|
||||||
| reversal_1m | -0.0126 | -0.72 | 48 | 3315.8 |
|
|
||||||
| trend_200 | 0.0585 | 2.68 | 48 | 3001.5 |
|
|
||||||
| vol_6m | -0.1623 | -4.94 | 48 | 3122.6 |
|
|
||||||
|
|
||||||
|
**Pre-registered rule:** “Sector residual collapses pre-2021 → PARK Task 1
|
||||||
|
wire-in.” Pre-2021 sector residual is **absent** from the era table. That is a
|
||||||
|
**PARK**, not a confirmation of the short-window PROMOTE.
|
||||||
|
|
||||||
## Verdict
|
Do **not** claim “sector residual beats market residual on deep history” from
|
||||||
|
this table — the two rows are **not the same cross-section or window count**.
|
||||||
|
|
||||||
**PENDING_HUMAN**
|
### 2. `fip_id` sign flips vs production fingerprint
|
||||||
|
|
||||||
Harness complete — human interprets relative IC / era stability. No production retune from this artifact.
|
| sample | fip mean IC | t |
|
||||||
|
|---|---:|---:|
|
||||||
|
| Prod 505, ~5y (fingerprint) | **−0.045** | −2.91 |
|
||||||
|
| Research breadth, deep (this run) | **+0.027** | +3.25 |
|
||||||
|
|
||||||
|
This does **not** authorize resurrecting unconditional FIP as a book filter. It
|
||||||
|
confirms earlier Phase‑B caution: FIP edge is **universe- and sample-dependent**.
|
||||||
|
Production display card can stay context-only. Nested lookbacks still not OOS.
|
||||||
|
|
||||||
|
### 3. Market residual vs raw momentum on deep breadth
|
||||||
|
|
||||||
|
On deep broad IC, **raw 12‑1 (0.066 / t 5.1) ≫ market residual (0.026 / t 2.2)**.
|
||||||
|
That does **not** by itself overturn production residual ranking (book A/B was
|
||||||
|
on 505 + GTL gate, not pure factor IC), but it is a yellow flag for “residual is
|
||||||
|
always the better rank key” stories on broad history. **No auto-retune.**
|
||||||
|
|
||||||
|
### 4. Low-vol anomaly is the cleanest deep-history result
|
||||||
|
|
||||||
|
`vol_6m` IC −0.12 / t −6.3 full; stronger post-2021. Consistent sign across eras.
|
||||||
|
Production already blends **high**-vol (not low-vol) into the 80/20 rank — this
|
||||||
|
report does not change that without a separate A/B. Flag for human awareness only.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verdicts (vs pre-registration)
|
||||||
|
|
||||||
|
| question | verdict |
|
||||||
|
|---|---|
|
||||||
|
| Task 1 sector residual wire-in | **PARK** — no pre-2021 sector residual; deep-sample IC not established; short-window PROMOTE stays “human design only,” **not strengthened** by this run |
|
||||||
|
| Sector demean | still **DEAD** for promotion (t 1.32, short only) |
|
||||||
|
| SUE | **not re-scored here** (no `sue_latest` in harness table) — leave Task 2 **PARK** until full earnings backfill |
|
||||||
|
| fip unconditional book filter | remains **rejected / parked** despite sign flip on broad deep sample |
|
||||||
|
| Production residual / 80/20 / trail knobs | **no retune** from this report |
|
||||||
|
| Overall Task 3 | **COMPLETE as diagnostic** — payload is relative IC + caveats above |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## What a human must decide next
|
## What a human must decide next
|
||||||
|
|
||||||
- Compare sector residual vs market residual across eras.
|
1. **Sector residual:** keep research-only until either
|
||||||
- If pre-2021 IC collapses, park Task 1 wire-in.
|
(a) sector ETF + sector map cover the full deep window **and** IC is re-run
|
||||||
- Do not retune production knobs on deep history levels.
|
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
|
||||||
|
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.
|
||||||
|
|
||||||
Artifacts: `reports/history-depth-20260719-103315.json`
|
---
|
||||||
|
|
||||||
|
## Artifacts
|
||||||
|
|
||||||
|
| file | role |
|
||||||
|
|---|---|
|
||||||
|
| `reports/history-depth-20260719-103315.json` | **authoritative** |
|
||||||
|
| `reports/history-depth-20260719-103315.md` | companion dump |
|
||||||
|
| `reports/history-depth-20260719-093853` … `095156` | **ignore** (partial) |
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
# History-depth extension (Tier-1 alpha research)
|
# History-depth extension (Tier-1 alpha research)
|
||||||
|
|
||||||
**Status:** PRE-REGISTERED — run on MacBook (heavy I/O + full harness).
|
**Status:** **RUN COMPLETE — human interpretation below.**
|
||||||
**Branch:** `research/history-depth-extension` (create from latest research stack).
|
**Branch:** `research/earnings-gap-and-sue` (MacBook commit `f6e0ca7`)
|
||||||
|
**Authoritative artifact:** `reports/history-depth-20260719-103315.json`
|
||||||
**Production impact:** none. **Do not retune any production knob on deep history.**
|
**Production impact:** none. **Do not retune any production knob on deep history.**
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -43,166 +44,139 @@ the 2018 vol shock and full 2020 crash (where the feed allows).
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## MacBook runbook
|
|
||||||
|
|
||||||
Prefer the bundled script (one entry point):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git fetch origin && git checkout research/earnings-gap-and-sue
|
|
||||||
# .env: ALPACA_* required; FMP_* if resuming earnings
|
|
||||||
# copy backtest_snapshots/prod.sqlite if not already local
|
|
||||||
|
|
||||||
chmod +x scripts/run_tier1_macbook.sh
|
|
||||||
|
|
||||||
# Default: coverage → deep rebuild → harness (+ era split)
|
|
||||||
./scripts/run_tier1_macbook.sh
|
|
||||||
|
|
||||||
# Optional variants
|
|
||||||
./scripts/run_tier1_macbook.sh --all # + earnings resume first
|
|
||||||
./scripts/run_tier1_macbook.sh --earnings-only # multi-day FMP + 2a/2b only
|
|
||||||
./scripts/run_tier1_macbook.sh --harness-only # skip rebuild
|
|
||||||
./scripts/run_tier1_macbook.sh --coverage-only
|
|
||||||
|
|
||||||
# Tunables
|
|
||||||
WORKERS=12 HISTORY_DAYS=5000 ./scripts/run_tier1_macbook.sh
|
|
||||||
./scripts/run_tier1_macbook.sh --workers 12 --fmp-limit 250
|
|
||||||
```
|
|
||||||
|
|
||||||
Then commit `reports/` + updated research docs, or copy them back to Windows.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Data provenance
|
## Data provenance
|
||||||
|
|
||||||
*(filled at run time)*
|
| check | result |
|
||||||
|
|---|---|
|
||||||
|
| Snapshot | MacBook `research.sqlite` |
|
||||||
|
| Manifest `complete` | **true** (finished 2026-07-19T08:19Z) |
|
||||||
|
| Live counts match | yes — 4655 tickers / 6,609,926 OHLCV / 4149 rank_only |
|
||||||
|
| `history_days` | 5000 |
|
||||||
|
| fetch_ok / fail | 4152 / 0 |
|
||||||
|
| Race guard | **pass** |
|
||||||
|
|
||||||
|
> **SURVIVORSHIP BIAS:** today’s constituents backfilled historically. Absolute
|
||||||
|
> Sharpe/CAGR levels on deep history are optimistic. Use **relative** signal IC
|
||||||
|
> comparisons and era stability only — not levels.
|
||||||
|
|
||||||
|
**Coverage JSON was empty in the auto-written doc** (harness-only phase after
|
||||||
|
rebuild). Manifest is the race-guard source of truth for this run.
|
||||||
|
|
||||||
|
Earlier MacBook files `history-depth-20260719-093853` … `095156` are intermediate
|
||||||
|
/ incomplete passes — **do not cite**. Only **103315** is authoritative.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Results
|
## Results (authoritative: 103315)
|
||||||
|
|
||||||
Generated: `2026-07-19T10:33:15.322673`
|
### Full-window signal IC (broad research universe, deep bars)
|
||||||
|
|
||||||
> **SURVIVORSHIP BIAS: today's constituents backfilled historically. Absolute Sharpe/CAGR levels on deep history are optimistic. Use RELATIVE signal IC comparisons and era stability only — not levels.**
|
| signal | mean_ic | t | weeks | avg_N | notes |
|
||||||
|
|
||||||
### Coverage
|
|
||||||
|
|
||||||
```json
|
|
||||||
{}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Race guard
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"manifest": {
|
|
||||||
"schema_version": 1,
|
|
||||||
"snapshot": "research.sqlite",
|
|
||||||
"snapshot_resolved": "/Users/taathde3/git/lab/signal_platform/backtest_snapshots/research.sqlite",
|
|
||||||
"complete": true,
|
|
||||||
"finished_at": "2026-07-19T08:19:02.992206+00:00",
|
|
||||||
"ticker_count": 4655,
|
|
||||||
"ohlcv_row_count": 6609926,
|
|
||||||
"rank_only_count": 4149,
|
|
||||||
"sources": {
|
|
||||||
"nasdaq_all": "nasdaq_trader",
|
|
||||||
"sp500": "wikipedia_sp500"
|
|
||||||
},
|
|
||||||
"history_days": 5000,
|
|
||||||
"min_bars": 260,
|
|
||||||
"fetch_ok": 4152,
|
|
||||||
"fetch_fail": 0,
|
|
||||||
"limit": null,
|
|
||||||
"extra": {
|
|
||||||
"prod_symbols_at_start": 506,
|
|
||||||
"pool_size": 4648,
|
|
||||||
"to_fetch": 4152
|
|
||||||
},
|
|
||||||
"live_counts": {
|
|
||||||
"ticker_count": 4655,
|
|
||||||
"ohlcv_row_count": 6609926,
|
|
||||||
"rank_only_count": 4149
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ok": true
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Signal IC (full extended window)
|
|
||||||
|
|
||||||
| signal | mean_ic | ic_t_stat | weeks | avg_N | reliable |
|
|
||||||
|---|---:|---:|---:|---:|---|
|
|---|---:|---:|---:|---:|---|
|
||||||
| high_52w | 0.1111 | 6.41 | 84 | 2280.3 | True |
|
| high_52w | **0.111** | **6.41** | 84 | 2280 | strong on deep breadth |
|
||||||
| mom_12_1 | 0.0663 | 5.11 | 83 | 2277.5 | True |
|
| mom_12_1 | **0.066** | **5.11** | 83 | 2278 | raw momentum strong |
|
||||||
| mom_12_1_sector_resid | 0.0578 | 2.34 | 35 | 497.7 | True |
|
| trend_200 | 0.055 | 4.30 | 85 | 2308 | |
|
||||||
| trend_200 | 0.0546 | 4.3 | 85 | 2308.1 | True |
|
| mom_6_1 | 0.049 | 4.91 | 88 | 2376 | |
|
||||||
| mom_6_1 | 0.0493 | 4.91 | 88 | 2375.7 | True |
|
| mom_3_1 | 0.036 | 3.58 | 90 | 2426 | |
|
||||||
| mom_3_1 | 0.0363 | 3.58 | 90 | 2425.6 | True |
|
| fip_id | **+0.027** | **3.25** | 83 | 2278 | **sign flip vs prod fingerprint** |
|
||||||
| mom_12_1_sector_demeaned | 0.034 | 1.32 | 35 | 496.7 | True |
|
| mom_12_1_resid | 0.026 | 2.21 | 83 | 2278 | market residual still + but weaker than raw |
|
||||||
| fip_id | 0.0267 | 3.25 | 83 | 2277.5 | True |
|
| reversal_1m | ~0 | 0.31 | 91 | 2443 | dead |
|
||||||
| mom_12_1_resid | 0.0256 | 2.21 | 83 | 2277.5 | True |
|
| vol_6m | **−0.123** | **−6.34** | 88 | 2376 | low-vol anomaly strong |
|
||||||
| reversal_1m | 0.003 | 0.31 | 91 | 2443.2 | True |
|
| mom_12_1_sector_resid | 0.058 | 2.34 | **35** | **498** | **not deep-sample — see caveats** |
|
||||||
| vol_6m | -0.1226 | -6.34 | 88 | 2375.7 | True |
|
| mom_12_1_sector_demeaned | 0.034 | 1.32 | **35** | **497** | same short fingerprint |
|
||||||
|
|
||||||
### Era split (diagnostic only)
|
### Era split (diagnostic only — not a tuning input)
|
||||||
|
|
||||||
#### full
|
| signal | pre-2021 IC / t / w / N | post-2021 IC / t / w / N |
|
||||||
|
|---|---|---|
|
||||||
|
| mom_12_1 | +0.041 / 2.94 / 36 / 1425 | +0.079 / 3.64 / 48 / 2913 |
|
||||||
|
| mom_12_1_resid | +0.023 / 1.68 / 36 / 1425 | +0.027 / 1.37 / 48 / 2913 |
|
||||||
|
| fip_id | +0.012 / 1.35 / 36 / 1425 | +0.037 / 2.91 / 48 / 2913 |
|
||||||
|
| vol_6m | −0.056 / −2.16 / 40 / 1461 | −0.162 / −4.94 / 48 / 3123 |
|
||||||
|
| high_52w | +0.049 / 2.0 / 36 / 1422 | +0.138 / 4.34 / 48 / 2915 |
|
||||||
|
| **sector_resid** | **absent** | 0.058 / 2.34 / 35 / 498 (short only) |
|
||||||
|
| **sector_demeaned** | **absent** | 0.034 / 1.32 / 35 / 497 (short only) |
|
||||||
|
|
||||||
| signal | mean_ic | t | weeks | N |
|
---
|
||||||
|---|---:|---:|---:|---:|
|
|
||||||
| fip_id | 0.0267 | 3.25 | 83 | 2277.5 |
|
|
||||||
| high_52w | 0.1111 | 6.41 | 84 | 2280.3 |
|
|
||||||
| mom_12_1 | 0.0663 | 5.11 | 83 | 2277.5 |
|
|
||||||
| mom_12_1_resid | 0.0256 | 2.21 | 83 | 2277.5 |
|
|
||||||
| mom_12_1_sector_demeaned | 0.034 | 1.32 | 35 | 496.7 |
|
|
||||||
| mom_12_1_sector_resid | 0.0578 | 2.34 | 35 | 497.7 |
|
|
||||||
| mom_3_1 | 0.0363 | 3.58 | 90 | 2425.6 |
|
|
||||||
| mom_6_1 | 0.0493 | 4.91 | 88 | 2375.7 |
|
|
||||||
| reversal_1m | 0.003 | 0.31 | 91 | 2443.2 |
|
|
||||||
| trend_200 | 0.0546 | 4.3 | 85 | 2308.1 |
|
|
||||||
| vol_6m | -0.1226 | -6.34 | 88 | 2375.7 |
|
|
||||||
|
|
||||||
#### pre_2021
|
## Critical caveats (must read)
|
||||||
|
|
||||||
| signal | mean_ic | t | weeks | N |
|
### 1. Sector residual did **not** get a deep-history stress test
|
||||||
|---|---:|---:|---:|---:|
|
|
||||||
| fip_id | 0.0116 | 1.35 | 36 | 1424.8 |
|
|
||||||
| high_52w | 0.0494 | 2.0 | 36 | 1422.2 |
|
|
||||||
| mom_12_1 | 0.0413 | 2.94 | 36 | 1424.8 |
|
|
||||||
| mom_12_1_resid | 0.0226 | 1.68 | 36 | 1424.8 |
|
|
||||||
| mom_3_1 | 0.0217 | 1.84 | 42 | 1480.0 |
|
|
||||||
| mom_6_1 | 0.0205 | 1.63 | 40 | 1461.2 |
|
|
||||||
| reversal_1m | 0.0019 | 0.15 | 44 | 1501.4 |
|
|
||||||
| trend_200 | 0.0322 | 2.23 | 38 | 1440.9 |
|
|
||||||
| vol_6m | -0.056 | -2.16 | 40 | 1461.2 |
|
|
||||||
|
|
||||||
#### post_2021
|
`mom_12_1_sector_resid` / `_demeaned` still show **exactly** the Task‑1 short-window
|
||||||
|
fingerprint: **35 weeks, N≈498, IC 0.0578, t 2.34**.
|
||||||
|
|
||||||
| signal | mean_ic | t | weeks | N |
|
On the same run, raw `mom_12_1` has **83 weeks, N≈2278**. So depth worked for
|
||||||
|---|---:|---:|---:|---:|
|
price-only signals, but sector residual is still limited to the **~505 labeled
|
||||||
| fip_id | 0.0366 | 2.91 | 48 | 2913.0 |
|
prod names × short factor calendar** (sector map only covers prod; and/or sector
|
||||||
| high_52w | 0.1375 | 4.34 | 48 | 2914.5 |
|
ETF / two-factor path did not extend usable residual weeks).
|
||||||
| mom_12_1 | 0.0791 | 3.64 | 48 | 2913.0 |
|
|
||||||
| mom_12_1_resid | 0.0265 | 1.37 | 48 | 2913.0 |
|
|
||||||
| mom_12_1_sector_demeaned | 0.034 | 1.32 | 35 | 496.7 |
|
|
||||||
| mom_12_1_sector_resid | 0.0578 | 2.34 | 35 | 497.7 |
|
|
||||||
| mom_3_1 | 0.0291 | 1.54 | 48 | 3234.2 |
|
|
||||||
| mom_6_1 | 0.0779 | 4.36 | 48 | 3122.6 |
|
|
||||||
| reversal_1m | -0.0126 | -0.72 | 48 | 3315.8 |
|
|
||||||
| trend_200 | 0.0585 | 2.68 | 48 | 3001.5 |
|
|
||||||
| vol_6m | -0.1623 | -4.94 | 48 | 3122.6 |
|
|
||||||
|
|
||||||
|
**Pre-registered rule:** “Sector residual collapses pre-2021 → PARK Task 1
|
||||||
|
wire-in.” Pre-2021 sector residual is **absent** from the era table. That is a
|
||||||
|
**PARK**, not a confirmation of the short-window PROMOTE.
|
||||||
|
|
||||||
## Verdict
|
Do **not** claim “sector residual beats market residual on deep history” from
|
||||||
|
this table — the two rows are **not the same cross-section or window count**.
|
||||||
|
|
||||||
**PENDING_HUMAN**
|
### 2. `fip_id` sign flips vs production fingerprint
|
||||||
|
|
||||||
Harness complete — human interprets relative IC / era stability. No production retune from this artifact.
|
| sample | fip mean IC | t |
|
||||||
|
|---|---:|---:|
|
||||||
|
| Prod 505, ~5y (fingerprint) | **−0.045** | −2.91 |
|
||||||
|
| Research breadth, deep (this run) | **+0.027** | +3.25 |
|
||||||
|
|
||||||
|
This does **not** authorize resurrecting unconditional FIP as a book filter. It
|
||||||
|
confirms earlier Phase‑B caution: FIP edge is **universe- and sample-dependent**.
|
||||||
|
Production display card can stay context-only. Nested lookbacks still not OOS.
|
||||||
|
|
||||||
|
### 3. Market residual vs raw momentum on deep breadth
|
||||||
|
|
||||||
|
On deep broad IC, **raw 12‑1 (0.066 / t 5.1) ≫ market residual (0.026 / t 2.2)**.
|
||||||
|
That does **not** by itself overturn production residual ranking (book A/B was
|
||||||
|
on 505 + GTL gate, not pure factor IC), but it is a yellow flag for “residual is
|
||||||
|
always the better rank key” stories on broad history. **No auto-retune.**
|
||||||
|
|
||||||
|
### 4. Low-vol anomaly is the cleanest deep-history result
|
||||||
|
|
||||||
|
`vol_6m` IC −0.12 / t −6.3 full; stronger post-2021. Consistent sign across eras.
|
||||||
|
Production already blends **high**-vol (not low-vol) into the 80/20 rank — this
|
||||||
|
report does not change that without a separate A/B. Flag for human awareness only.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verdicts (vs pre-registration)
|
||||||
|
|
||||||
|
| question | verdict |
|
||||||
|
|---|---|
|
||||||
|
| Task 1 sector residual wire-in | **PARK** — no pre-2021 sector residual; deep-sample IC not established; short-window PROMOTE stays “human design only,” **not strengthened** by this run |
|
||||||
|
| Sector demean | still **DEAD** for promotion (t 1.32, short only) |
|
||||||
|
| SUE | **not re-scored here** (no `sue_latest` in harness table) — leave Task 2 **PARK** until full earnings backfill |
|
||||||
|
| fip unconditional book filter | remains **rejected / parked** despite sign flip on broad deep sample |
|
||||||
|
| Production residual / 80/20 / trail knobs | **no retune** from this report |
|
||||||
|
| Overall Task 3 | **COMPLETE as diagnostic** — payload is relative IC + caveats above |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## What a human must decide next
|
## What a human must decide next
|
||||||
|
|
||||||
- Compare sector residual vs market residual across eras.
|
1. **Sector residual:** keep research-only until either
|
||||||
- If pre-2021 IC collapses, park Task 1 wire-in.
|
(a) sector ETF + sector map cover the full deep window **and** IC is re-run
|
||||||
- Do not retune production knobs on deep history levels.
|
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
|
||||||
|
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.
|
||||||
|
|
||||||
Artifacts: `reports/history-depth-20260719-103315.json`
|
---
|
||||||
|
|
||||||
|
## Artifacts
|
||||||
|
|
||||||
|
| file | role |
|
||||||
|
|---|---|
|
||||||
|
| `reports/history-depth-20260719-103315.json` | **authoritative** |
|
||||||
|
| `reports/history-depth-20260719-103315.md` | companion dump |
|
||||||
|
| `reports/history-depth-20260719-093853` … `095156` | **ignore** (partial) |
|
||||||
|
|||||||
Reference in New Issue
Block a user