ETF-Flow Residual Check (20d) — Genuine Lead or Slow Momentum?
InconclusiveETF-Flow Residual Check (20d) — Genuine Lead or Slow Momentum?
2026-06-23 · status: inconclusive · 2.2s
Hypothesis: The scout lead etf_flow_5d → fwd_20d (IC +0.096, 3/3 years) is the only positioning claim not yet residualized. If, after orthogonalization against trailing price momentum (5d+20d) AND on non-overlapping 20d blocks, an IC >= 0.08 with CI_low > 0 remains, it is a genuine orthogonal slow lead; otherwise it is slow momentum / overlap-inflated.
Verdict: PARTIAL / TOO THIN — residualized, IC +0.126 (CI_low +0.045) pooled remains, BUT non-overlapping only +0.171 (CI [-0.231,+0.564], n=30). Effective sample too small for a deploy verdict; bear regime still missing.
Key metrics
| metric | value |
|---|---|
| IC_flow_5d_to_fwd20 | +0.1002 |
| IC_momentum5_baseline | -0.0187 |
| IC_momentum20_baseline | +0.0240 |
| IC_residual_pooled | +0.1263 |
| CI_residual_pooled | [+0.0452, +0.2121] |
| IC_flow_nonoverlap | +0.1382 |
| IC_residual_nonoverlap | +0.1706 |
| CI_residual_nonoverlap | [-0.2306, +0.5643] |
| effective_n_nonoverlap | 30 |
| r2_flow_explained_by_momentum | +0.4563 |
| ic_drop_pct_residual | -26.0303 |
| yearly_resid_ic | {2024: 0.137, 2025: 0.071, 2026: 0.251} |
1) Pooled ICs (overlapping 20d windows, n=585)
| Relationship | IC | CI_low | CI_high | p |
|---|---|---|---|---|
| flow_5d → fwd_20 (scout replication) | 0.1002 | 0.0188 | 0.1862 | 0.0153 |
| flow_5d → trail_5 (confound: flow chases price) | 0.4978 | 0.4275 | 0.5517 | 5.97e-38 |
| trail_5 → fwd_20 (momentum baseline 5d) | -0.0187 | -0.1019 | 0.072 | 0.652 |
| trail_20 → fwd_20 (momentum baseline 20d) | 0.024 | -0.0633 | 0.1115 | 0.563 |
| flow_resid → fwd_20 (orthogonal to momentum) ★ | 0.1263 | 0.0452 | 0.2121 | 0.00221 |
-
R² of flow_5d explained by trailing momentum:
45.6% -
Residualization changes IC by
-26.0%(+0.1002 → +0.1263)
2) Overlap-honest — non-overlapping 20d blocks
The overlapping sample n=585 is misleading: 20d windows overlap by ~95%. Disjoint blocks (every 20th day) → effectively n=30.
| Signal | IC_nonoverlap | CI | p | n |
|---|---|---|---|---|
| flow_5d → fwd_20 | 0.1382 | [-0.285, +0.521] | 0.467 | 30 |
| flow_resid → fwd_20 | 0.1706 | [-0.231, +0.564] | 0.367 | 30 |
3) Yearly IC (Spearman, in-sample per calendar year)
-
flow_5d → fwd_20:
{2024: 0.04, 2025: 0.091, 2026: 0.126} -
flow_resid → fwd_20:
{2024: 0.137, 2025: 0.071, 2026: 0.251}
