qbuntuqbuntu

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-012026-06-01
Sharpe across 384 grid runs:median 0.44best 1.21 (not representative)worst -0.92p25–p75 -0.360.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
sharpe_ratio1.21
Median Sharpe across 384 grid runs is 0.44.
Full grid of 384 parameter combinations.
sharpe_ratio0.44
Median Sharpe in DOWN regime is 0.12 across 384 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio0.12
Median Sharpe in FLAT regime is -0.07 across 384 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.07
Median Sharpe in UP regime is 0.64 across 384 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.64

Runs (30)

runparamssharpeUPFLATDOWN
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

Related strategies