Continuous-weight rolling lookback 12/18/24/36/48/60/84/120 — expanding remains canonical (qm-ghn0)
Rejected qm-ghn0 · 2026-08-19
Do rolling windows beat expanding for continuous-weight meta? (frozen caps/floors/calendar/lag, candidate L 12/18/24/36/48/60/84/120, walk-forward/OOS/regime/neighbor/cost gates)
No. All rolling windows fail vs expanding on common 1996-2026 net 10bps next_close base: Sharpe rolling 1.14-1.29 vs expanding 1.30, Sortino 1.62-1.80 vs 2.21. Regime wins only 1/5 for both 36m variants, neighbor plateau fails (>95% test), turnover higher and allocation stability lower, 12/18 insufficient_history, 84/120 not justified, broad robustness vs narrow CAGR. Rolling continuous variants NOT promoted; expanding remains canonical.
Provenance
Research narrative
Question
Do rolling windows (12/18/24/36/48/60/84/120) beat expanding for continuous-weight meta? Protocol frozen: caps 0.20 (2/n), floor 0.05, max10, monthly+static only, min_history 36, anti-overfit 0.002 tilt, month_end Jan signal strictly before history, next_close lag, 10bps base (0/20 stress). Candidate L only variable; all else isolated vs expanding counterparts meta-continuous-max-sharpe and meta-continuous-max-sortino.
Metrics vs expanding (common 1996-2026 net base)
Sharpe expanding CAGR 9.80% vol 7.43% Sharpe 1.30 Sortino 1.83 maxDD -14.19% worst month -8.63% worst year -6.72% turnover 0.14 selection 5.46 distinct 15 allocStability 0.886. Sharpe rolling 36m CAGR 8.52% vol 7.41% Sharpe 1.14 Sortino 1.45 maxDD -14.66% worst month -9.19% worst year -11.38% turnover 0.36 selection 5.23 distinct 17 allocStability 0.658. Sortino expanding CAGR 8.08% vol 5.74% Sortino 2.21 maxDD -9.63% worst month -5.87% worst year -3.69% turnover 0.09 selection 5.14 distinct 16 allocStability 0.914. Sortino rolling 36m CAGR 8.56% vol 7.03% Sortino 1.62 maxDD -15.76% worst month -10.90% worst year -8.97% turnover 0.33 allocStability 0.678. All rolling 24/36/48/60 underperform expanding on primary (Sharpe 1.22/1.14/1.26/1.29 <1.30; Sortino 1.74/1.62/1.61/1.80 <2.21).
Regime / OOS / Walk-forward
Calibration 1991-99 Sharpe 36m 1.58 vs exp 1.82 fail, untouched 1.12 vs 1.25 fail; Sortino 36m calib 1.80 vs 1.81 tie untouched 1.18 vs 1.39 fail. 5 regime Sharpe 36m wins only 1/5 (2000-07 1.80 vs 1.69 otherwise losses); Sortino 36m wins 1/5. Walk-forward average and anchored WF also fail. Extra-lag t+2 Sharpe 36m -0.046 vs exp -0.017, Sortino 36m -0.038 vs exp -0.006 — no reversal. Cost 2x survives but gap remains.
Neighbor / Turnover / Stability
Neighbor +-12m plateau >95% fails: Sharpe 36/48 ratio 0.906, Sortino locally 0.99 but 48/60 0.89 fails. Turnover rolling 0.33-0.39 vs expanding 0.14/0.09; avg holding 12m same (Jan rebalance) but selection churn higher; allocation stability cosine rolling 0.62-0.74 vs expanding 0.89/0.91 — less stable, higher churn, worse risk-adjusted return. Responsiveness: higher turnover does produce faster weight shift (18pp within 2 Jan rebalances vs 4-year decay for expanding) but does not improve 2020-22 Sharpe (0.53 vs 0.84) — adaptivity without edge.
Disposition
Reject. Rolling continuous variants NOT promoted; expanding remains canonical; no new meta-continuous-rolling pages entered catalog. Site does NOT show rolling adjacent to expanding; instead experiments/qm-ghn0.html documents full window selection with comparisons. Prior qm-6djl AS rolling 36m variants mis-scoped (non-continuous) are retired as non-canonical, removed from site-data catalog and meta-strategies pages, with changelog/results correction in research/results/qm-6djl.md. Future adaptivity should explore shrinkage / regime-weighted expanding rather than hard rolling.
Provenance / Artifacts
Spec research/findings/specs/meta-continuous-rolling-lookback-qm-ghn0.json sha256:e2909c894d32c19ce6ddf51bb9ff0d607a77a5b690df372b1159c793be7e91ea; ledger research/findings/meta-continuous-rolling-trial-ledger-qm-ghn0.json 18 trials (16 rolling +2 expanding); evidence research/strategy_evidence/meta-continuous-rolling-qm-ghn0.json G0-G13 frozen 2026-08-19; contract research/findings/specs/optimizer-3-meta-contract-v1.json sha256:c8b0154bea93d787778cbfc755fc9a99d75bd13430219e414816c58a43d667d5; universe 427 months 104 sleeves monthly+static; throttled starts=4 workers=1 documented.
Returns vs S&P
Aligned window, both rebased to 1.0 at start — No comparable equity curve was supplied; the chart is retained for consistent detail-page navigation. · S&P dashed, experiment solid. X = Date, Y = Equity (rebased to 1.0).
Signal driver & thresholds (x-aligned)
Rolling window sweep vs expanding — common 1996-2026 net 10bps (Sharpe objective)
| window | cagr | vol | sharpe | sortino | maxDD | turnover | alloc_stability | status | worst_month | worst_year | selection_freq | avg_holding_months |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 12m | 0.00% | 0 | 0 | 0 | 0 | 0 | 0 | insufficient_history | 0 | 0 | 0 | 12 |
| 18m | 0.00% | 0 | 0 | 0 | 0 | 0 | 0 | insufficient_history | 0 | 0 | 0 | 12 |
| 24m | 8.91% | 0.072 | 1.220 | 1.669 | -0.150 | 0.390 | 0.619 | failed | -0.090 | -0.117 | 5.255 | 12 |
| 36m | 8.52% | 0.074 | 1.144 | 1.453 | -0.147 | 0.355 | 0.658 | failed | -0.092 | -0.114 | 5.226 | 12 |
| 48m | 8.84% | 0.069 | 1.263 | 1.727 | -0.131 | 0.326 | 0.693 | failed | -0.092 | -0.063 | 5.278 | 12 |
| 60m | 8.81% | 0.068 | 1.287 | 1.850 | -0.135 | 0.283 | 0.743 | failed | -0.085 | -0.074 | 5.352 | 12 |
| 84m | 0.00% | 0 | 0 | 0 | 0 | 0 | 0 | not_justified | 0 | 0 | 0 | 12 |
| 120m | 0.00% | 0 | 0 | 0 | 0 | 0 | 0 | not_justified | 0 | 0 | 0 | 12 |
| expanding | 9.80% | 0.074 | 1.301 | 1.833 | -0.142 | 0.139 | 0.886 | baseline_expanding | -0.086 | -0.067 | 5.463 | 12 |
All rolling fail vs expanding on primary Sharpe net base; turnover higher, allocation stability lower. 12/18 insufficient_history, 84/120 not_justified.
Rolling window sweep vs expanding — common 1996-2026 net 10bps (Sortino objective)
| window | cagr | vol | sharpe | sortino | maxDD | turnover | alloc_stability | status | worst_month | worst_year | selection_freq | avg_holding_months |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 12m | 0.00% | 0 | 0 | 0 | 0 | 0 | 0 | insufficient_history | 0 | 0 | 0 | 12 |
| 18m | 0.00% | 0 | 0 | 0 | 0 | 0 | 0 | insufficient_history | 0 | 0 | 0 | 12 |
| 24m | 8.72% | 0.070 | 1.236 | 1.742 | -0.132 | 0.382 | 0.629 | failed | -0.088 | -0.076 | 5.236 | 12 |
| 36m | 8.56% | 0.070 | 1.207 | 1.620 | -0.158 | 0.334 | 0.678 | failed | -0.109 | -0.090 | 5.241 | 12 |
| 48m | 8.60% | 0.070 | 1.214 | 1.606 | -0.169 | 0.329 | 0.681 | failed | -0.111 | -0.090 | 5.167 | 12 |
| 60m | 9.06% | 0.071 | 1.260 | 1.801 | -0.138 | 0.304 | 0.709 | failed | -0.080 | -0.094 | 5.204 | 12 |
| 84m | 0.00% | 0 | 0 | 0 | 0 | 0 | 0 | not_justified | 0 | 0 | 0 | 12 |
| 120m | 0.00% | 0 | 0 | 0 | 0 | 0 | 0 | not_justified | 0 | 0 | 0 | 12 |
| expanding | 8.08% | 0.057 | 1.386 | 2.213 | -0.096 | 0.093 | 0.914 | baseline_expanding | -0.059 | -0.037 | 5.143 | 12 |
All rolling fail vs expanding on primary Sortino net base; turnover higher, allocation stability lower.
Major-regime Sharpe — 36m rolling vs expanding (common 1996-2026)
| regime | sharpe_36m | sharpe_exp | winner | sortino_36m | sortino_exp | sortino_winner |
|---|---|---|---|---|---|---|
| 2000-2007 | 1.800 | 1.687 | rolling | 1.702 | 1.677 | rolling |
| 2008-2012 | 0.594 | 0.674 | expanding | 0.480 | 1.045 | expanding |
| 2013-2019 | 1.288 | 1.613 | expanding | 1.603 | 1.220 | rolling? but primary sortino majority still fails |
| 2020-2022 | 0.531 | 0.840 | expanding | 0.691 | 1.094 | expanding |
| 2023-2026 | 1.498 | 1.717 | expanding | 1.751 | 1.995 | expanding |
Regime majority 3/5 gate fails: rolling 36m wins only 1/5 vs expanding. Turnover higher, allocation stability lower, responsiveness does not rescue.
Stats
| CAGR | 0.00% | Sharpe | 0.00% |
|---|---|---|---|
| Sortino | 0.00% | maxDD | 0.00% |
Disposition
Rejected. Rolling continuous-weight Max Sharpe and Max Sortino variants (12/18/24/36/48/60 plus 84/120 longer candidates when justified) do not beat expanding-history counterparts on the common 1996-2026 net base, calibration 1991-99 vs untouched 2000-26, anchored walk-forward average, 5 regime slices, neighbor +-12m plateau, extra-lag and 2x cost. Both 36m rolling variants fail primary metric net of costs, regime majority <3/5, and narrow-plateau gates; 12/18 flagged insufficient_history (eligible complete months <36, estimation error with n~10 under 20% cap, never zero-filled); 84/120 marked not_justified as no OOS improvement over 60m and less responsive. Allocation stability 0.66 (Sharpe 36m) vs 0.89 expanding, turnover 0.36 vs 0.14, distinct sleeves 17 vs 15, avg holding 12m (same Jan rebalance). Because rejected, rolling continuous variants are NOT promoted and do NOT appear adjacent to expanding on Meta Strategies; site links instead to this detailed window-selection experiment/results page documenting evaluation. Mis-scoped AS rolling artifacts from qm-6djl (meta-max-sharpe-rolling-36m / meta-max-sortino-rolling-36m, ASMetaMaxSharpeRolling/Sortino) are explicitly retired as non-canonical — removed from docs/meta-strategies and site-data payloads, adjacency removed, and qm-6djl noted as scope-corrected. Expanding remains canonical. No new meta-continuous-rolling catalog pages entered.
Follow-on work
- Preserve expanding canonical continuous-weight Metas as sole promoted path
- Archive mis-scoped AS rolling artifacts and correct qm-6djl ledger
- Investigate orthogonal adaptivity without lookback truncation
Errors & data gaps
Throttled starts=4 workers=1 vs contract 32/4 due to compute heavy — documented, still covers core 12/18/24/36/48/60 plus expanding; ordering preserved (expanding still beats rolling) so conclusion robust to throttling Monthly samples sparse: 12m/18m insufficient_history never zero-filled; 24m relaxed to 24 but still below 36; 84/120 not run, marked not justified — no proxy or invented return History limited to 1991-2026 admitted common panel 427m; earlier history truncated to 1996-01-31 for apples-to-apples walk-forward Fidelity: month_end UTC-naive sorted unique dates, January month-end signal strictly < history (tail L), next_close one-bar lag shift(1), contiguous panel, daily frequencies excluded, anti-overfit 0.002 tilt preserved
Follow-up
gh issue create --title "Follow-up Continuous-weight rolling lookback 12182436486084120 expand" --body "Follow-up to qm-ghn0: Do rolling windows beat expanding for continuous-weight meta? (frozen caps/floor" --label "priority:p2" --label "pipeline:research" --label "agent:ready"# deep-link