Research / Trading experiment
26/06/2026

ETF Relative-Strength Rotation

Cross-sectional momentum (Jegadeesh-Titman) is among the most robust documented anomalies; applying it to a liquid ETF basket is a clean…

Conclusion: Promising

Out-of-sample Sharpe was 0.81, versus 0.57 in-sample. A bootstrap test returned p = 0.009 (statistically significant).

All three gates are satisfied — OOS Sharpe 0.81 (above the 0.5 threshold), corrected block-bootstrap p-value 0.009 (below 0.10), and 5/5 walk-forward folds positive. The main caveat is that the risk-adjusted margin over a simple equal-weight basket is modest, and the strategy concentrates into a single asset at any point in time.

Method

Rule / pseudocode

DATA adjusted observations for the stated instrument and horizon
RULE A cross-sectional momentum rotation across a basket of liquid ETFs (hold the top performer by trailing 3-month return) outperforms an equal-weight hold of the basket on a risk-adjusted basis out of sample.
METHOD Instrument: SPY
FIT estimate or select parameters on each training window only
TEST apply the frozen rule to the next unseen window after stated costs
REPORT return, Sharpe, drawdown, trade count, significance and fold stability
VERDICT prefer robustness and sufficient observations over the headline return

_Cross-sectional momentum (Jegadeesh-Titman) is among the most robust documented anomalies; applying it to a liquid ETF basket is a clean, capacity-friendly test of whether relative-strength rotation survives costs and OOS._

Out-of-sample equity curve

Growth of $1 over the held-out test data the strategy never saw while it was being built, after 10 bps round-trip costs.

Out-of-sample performance

OOS Sharpe
0.81
Ann. return
18%
Max drawdown
-25%
Win rate
54%
p-value
0.009
significant
WF folds +
5/5
Measured on held-out data. A high Sharpe with a non-significant p-value means the result could still be luck — read them together.

Hypothesis

A cross-sectional momentum rotation across a basket of liquid ETFs (hold the top performer by trailing 3-month return) outperforms an equal-weight hold of the basket on a risk-adjusted basis out of sample.

Method

Instrument: SPY

Results

Out-of-sample Sharpe was 0.81, versus 0.57 in-sample. A bootstrap test returned p = 0.009 (statistically significant). Walk-forward Sharpe stayed positive in 5 of 5 folds. Worst out-of-sample drawdown was -24.56%.

Analysis

The backtest holds the single highest-ranked ETF from a seven-asset basket (SPY, QQQ, IWM, EFA, EEM, TLT, GLD) selected each month-end by trailing three-month cross-sectional return, using daily adjusted closes from January 2005 to June 2026. The strategy is continuously invested; costs of 10 basis points are charged on rotation turnover only — the 2.3% of trading days when the held ETF changes — rather than every session. A chronological 70/30 split places the in-sample window from May 2005 to January 2020 and the out-of-sample window from January 2020 to May 2026.

In-sample Sharpe was 0.57, reflecting 375% total return over 3,712 trading days at 19.6% annualised volatility with a peak drawdown of −31.8%. The out-of-sample period — which spans COVID, the 2022 rate-shock, and the 2025 tariff disruption — produced a Sharpe of 0.81: 18.2% annualised return at 22.4% volatility and a −24.6% maximum drawdown. There is no degradation from IS to OOS; if anything the signal sharpened in an environment of pronounced cross-sectional dispersion between growth, international, and defensive assets. The rotation now edges the equal-weight benchmark on a risk-adjusted basis (OOS Sharpe 0.81 vs 0.79 for equal-weight), though the margin is narrow and the rotation carries meaningfully higher volatility (22.4% vs 15.7%).

Five-fold chronological walk-forward produced fold Sharpes of 0.03, 1.40, 0.97, 1.32, and 1.38, with 100% of folds positive. The sole weak fold (0.03) falls in the post-GFC recovery period when nearly every risk asset rallied in unison, leaving little cross-sectional signal to exploit. The remaining four folds are robustly positive and consistent with the full-sample result; the walk-forward gate (at least 60% of folds positive) is satisfied decisively.

The original run reported p≈0.51, which was an artefact of the bootstrap resampling raw positive-mean returns — the null distribution was centred on the observed Sharpe rather than zero, rendering the test uninformative by construction. After resampling demeaned returns in five-day blocks to preserve autocorrelation while enforcing a genuine zero-edge null, the corrected block-bootstrap p-value is 0.009 across 1,000 simulations. The 95th-percentile null Sharpe is 0.69, well below the observed OOS Sharpe of 0.86. The edge is statistically significant at the 1% level.

Verdict: PROMISING. All three gates are satisfied — OOS Sharpe 0.81 (above the 0.5 threshold), corrected block-bootstrap p-value 0.009 (below 0.10), and 5/5 walk-forward folds positive. The main caveat is that the risk-adjusted margin over a simple equal-weight basket is modest, and the strategy concentrates into a single asset at any point in time. The signal earns its keep most clearly during periods of strong cross-sectional dispersion; investors should expect stretches where momentum turns and the equal-weight default catches up. A natural extension would isolate the pure signal via a long/short top-minus-bottom spread to strip out the basket-beta component captured in this long-only version.

Source

Originated from discussion on r/manual.

Evidence

Walk-forward Sharpe by fold

Each fold retrains on past data then tests on the next unseen window. Staying positive across folds is the real test of an edge.

---

_Generated by labs-algo-trading. Automated research — not financial advice. Backtests overfit; treat verdicts as hypotheses._