SectorEtfCrossSectionalMomentumRotationUseq
Hypotheses
US Sector-ETF Cross-Sectional Momentum Rotation with Absolute-Momentum Cash Escape (11 SPDR Sectors, Monthly Rebalance, Daily Bars, Long-Only Breadth, USEQ)
Hypotheses
A LONG-ONLY, MULTI-INSTRUMENT, cross-sectional momentum rotation across the 11 S&P sector SPDR ETFs (XLK, XLF, XLE, XLV, XLY, XLP, XLI, XLB, XLU, XLRE, XLC), traded on the commission-free USEQ venue on 1-DAY bars. This is a DELIBERATE mechanism/asset-class pivot away from the flagged AAVE dual-timeframe crypto momentum-confluence idea (which died overfit, similarity 0.865) and away from the entire saturated single-instrument crypto trend family (L91/L92). Instead of one high-vol crypto symbol, the edge here is BREADTH: ranking a wide, economically-distinct cross-section and holding only the strongest names. This directly addresses why the 25-name beta-neutral residual-momentum book failed (its small, beta-stripped cross-section collapsed the quintile spread, per the 2026-09-07 UseqResidualMomentum abandon) — sector SPDRs are the classic momentum cross-section with a demonstrably wide and persistent leader/laggard spread, and this is a RAW (not beta-neutralized) long-only tilt, so the spread is not stripped away. An absolute-momentum overlay (rotate to a cash/treasury proxy when even the leaders are negative) prevents the strategy from being fully invested through bear markets — the failure mode of naive relative-momentum. Decades of split-adjusted daily history make this the most robustly walk-forward-validatable family in the factory. This is NOT a USEQ classical-anomaly port (L74 covers calendar/seasonality/dual-TF-trend/sector-reversion/staples-pairs) — it is cross-sectional relative-strength breadth, the one equity archetype the prompt lists first and that recent runs (CrossAssetDefensiveDualMomentumEtfRotation, MacroThreeAssetMomentumRotation) show surviving into optimization.
Hypotheses
Iteration 2 fixes the reported failure (only ~8 of 27 available years were tested) using the preferred option (b), which also keeps the config's instrument set identical to the hypothesis's declared 11-sector universe (option (a) would have dropped XLRE/XLC and risked a hypothesis-consistency mismatch). Root cause was purely the base template's cross-leg alignment barrier: _sync_extra_iids requires EVERY same-timeframe extra leg to have a contemporaneous bar before the primary is processed, so the whole book idled until XLC's 2018-06 inception. The strategy now starts with an empty sync set (saving the full set as _unlisted_sync_iids) and enrols each leg into the barrier in on_extra_bar the first time that leg delivers a bar. Consequence: from 1999 the ranking runs on whatever sectors are live (_ranking()/_score() already skip legs with insufficient closes), and once XLRE/XLC list, the usual contemporaneous-price guarantee applies to them like every other leg - no staleness is introduced. Secondary feedback: the monthly zero-threshold escape lagging fast drawdowns is addressed by an exit-only intramonth escape (held sectors whose blended score falls through abs_momentum_threshold are flattened on any session, new slots still wait for the monthly bar), and abs_momentum_threshold remains searchable over [-0.05, 0.10] via _param_bounds so the optimizer can test whether a positive threshold earns the breadth premium. Everything that already passed Layers 1-3 is untouched: same imports, same class structure, same continuous signal (mean blended score of the current top-N), same manual settle-aware execution and whole-share sizing, leverage stays 1.0 on the commission-free CASH-like USEQ long-only book.
Hypotheses
Overfit with negative out-of-sample generalization; unwaivable hard failures (overfit, OOS ≤ 0, PBO 0.81), corroborated by DSR 0.053 with the selected Sharpe below the best-of-N noise bar and failed programme FDR. Not a fee or sample problem — the monthly sector relative-strength rule simply has no forward edge here, and the absolute-momentum escape fails in exactly the stressed regimes it was designed for. Per overfit→abandon: five prior siblings of this mechanism (similarity 0.69-0.82) already died fee_edge/overfit/risk_reject, and the wider long-only reframe this hypothesis was built on did not fix it, so revise_hypothesis onto yet another ETF basket would re-overfit.
Implementation
Long-only monthly cross-sectional momentum rotation across the 11 S&P sector SPDR ETFs (XLK/XLF/XLE/XLV/XLY/XLP/XLI/XLB/XLU/XLRE/XLC) on USEQ 1-DAY bars. Each session every sector is scored by a two-horizon blended total return (126 sessions and 63 sessions by default); on the first evaluated session of each calendar month the book rotates into the top 3 sectors, equally weighted at 90% gross exposure in whole shares. An absolute-momentum overlay only fills a slot while that sector's own blended score exceeds abs_momentum_threshold, so in a broad drawdown slots stay empty and the book steps to cash; the same test is now also applied INTRAMONTH as an exit-only escape so a leader that rolls over mid-month is sold immediately instead of carried to month end. Late-listing sectors (XLRE 2015-10, XLC 2018-06) are enrolled into the cross-leg alignment barrier lazily on their first bar, so the strategy trades the available cross-section from 1999 and the young sectors join the ranking automatically once they have a full lookback.
Verification Results
Prefer a public/overridable hook for lazy leg enrolment if the base template offers one, or add a guard/assert that the expected private attributes exist so a base-class change fails loud rather than silently mis-aligning legs.
Verification Results
The strategy reaches into the base template's cross-leg alignment barrier internals (empties `self._sync_extra_iids`, stashes them in `self._unlisted_sync_iids`, and re-enrols each leg on its first extra bar). This is a deliberate hack to trade the live cross-section from 1999 instead of idling until XLC's 2018 inception, and it passed Layers 1-3, but it depends on undocumented base-class fields; if the base template's sync mechanism changes, this silently breaks the staggered-inception handling.
Verification Results
The dollar-neutral sibling UsSectorEtfCrossSectionalMomentumDollarNeutralLS was abandoned 2026-09-07 at PF 1.03 (spread across only 9 ETFs too narrow), and L81 flags cross-sectional momentum rank as a zero-survivor OHLCV re-parameterization. This variant is materially different (RAW long-only tilt over 11 sectors, not beta-stripped, with an absolute-momentum cash escape), so it deserves a real backtest, but the family's track record is poor. Sandbox also loses in the stressed vol tercile (-12.6%, Sharpe -0.39) while all edge is concentrated in the 'normal' tercile (+46.8%) — the analyst should check whether the intramonth cash escape actually reduces the stressed-regime drawdown over full 27-year history.
Backtest Review
Iteration-1 window fix worked: full 27-year decisive sample now runs (6968 bars, 1998-12 to 2026-09), XLRE/XLC lazily enrolled into the alignment barrier as they list — no idle-until-2018 truncation this time.
Backtest Review
Per-trade economics clear USEQ costs with wide margin: avg_trade_return_pct 0.84% is ~8x the USEQ preferred floor (0.10%) and impact is only 6.8% of gross; this is NOT the fee-dead signature. profit_factor 1.35 and positive expectancy ($267/trade) over 338 trades.
Backtest Review
Materially different from the killed siblings: this is a RAW long-only 11-sector tilt with an absolute-momentum cash escape (PF 1.35), not the beta-stripped dollar-neutral 9-ETF book that died at PF 1.03. L75 abandon signature (avg_trade_return_pct <=0.10% OR PF<1.2) is absent — both metrics clear it comfortably.
Backtest Review
Genuine parameter space to explore (lookback 63-252, n_hold 1-6, abs-momentum threshold, gross_exposure, blend) and this ETF-rotation family (CrossAssetDefensiveDualMomentum, MacroThreeAssetMomentum) has recently survived into optimization.
Backtest Review
Weak risk-adjusted result: Sharpe 0.217 with bootstrap CI [-0.129, 0.584] straddling zero; CAGR only ~2.5%/yr over 27 years against a 31% max drawdown (Calmar 0.15).
Backtest Review
Negative alpha (-0.0004) and negative information_ratio (-0.26) vs the equal-weight sector basket (benchmark_meaningful=true) — the rotation currently underperforms simply holding all 11 sectors; the breadth premise is not yet demonstrating skill above baseline.
Backtest Review
QA's stressed-regime concern is borne out: stressed tercile returns -58.5% with Sharpe -0.49 and 62% intra-regime drawdown — the intramonth cash escape is not visibly protecting in the worst regimes. This is the single biggest thing optimization + walk-forward must resolve.
Backtest Review
Family prior is poor (L45/L81 cross-sectional momentum baskets zero-survivor); the burden is on the walk-forward/deflation gates to show the raw-long-only variant behaves differently.
Analysis
Iteration-2 window fix held: full 27-year sample (6971 bars, 1998-12 to 2026-09) with XLRE/XLC lazily enrolled — this is a real answer, not a truncated one.
Analysis
Per-trade economics are not the problem: avg_trade_return_pct 0.71% is ~14x the USEQ floor, zero commissions, impact only 6.8% of gross, capacity ~$21.8M.
Analysis
Ample sample (595 trades), positive holdout (Sharpe 0.92 on 95 trades), PF 1.42 clears its soft floor.
Analysis
Three HARD gates fail: is_overfitted=true (IS 0.582 → OOS -0.586), OOS Sharpe ≤ 0, PBO 0.8135 >> 0.5. Both real WF windows are negative (-0.779, -0.979) — the edge inverts, not decays.
Analysis
DSR 0.053 vs 0.95; expected-max 0.540 over 132 trials (89 effective) exceeds the selected Sharpe 0.233; sharpe_ci_low -0.135; fails programme FDR (keeps 4 of 283).
Analysis
Both free params are cliffs (lookback_days 0.170→-0.062 at 71; n_hold 0.170→0.058 at 3); the whole heatmap is 0.10-0.41 in-sample over a negative OOS — nothing to tune toward.
Analysis
Optimization worsened risk: DD 31.0%→40.5% (pre-registered cap 25%), DD duration 2316→4173 days, Calmar 0.16; loses in the stressed tercile (-0.283 / -44.4%) — the cash escape fails where it was supposed to help.
Analysis
No alpha vs its own basket: IR -0.238, alpha 0.006, beta 0.37.
Analysis
Pre-registered prediction misses 4 of 6, including OOS Sharpe (0.8 declared vs -0.586) and drawdown.
Analysis
Fix the truncated test window before optimizing. Root cause: the base template only begins dispatching on_bar once EVERY extra_bar_type has warmed up, and XLC (inception 2018-06-19) plus XLRE (2015-10) are the youngest legs — so the whole book sat idle from 1999 until 2018-06-20 (confirmed: first trade 2018-06-20 in XLE) and tested only ~8 of the 27 available years. This wastes the family's entire selling point (2000 dot-com, 2008 GFC, 2011, 2015-16 — the very regimes that stress-test the absolute-momentum cash escape). Concrete fix options: (a) simplest — reduce the universe to the 9 sectors with full 1999 history (XLK/XLF/XLE/XLV/XLY/XLP/XLI/XLB/XLU) so the backtest runs from ~1999 across multiple decades and regimes; or (b) handle staggered availability so ranking runs on whatever legs are live (your _ranking()/_score() already skip legs that are too short by returning None — the ONLY blocker is the base-template all-legs warmup gate) and XLRE/XLC join the cross-section automatically once their data begins, without holding the whole strategy back. Prefer (b) if you can key evaluation off the primary (XLK) plus the count of legs currently rankable rather than requiring all 11. Secondary, once the window is full: the monthly zero-threshold escape lags fast drawdowns (covid -23%, 39% stressed-tercile DD) and selection currently has negative alpha/IR vs equal-weight — re-check whether a positive abs_momentum_threshold and/or an intramonth escape trigger actually earns the breadth premium over just equal-weighting the sectors. Do not spend the 2-hour walk-forward until the strategy is testing decades, not 8 years.
Analysis
Benjamini-Hochberg at q=0.10 over 283 programme candidates keeps 4. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.
Outcome Summary
SectorEtfCrossSectionalMomentumRotat-c4b1621982
Outcome Summary
This strategy pivoted away from saturated single-instrument crypto trend ideas to a breadth-based, raw long-only rotation across the 11 sector SPDRs, with lazy enrolment of the late-listing XLRE and XLC so the full 1998-2026 history could be used. The initial backtest earned an 'optimize' verdict on strong per-trade economics (0.84% per trade, PF 1.35) despite a weak Sharpe of 0.217, negative alpha versus the equal-weight sector basket and a -58.5% stressed-regime tercile. Optimization over 132 trials picked a shorter 79-day lookback and n_hold 4, nudging Sharpe to 0.233 while deepening max drawdown to 40.5% past the pre-registered 25% cap, and both real walk-forward windows came back negative. After 2 iterations the analyst abandoned it: overfit, OOS Sharpe below zero and PBO 0.81 are unwaivable, and with five prior siblings of the same mechanism already dead, the monthly sector relative-strength rule was judged to have no forward edge here.
Outcome Summary
Per-trade economics clearing costs by a wide margin (0.7-0.8% vs a 0.10% USEQ floor) says nothing about whether an edge generalizes — the decisive evidence was sign-inverting walk-forward OOS, and the absolute-momentum cash escape failed in exactly the stressed regime tercile (-44% return, Sharpe -0.283) it was designed to protect.
Outcome Summary
The analyst abandoned it at ANALYZING on three unwaivable hard failures: is_overfitted=true (IS Sharpe 0.582 vs OOS -0.586, both real walk-forward windows negative at -0.779 and -0.979), OOS Sharpe below zero, and PBO 0.8135; deflated Sharpe 0.053 with the selected Sharpe (0.233) under the 0.540 best-of-N noise bar and failure of the programme FDR (4 of 283 kept) corroborated it.
Outcome Summary
A long-only monthly cross-sectional momentum rotation across the 11 S&P sector SPDR ETFs on USEQ daily bars, holding the top-N blended-momentum sectors with an absolute-momentum cash escape (also checked intramonth) to step aside in broad drawdowns.
Outcome Summary
The full 27-year backtest (1998-12 to 2026-09, 6,968 bars) returned 106.5% total / 2.50% CAGR with Sharpe 0.217 (CI -0.129 to 0.584), 338 trades, profit factor 1.35, 31.0% max drawdown and avg_trade_return_pct 0.84%; after optimization it showed 131.7% total return, Sharpe 0.233, 595 trades, PF 1.42 and holdout Sharpe 0.92 on 95 trades, but max drawdown widened to 40.5% and avg_trade_return_pct fell to 0.71%.
Backtest and paper results are hypothetical. Trading involves risk of loss.