Backtested research example
🗓 Backtest period: 2020-01-01..2025-10-08
Spec ID: spec-regime-adaptive-relative-momentum-top100-us-stocks-1779642517 · Generated: 2026-05-24 17:34 UTC
Long-only regime-adaptive relative momentum strategy on the 100 most actively traded U.S. stocks. When SPY is in a positive, low-volatility regime, it buys up to 2 top-ranked stocks with positive multi-horizon momentum and confirmed trend strength, sizing positions by realized volatility and ATR-based risk controls.
The strategy attempts to harvest cross-sectional momentum in large, liquid U.S. equities while avoiding periods when broad market conditions are unfavorable. The rationale is that recent winners can continue to outperform when supported by intermediate-term trend, positive market breadth/regime, and sufficient trend strength, but momentum crashes and correlation spikes are more likely when the market index is below long-term trend or realized volatility is elevated.
The design combines relative strength with absolute trend filters: a stock must rank well on 20/60/120-day returns, trade above key moving averages, have a positive MACD histogram, and meet a minimum ADX threshold. The SPY regime filter forces cash during broad risk-off environments, while volatility-targeted sizing and ATR stops aim to reduce single-name tail risk.
[code omitted from public view]
| Param | Value | Notes |
|---|---|---|
| Rule type | REGIME_ADAPTIVE_RELATIVE_MOMENTUM | Long-only relative momentum with regime filter |
| Universe | Top 100 U.S. stocks by 1-year dollar volume | Annual runtime-year selection; ADRs excluded |
| Benchmark / regime asset | SPY | Uses SPY&US&ETF key |
| Market regime | SPY close > 200d SMA and 20d realized vol <= 35% | Risk-off action is exit positions and hold cash |
| Momentum score | 0.25 * return_20d + 0.35 * return_60d + 0.40 * return_120d | Ranked descending; minimum score 0.0 |
| Stock trend filters | Close > SMA50, close > SMA200, EMA20 > EMA50, MACD histogram > 0, ADX14 >= 18 | Requires broad and single-name trend confirmation |
| Max positions | 2 | Select top-ranked passing stocks |
| Position sizing | Volatility-targeted equal cap | 20d realized vol; 18% annualized vol target per position |
| Position caps | Min 5%, max 10% per position | Max leverage parameter 4.0 |
| ATR risk controls | ATR(20), initial stop 2.5x, trailing stop 3.0x, take profit 6.0x | Single-name risk management |
| Exit rank threshold | Exit if momentum rank falls below 4 | Keeps holdings near the top of the relative momentum list |
| Indicator warmup | 252 trading days | Required for SMA200, 120d momentum, MACD, ADX, ATR, realized volatility |
| Backtest window | 2020-01-01 to 2025-10-08 | Daily bars |
| Costs | Not specified | Metrics appear to exclude explicit commissions, fees, borrow, taxes, and slippage assumptions unless handled externally |
| # | Concern | Status |
|---|---|---|
| 1 | Indicator look-ahead | Signals use trailing daily prices and require warmup; verify close-at-close execution does not use unavailable closing data for same-bar fills. |
| 2 | Universe look-ahead | Universe is selected annually by 1-year dollar volume at runtime; verify the 1-year volume window is strictly prior to selection date. |
| 3 | Survivorship bias | Universe contains current/top liquid names; confirm historical delistings and constituents are included if production-quality inference is required. |
| 4 | Corporate actions | Verify prices and volumes are adjusted consistently for splits, dividends, and symbol changes. |
| 5 | Regime filter timing | SPY SMA and realized volatility should be computed only from data available up to the signal timestamp. |
| 6 | Execution assumptions | Costs are unspecified; assess sensitivity to slippage, close auction liquidity, and turnover from 2,857 trades. |
Over 2020-01-01 to 2025-10-08, the backtest produced a 46.39% total return with a 1.08 Sharpe, 1.50 Sortino, 7.48% annualized volatility, and -13.22% maximum drawdown. The return profile is relatively controlled for an equity momentum strategy, likely helped by the SPY regime filter and volatility-targeted sizing, but the Calmar of 0.52 and 2,857 trades suggest that drawdown efficiency and trading-friction sensitivity should be investigated before treating the result as deployable.
| Metric | Value |
|---|---|
| Total Return | 46.39% |
| Sharpe | 1.08 |
| Sortino | 1.50 |
| Calmar | 0.52 |
| Max Drawdown | -13.22% |
| Volatility | 7.48% |
| Win Rate | 67.68% |
| Profit Factor | 1.51 |
| Total Trades | 2857 |
| Symbols | 100 (AAPL, ABBV, ACN, ADBE, ADI, AMAT, AMD, AMGN, AMZN, APP, +90 more) |
Backtests are historical simulations for research purposes only. They are not investment advice and do not guarantee future performance.