Backtested research example
🗓 Backtest period: 2018-01-01..2023-01-01
Spec ID: spec-breadth-aware-quality-momentum-long-short-top500-us-stocks-1781966836 · Generated: 2026-06-20 15:51 UTC
Cluster: Quality Momentum · Sub Cluster: Breadth-Aware Sector-Neutral Long-Short
Ranks top-500 US stocks within sectors on quality and risk-adjusted momentum, then buys high-quality winners and shorts low-quality laggards. Gross exposure is dynamically scaled by market breadth, trend, and portfolio drawdown controls while targeting near-zero net and sector exposure.
The trade combines two documented cross-sectional effects: quality firms tend to compound more reliably than weak balance-sheet or low-profitability firms, and momentum reflects slow information diffusion, investor underreaction, and institutional flow persistence. Ranking within sectors seeks to isolate stock-specific quality/momentum rather than broad sector bets.
The breadth and trend overlays recognize that long/short factor returns are regime-dependent. When participation is broad and the equal-weight market trend is healthy, the strategy allows fuller gross exposure; when breadth deteriorates or portfolio drawdown deepens, it cuts risk to reduce crash and deleveraging exposure.
[code omitted from public view]
| Param | Value | Notes |
|---|---|---|
| Universe | Top 500 US stocks | Capitalization-sorted stock universe; 500 symbols in test. |
| Backtest window | 2018-01-01 to 2023-01-01 | Daily bars, close rebalance. |
| Base exposure | 100% long / 100% short | Base gross 2.0, target net 0.0, max absolute net 5%. |
| Max leverage | 4.0x | Hard leverage ceiling. |
| Sector neutrality | Enabled | Within-sector ranking and long/short dollar neutrality; max sector net exposure 2%. |
| Quality model | Weighted within-sector z-score | ROA 20%, ROE 25%, debt/assets 15% inverse, gross profit/assets 20%, OCF/assets 20%. |
| Fundamental lag | 45 calendar days | Earnings release lag 2 days; quarterly statements, TTM when available. |
| Momentum windows | 63d / 126d / 252d | Weights 30% / 35% / 35%; skip most recent 21 trading days. |
| Momentum normalization | Return / realized volatility | Uses 126d annualized realized volatility. |
| Long thresholds | Quality >= 0.70, momentum >= 0.70, composite >= 0.90 | Also requires positive 6-month return and persistence in at least 3 windows above sector median. |
| Short thresholds | Quality <= 0.30, momentum <= 0.30, composite <= 0.10 | Also requires negative or bottom-half 6-month return and persistence in at least 2 windows below sector median. |
| Breadth overlay | Enabled | Weighted z-score of breadth features over 252d history; gross multiplier ranges 0.25 to 1.00. |
| Trend overlay | Enabled | Equal-weight top-500 50d/200d SMA and 200d trend checks; deterioration multiplier 0.70. |
| Drawdown control | Enabled | 8% drawdown trigger scales to 0.60; 12% severe trigger scales to 0.35; restore below 4%. |
| Position sizing | Sector-neutral equal weight with vol adjustment | 63d volatility equalization; weight cap 2.0 and floor 0.5. |
| Position caps | 10% max single name; 0.1% min size | Also max position size 10% from sizing config. |
| Liquidity filter | $10MM 20d dollar volume minimum | Trades skipped if missing execution price. |
| Turnover cap | 50% daily turnover | Applied to rebalance activity. |
| Stop loss | 20% | No take-profit rule specified. |
| Costs | Not specified | Context has costs=null; interpret results cautiously if commissions, borrow, financing, and slippage are absent. |
| # | Concern | Status |
|---|---|---|
| 1 | Fundamental statement availability | Uses 45-day fundamental data lag and 2-day earnings-release lag. |
| 2 | Price signal timing | Price signals are configured to use prior completed daily bars; rebalance occurs at close. |
| 3 | Momentum skip period | Excludes most recent 21 trading days to reduce short-term reversal and same-bar leakage. |
| 4 | Execution price integrity | Synthetic execution prices are disallowed; trades are skipped when execution price is missing. |
| 5 | Universe construction bias | Top-500 capitalization universe should be checked for point-in-time membership and survivorship handling. |
| 6 | Sector metadata timing | Sector labels come from instruments metadata; point-in-time sector classification should be verified. |
Over 2018-01-01 to 2023-01-01, the backtest produced a positive total return of 28.44% with Sharpe 0.71 and volatility 7.97%. Risk control was imperfect: max drawdown reached -21.28% and Calmar was 0.24, indicating that the breadth and drawdown overlays did not eliminate large losses. Win rate was 53.92% and profit factor was 1.14, suggesting a modest edge that should be re-evaluated after realistic trading costs and borrow assumptions.
| Metric | Value |
|---|---|
| Total Return | 28.44% |
| Sharpe | 0.71 |
| Sortino | 0.82 |
| Calmar | 0.24 |
| Max Drawdown | -21.28% |
| Volatility | 7.97% |
| Win Rate | 53.92% |
| Profit Factor | 1.14 |
| Total Trades | 64854 |
| Symbols | 500 (A, AAPL, ABBV, ABNB, ABT, ACGL, ACN, ACON, ADBE, ADI, +490 more) |
Backtests are historical simulations for research purposes only. They are not investment advice and do not guarantee future performance.