Backtested research example
🗓 Backtest period: 2020-01-01..2025-10-08
Spec ID: spec-macro-driven-top500-us-stocks-1764834334 · Generated: 2026-06-05 18:09 UTC
Cluster: Macro Rotation · Sub Cluster: Regime-Based Us Sector Momentum
Monthly long-only sector rotation strategy over the 500 most-traded US stocks. It infers macro regimes, tilts sector weights accordingly, then selects high-momentum, high-quality stocks within each sector with volatility-aware sizing.
Sector leadership tends to vary across inflation, rates, growth, labor, and volatility regimes because cash-flow duration, cyclicality, balance-sheet sensitivity, and commodity exposure differ materially by industry. A rules-based macro classifier attempts to capture these slow-moving cross-sector risk premia while avoiding purely price-based sector chasing.
Within each favored sector, the strategy emphasizes 12-month momentum excluding the most recent month, sector-relative strength, ROIC, free-cash-flow margin, and earnings revisions. This combines persistent behavioral momentum effects with quality and revision signals that may reduce exposure to financially weak winners. Monthly rebalancing, sector caps, liquidity filters, earnings blackouts, and inverse-volatility sizing are intended to make the signal more implementable in large-cap/liquid US equities.
[code omitted from public view]
| Param | Value | Notes |
|---|---|---|
| Universe | Top 500 most-traded US stocks | Ranked by 1-year dollar volume; stocks only |
| Backtest window | 2020-01-01 to 2025-10-08 | Daily bars, monthly rebalance |
| Macro update frequency | Monthly | Macro inputs lagged by 5 business days |
| Regime indicators | CPI YoY, 10Y yield, GDP/growth, unemployment/labor, VIX/risk | Implementation may use available macro proxies for some series |
| Regime rules | Disinflation Risk-On; Reflation Rate-Rise; Stagflation; Risk-Off High-Vol | Ordered conditional macro classifier |
| Sector base weights | Equal-weight 11 sectors | Converted to biased weights by regime |
| Sector caps | Min 3%, max 25% | Also max sector exposure 25% |
| Sector momentum confirmation | 126 trading days | Positive sectors boosted 1.1x; negative sectors cut to 0.9x |
| Stock momentum | 252 trading days excluding most recent 21 days | Largest score weight: 0.50 |
| Stock relative strength | 6 months vs sector | Score weight: 0.20 |
| Quality / revisions | ROIC 0.15; FCF margin 0.10; earnings revision 0.10 | Z-scored by sector; 1% winsorization |
| Leverage penalty | Net debt / EBITDA > 3: -0.20 | Applied to composite score |
| Selection count | Top 30 per sector | Subject to eligibility filters |
| Volatility estimator | 20 trading days | Used for inverse-vol sizing and vol target |
| Volatility target | 12% annualized | Max leverage 1.0 |
| Max position size | 3% | Single-name cap |
| Turnover control | Min hold 20 days; keep threshold 0.15 score delta | Reduces rebalance churn |
| Earnings blackout | 3 days before, 1 day after | Excludes upcoming earnings within 3 days |
| Liquidity filters | Price >= $5; 30-day ADV >= $5mm | Additional execution limit: 1% ADV/day |
| Costs | 0.15% round trip | Proportional-to-volume slippage model |
| # | Concern | Status |
|---|---|---|
| 1 | Macro publication timing | Uses a 5-business-day macro lag; still requires confirmation that vintage/release-date data, not revised final data, were used. |
| 2 | Fundamental data availability | ROIC, FCF margin, leverage, and earnings revisions must be point-in-time with realistic filing/vendor delays. |
| 3 | Universe construction | Top-500 most-traded universe can introduce survivorship or future-liquidity bias unless membership is reconstructed historically. |
| 4 | Earnings blackout | Upcoming earnings dates must come from information known before the rebalance date. |
| 5 | Execution realism | 1% ADV cap, slippage, and round-trip cost are included, but market impact during stress regimes may be understated. |
| 6 | Regime proxy mapping | Some macro variables may be proxied by available database series; mapping should be documented and frozen before testing. |
The backtest produced a positive total return of 113.01% over 2020-01-01 to 2025-10-08 with a Sharpe of 0.81, Sortino of 0.82, and profit factor of 1.73 across 3009 trades. The 64.77% win rate is encouraging, but realized volatility was high at 24.09% and the maximum drawdown reached -43.48%, making the risk profile significantly more aggressive than the nominal 12% volatility target would imply. Overall, the signal shows economically plausible return generation, but drawdown control and point-in-time data validation are key follow-ups before further research use.
| Metric | Value |
|---|---|
| Total Return | 113.01% |
| Sharpe | 0.81 |
| Sortino | 0.82 |
| Calmar | 0.32 |
| Max Drawdown | -43.48% |
| Volatility | 24.09% |
| Win Rate | 64.77% |
| Profit Factor | 1.73 |
| Total Trades | 3009 |
| Symbols | 500 (A, AA, AAL, AAPL, ABBV, ABNB, ABT, ACGL, ACN, ADBE, +490 more) |
Backtests are historical simulations for research purposes only. They are not investment advice and do not guarantee future performance.