qbuntuqbuntu
marginalno_edge· equity· breakout· momentum· volatility

Volatility Breakout (US S&P 500)

slug: volatility-breakout-us-sp500
performance summary
Sharpe (median)
+0.50
Max DD
-8.4%
Win rate
Alpha (ann.)
p-value
0.30
backtest period: 2022-02-012026-06-01
Sharpe across 720 grid runs:median 0.50best 1.43 (not representative)worst -0.45p25–p75 0.280.71

Hypothesis

Stocks with rising short-term ATR relative to long-term ATR are experiencing volatility expansion, signaling breakout opportunities. Applied to S&P 500 constituents.

Why it didn't work

Across 720 grid combinations, median Sharpe=0.50, best=1.43. Primary failure mode: no_edge.

Facts (7)

Average monthly return correlation with other strategies in DOWN regime: -0.09
Pairwise Pearson correlation of monthly returns across 42 strategies, filtered to DOWN regime months (N=3, N225 < SMA20 < SMA60)
correlation-0.09
Average monthly return correlation with other strategies (full period): 0.00
Pairwise Pearson correlation of monthly returns across 42 strategies, full backtest period
correlation0.00
Best grid Sharpe ratio is 1.43 (p=0.0039).
period 2022-02-01–2026-06-01; cost=5bps
sharpe_ratio1.43
Median Sharpe across 720 grid runs is 0.50.
Full grid of 720 parameter combinations.
sharpe_ratio0.50
Median Sharpe in DOWN regime is -0.14 across 720 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-0.14
Median Sharpe in FLAT regime is 0.55 across 720 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio0.55
Median Sharpe in UP regime is 0.74 across 720 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.74

Runs (30)

