Risk Parity / Volatility Targeting Overlay (US S&P 500)
slug: risk-parity-us-sp500
performance summary
Sharpe (median)
+0.44
Max DD
-25.1%
Win rate
—
Alpha (ann.)
—
p-value
0.27
backtest period: 2022-04-01 → 2026-06-01
Sharpe across 384 grid runs:median 0.44best 1.21 (not representative)worst -0.92p25–p75 -0.36–0.58
Hypothesis
Sizing positions inversely proportional to their recent volatility. Applied to S&P 500 constituents.
Why it didn't work
Across 384 grid combinations, median Sharpe=0.44, best=1.21. Primary failure mode: no_edge.
Facts (5)
Best grid Sharpe ratio is 1.21 (p=0.00023).
period 2022-04-01–2026-06-01; cost=5bps
cite ↗ /cite/risk-parity-us-sp500-fact-best-sharpevia r-risk-parity-us-sp500-0308
Median Sharpe across 384 grid runs is 0.44.
Full grid of 384 parameter combinations.
Median Sharpe in DOWN regime is 0.12 across 384 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
Median Sharpe in FLAT regime is -0.07 across 384 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
Median Sharpe in UP regime is 0.64 across 384 runs.
Regime=UP, N225 SMA20/SMA60 classification.
Runs (30)
| run | params | sharpe | UP | FLAT | DOWN |
|---|---|---|---|---|---|
target_vol=0.1, vol_lookback=10, holding_days=5, base_signal=momentum_60, cost_bps=5 r-risk-parity-us-sp500-0000 | cost_bps: 5 target_vol: 0.1 base_signal: "momentum_60" | +0.50 | +0.26 | +0.51 | +1.38 |
target_vol=0.1, vol_lookback=10, holding_days=5, base_signal=momentum_60, cost_bps=10 r-risk-parity-us-sp500-0001 | cost_bps: 10 target_vol: 0.1 base_signal: "momentum_60" | +0.40 | +0.16 | +0.42 | +1.25 |
target_vol=0.1, vol_lookback=10, holding_days=5, base_signal=momentum_120, cost_bps=5 r-risk-parity-us-sp500-0002 | cost_bps: 5 target_vol: 0.1 base_signal: "momentum_120" | +0.51 | +0.40 | +0.18 | +2.06 |
target_vol=0.1, vol_lookback=10, holding_days=5, base_signal=mean_reversion, cost_bps=5 r-risk-parity-us-sp500-0004 | cost_bps: 5 target_vol: 0.1 base_signal: "mean_reversion" | -0.73 | -0.48 | -1.22 | -0.73 |
target_vol=0.1, vol_lookback=10, holding_days=60, base_signal=momentum_60, cost_bps=5 r-risk-parity-us-sp500-0018 | cost_bps: 5 target_vol: 0.1 base_signal: "momentum_60" | +0.63 | +1.03 | +0.58 | -1.06 |
target_vol=0.1, vol_lookback=10, holding_days=60, base_signal=momentum_120, cost_bps=10 r-risk-parity-us-sp500-0021 | cost_bps: 10 target_vol: 0.1 base_signal: "momentum_120" | +1.19 | +1.61 | +1.04 | -0.44 |
target_vol=0.1, vol_lookback=20, holding_days=20, base_signal=momentum_120, cost_bps=5 r-risk-parity-us-sp500-0038 | cost_bps: 5 target_vol: 0.1 base_signal: "momentum_120" | +0.87 | +1.26 | +0.54 | +0.46 |
target_vol=0.1, vol_lookback=40, holding_days=10, base_signal=momentum_60, cost_bps=10 r-risk-parity-us-sp500-0055 | cost_bps: 10 target_vol: 0.1 base_signal: "momentum_60" | 0.00 | +0.74 | -0.43 | -0.53 |
target_vol=0.1, vol_lookback=60, holding_days=5, base_signal=momentum_60, cost_bps=5 r-risk-parity-us-sp500-0072 | cost_bps: 5 target_vol: 0.1 base_signal: "momentum_60" | +0.48 | +0.32 | +0.34 | +1.43 |
target_vol=0.1, vol_lookback=60, holding_days=5, base_signal=momentum_60, cost_bps=10 r-risk-parity-us-sp500-0073 | cost_bps: 10 target_vol: 0.1 base_signal: "momentum_60" | +0.38 | +0.23 | +0.26 | +1.32 |
target_vol=0.1, vol_lookback=60, holding_days=5, base_signal=mean_reversion, cost_bps=10 r-risk-parity-us-sp500-0077 | cost_bps: 10 target_vol: 0.1 base_signal: "mean_reversion" | -0.92 | -0.55 | -1.74 | -1.02 |
target_vol=0.1, vol_lookback=60, holding_days=60, base_signal=momentum_60, cost_bps=10 r-risk-parity-us-sp500-0091 | cost_bps: 10 target_vol: 0.1 base_signal: "momentum_60" | +0.57 | +1.00 | +0.45 | -1.01 |
target_vol=0.15, vol_lookback=10, holding_days=20, base_signal=momentum_60, cost_bps=5 r-risk-parity-us-sp500-0108 | cost_bps: 5 target_vol: 0.15 base_signal: "momentum_60" | +0.56 | +1.23 | +0.02 | -0.09 |
target_vol=0.15, vol_lookback=20, holding_days=5, base_signal=mean_reversion, cost_bps=10 r-risk-parity-us-sp500-0125 | cost_bps: 10 target_vol: 0.15 base_signal: "mean_reversion" | -0.90 | -0.60 | -1.62 | -0.88 |
target_vol=0.15, vol_lookback=20, holding_days=60, base_signal=mean_reversion, cost_bps=5 r-risk-parity-us-sp500-0142 | cost_bps: 5 target_vol: 0.15 base_signal: "mean_reversion" | -0.31 | -0.34 | -0.56 | +0.34 |
target_vol=0.15, vol_lookback=40, holding_days=20, base_signal=momentum_120, cost_bps=10 r-risk-parity-us-sp500-0159 | cost_bps: 10 target_vol: 0.15 base_signal: "momentum_120" | +0.82 | +1.26 | +0.45 | +0.42 |
target_vol=0.15, vol_lookback=60, holding_days=10, base_signal=momentum_120, cost_bps=5 r-risk-parity-us-sp500-0176 | cost_bps: 5 target_vol: 0.15 base_signal: "momentum_120" | +0.61 | +1.77 | -0.27 | +0.33 |
target_vol=0.2, vol_lookback=10, holding_days=5, base_signal=momentum_60, cost_bps=10 r-risk-parity-us-sp500-0193 | cost_bps: 10 target_vol: 0.2 base_signal: "momentum_60" | +0.40 | +0.16 | +0.42 | +1.25 |
target_vol=0.2, vol_lookback=10, holding_days=60, base_signal=momentum_60, cost_bps=5 r-risk-parity-us-sp500-0210 | cost_bps: 5 target_vol: 0.2 base_signal: "momentum_60" | +0.63 | +1.03 | +0.58 | -1.06 |
target_vol=0.2, vol_lookback=20, holding_days=10, base_signal=mean_reversion, cost_bps=10 r-risk-parity-us-sp500-0227 | cost_bps: 10 target_vol: 0.2 base_signal: "mean_reversion" | -0.52 | -1.17 | -0.15 | +0.01 |
target_vol=0.2, vol_lookback=40, holding_days=5, base_signal=mean_reversion, cost_bps=5 r-risk-parity-us-sp500-0244 | cost_bps: 5 target_vol: 0.2 base_signal: "mean_reversion" | -0.72 | -0.39 | -1.46 | -0.74 |
target_vol=0.2, vol_lookback=40, holding_days=60, base_signal=momentum_120, cost_bps=10 r-risk-parity-us-sp500-0261 | cost_bps: 10 target_vol: 0.2 base_signal: "momentum_120" | +1.13 | +1.58 | +0.98 | -0.66 |
target_vol=0.2, vol_lookback=60, holding_days=20, base_signal=momentum_120, cost_bps=5 r-risk-parity-us-sp500-0278 | cost_bps: 5 target_vol: 0.2 base_signal: "momentum_120" | +0.86 | +1.29 | +0.50 | +0.47 |
target_vol=0.3, vol_lookback=10, holding_days=5, base_signal=momentum_60, cost_bps=5 r-risk-parity-us-sp500-0288 | cost_bps: 5 target_vol: 0.3 base_signal: "momentum_60" | +0.50 | +0.26 | +0.51 | +1.37 |
target_vol=0.3, vol_lookback=10, holding_days=10, base_signal=momentum_120, cost_bps=5 r-risk-parity-us-sp500-0296 | cost_bps: 5 target_vol: 0.3 base_signal: "momentum_120" | +0.69 | +1.68 | -0.18 | +0.47 |
target_vol=0.3, vol_lookback=10, holding_days=60, base_signal=momentum_120, cost_bps=5 r-risk-parity-us-sp500-0308 | cost_bps: 5 target_vol: 0.3 base_signal: "momentum_120" | +1.21 | +1.63 | +1.06 | -0.38 |
target_vol=0.3, vol_lookback=20, holding_days=5, base_signal=momentum_120, cost_bps=5 r-risk-parity-us-sp500-0314 | cost_bps: 5 target_vol: 0.3 base_signal: "momentum_120" | +0.52 | +0.43 | +0.19 | +1.81 |
target_vol=0.3, vol_lookback=20, holding_days=60, base_signal=momentum_60, cost_bps=10 r-risk-parity-us-sp500-0331 | cost_bps: 10 target_vol: 0.3 base_signal: "momentum_60" | +0.56 | +0.95 | +0.51 | -1.00 |
target_vol=0.3, vol_lookback=40, holding_days=20, base_signal=momentum_60, cost_bps=5 r-risk-parity-us-sp500-0348 | cost_bps: 5 target_vol: 0.3 base_signal: "momentum_60" | +0.51 | +1.20 | -0.10 | +0.07 |
target_vol=0.3, vol_lookback=60, holding_days=5, base_signal=mean_reversion, cost_bps=10 r-risk-parity-us-sp500-0365 | cost_bps: 10 target_vol: 0.3 base_signal: "mean_reversion" | -0.92 | -0.54 | -1.74 | -1.02 |
Target universe
S&P 500 constituents, ~503 stocks
Related strategies
source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-07-29T01:08:35