qbuntuqbuntu

Risk Parity / Volatility Targeting Overlay (US S&P 500)

slug: risk-parity-us-sp500

Risk Parity / Volatility Targeting Overlay (US S&P 500) backtest. Median Sharpe across 384 parameter sets is +0.34. p-value is 0.34. Max DD is -25.1%. Period: 2022-04-01 to 2026-09-01. Best Sharpe +1.16 is not the representative figure.

Verdict: marginal. Some parameter set has a p-value under 0.10, but the median itself misses promising (Sharpe > 0.5 and p-value < 0.05). Primary reason: no_edge. It is not regime, frequency, or cost, and the median does not clear the bar.

Performance summary

Sharpe (median)
+0.34
Max DD
-25.1%
Win rate
—
Alpha (ann.)
—
p-value
0.34
backtest period: 2022-04-01 → 2026-09-01
Sharpe across 384 grid runs:median 0.34best 1.16 (not representative)worst -0.96p25–p75 -0.15–0.53

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.34, best=1.16. Primary failure mode: no_edge.

Facts (5)

Best grid Sharpe ratio is 1.16 (p=0.00024).
period 2022-04-01–2026-09-01; cost=5bps
sharpe_ratio1.16
Median Sharpe across 384 grid runs is 0.34.
Full grid of 384 parameter combinations.
sharpe_ratio0.34
Median Sharpe in DOWN regime is 0.17 across 384 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio0.17
Median Sharpe in FLAT regime is -0.03 across 384 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.03
Median Sharpe in UP regime is 0.65 across 384 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.65

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.44+0.26+0.37+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.34+0.16+0.28+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.21+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.77-0.48-1.37-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.60+0.93+0.58-0.75
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.14+1.39+1.04+0.51
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.65+1.26+0.08+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.12+0.74-0.65-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.41+0.32+0.19+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.32+0.23+0.09+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.96-0.55-1.86-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.54+0.88+0.45-0.67
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.44+1.18-0.19-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.95-0.60-1.80-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.26-0.56+0.03
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.59+1.27-0.04+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.51+1.87-0.29+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.34+0.16+0.28+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.60+0.93+0.58-0.75
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.26-0.50-0.11+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.76-0.39-1.58-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.09+1.38+0.98+0.46
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.64+1.30+0.02+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.44+0.26+0.38+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.63+1.76-0.21+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.16+1.41+1.06+0.54
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.51+0.43+0.20+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.53+0.82+0.51-0.66
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.32+1.11-0.41+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.96-0.54-1.86-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-09-24T02:22:17

Related strategies