runparamssharpeUPFLATDOWN
atr_short=5, atr_long=20, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0000
atr_long: 20
cost_bps: 5
n_stocks: 5
+0.14-0.88+1.64-0.33
atr_short=5, atr_long=20, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=True
r-volatility-breakout-us-sp500-0001
atr_long: 20
cost_bps: 5
n_stocks: 5
+0.27-0.64+1.64-0.33
atr_short=5, atr_long=20, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=False
r-volatility-breakout-us-sp500-0002
atr_long: 20
cost_bps: 10
n_stocks: 5
-0.18-1.23+1.35-0.70
atr_short=5, atr_long=20, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=True
r-volatility-breakout-us-sp500-0003
atr_long: 20
cost_bps: 10
n_stocks: 5
+0.02-0.84+1.35-0.70
atr_short=5, atr_long=20, holding_days=1, n_stocks=20, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0008
atr_long: 20
cost_bps: 5
n_stocks: 20
+0.08-0.55+1.18+0.11
atr_short=5, atr_long=20, holding_days=20, n_stocks=5, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0036
atr_long: 20
cost_bps: 5
n_stocks: 5
-0.28+0.29-0.39-2.46
atr_short=5, atr_long=20, holding_days=20, n_stocks=5, cost_bps=10, regime_gate=False
r-volatility-breakout-us-sp500-0038
atr_long: 20
cost_bps: 10
n_stocks: 5
-0.36+0.20-0.46-2.63
atr_short=5, atr_long=20, holding_days=20, n_stocks=20, cost_bps=10, regime_gate=False
r-volatility-breakout-us-sp500-0046
atr_long: 20
cost_bps: 10
n_stocks: 20
-0.45-0.03-0.59-1.15
atr_short=5, atr_long=40, holding_days=10, n_stocks=5, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0072
atr_long: 40
cost_bps: 5
n_stocks: 5
+0.21+0.75+0.50-1.91
atr_short=5, atr_long=60, holding_days=1, n_stocks=20, cost_bps=5, regime_gate=True
r-volatility-breakout-us-sp500-0105
atr_long: 60
cost_bps: 5
n_stocks: 20
+0.50+0.18+1.02+0.40
atr_short=5, atr_long=60, holding_days=20, n_stocks=10, cost_bps=10, regime_gate=False
r-volatility-breakout-us-sp500-0138
atr_long: 60
cost_bps: 10
n_stocks: 10
+0.40+0.55+0.41-0.06
atr_short=5, atr_long=120, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0144
atr_long: 120
cost_bps: 5
n_stocks: 5
+0.36-0.02+1.31-0.13
atr_short=5, atr_long=120, holding_days=10, n_stocks=10, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0172
atr_long: 120
cost_bps: 5
n_stocks: 10
+1.17+1.72+0.08+1.27
atr_short=10, atr_long=20, holding_days=5, n_stocks=5, cost_bps=5, regime_gate=True
r-volatility-breakout-us-sp500-0205
atr_long: 20
cost_bps: 5
n_stocks: 5
+0.36+0.61-0.02+0.10
atr_short=10, atr_long=20, holding_days=20, n_stocks=20, cost_bps=10, regime_gate=False
r-volatility-breakout-us-sp500-0238
atr_long: 20
cost_bps: 10
n_stocks: 20
-0.01+0.67-0.10-1.72
atr_short=10, atr_long=40, holding_days=10, n_stocks=10, cost_bps=10, regime_gate=True
r-volatility-breakout-us-sp500-0271
atr_long: 40
cost_bps: 10
n_stocks: 10
+0.10+0.81+0.54-1.53
atr_short=10, atr_long=60, holding_days=5, n_stocks=10, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0304
atr_long: 60
cost_bps: 5
n_stocks: 10
+0.26+0.30+0.69-0.30
atr_short=10, atr_long=120, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=True
r-volatility-breakout-us-sp500-0337
atr_long: 120
cost_bps: 5
n_stocks: 5
+0.47+0.84-0.47+0.85
atr_short=10, atr_long=120, holding_days=10, n_stocks=20, cost_bps=10, regime_gate=False
r-volatility-breakout-us-sp500-0370
atr_long: 120
cost_bps: 10
n_stocks: 20
+0.52+1.70-0.16-0.38
atr_short=14, atr_long=20, holding_days=5, n_stocks=10, cost_bps=10, regime_gate=True
r-volatility-breakout-us-sp500-0403
atr_long: 20
cost_bps: 10
n_stocks: 10
+0.58+0.24+1.01+1.25
atr_short=14, atr_long=40, holding_days=1, n_stocks=10, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0436
atr_long: 40
cost_bps: 5
n_stocks: 10
+0.76+0.75+0.63+0.94
atr_short=14, atr_long=40, holding_days=20, n_stocks=5, cost_bps=5, regime_gate=True
r-volatility-breakout-us-sp500-0469
atr_long: 40
cost_bps: 5
n_stocks: 5
+0.63+0.54+1.91-0.45
atr_short=14, atr_long=60, holding_days=5, n_stocks=20, cost_bps=10, regime_gate=False
r-volatility-breakout-us-sp500-0502
atr_long: 60
cost_bps: 10
n_stocks: 20
+0.20+0.22-0.42+0.93
atr_short=14, atr_long=120, holding_days=1, n_stocks=10, cost_bps=10, regime_gate=True
r-volatility-breakout-us-sp500-0535
atr_long: 120
cost_bps: 10
n_stocks: 10
+0.67+0.70+0.00+1.80
atr_short=14, atr_long=120, holding_days=20, n_stocks=10, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0568
atr_long: 120
cost_bps: 5
n_stocks: 10
+1.05+1.25+0.81+0.80
atr_short=20, atr_long=40, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0576
atr_long: 40
cost_bps: 5
n_stocks: 5
+0.99+1.10+1.08+0.47
atr_short=20, atr_long=40, holding_days=10, n_stocks=5, cost_bps=10, regime_gate=False
r-volatility-breakout-us-sp500-0602
atr_long: 40
cost_bps: 10
n_stocks: 5
+0.22+0.70+0.12-1.22
atr_short=20, atr_long=60, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0624
atr_long: 60
cost_bps: 5
n_stocks: 5
+1.43+1.60+1.31+1.23
atr_short=20, atr_long=60, holding_days=5, n_stocks=5, cost_bps=5, regime_gate=False
r-volatility-breakout-us-sp500-0636
atr_long: 60
cost_bps: 5
n_stocks: 5
+0.69+1.19+1.04-2.74
atr_short=20, atr_long=60, holding_days=20, n_stocks=20, cost_bps=5, regime_gate=True
r-volatility-breakout-us-sp500-0669
atr_long: 60
cost_bps: 5
n_stocks: 20
+0.60+1.28+0.16-1.30

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-28T01:10:02

Related strategies