qbuntuqbuntu
rejectedno_edge· equity· anomaly· factor· volatility

Garman-Klass Volatility Factor (US S&P 500)

slug: garman-klass-vol-us-sp500
performance summary
Sharpe (median)
-0.83
Max DD
-52.5%
Win rate
Alpha (ann.)
p-value
0.08
backtest period: 2022-02-012026-06-01
Sharpe across 222 grid runs:median -0.83best -0.29 (not representative)worst -1.87p25–p75 -1.07-0.66

Hypothesis

Garman & Klass (1980): OHLC-based volatility estimator. Testing low-volatility anomaly using GK vol on S&P 500 constituents.

Why it didn't work

Across 222 grid combinations, median Sharpe=-0.83, best=-0.29. Primary failure mode: no_edge.

Facts (5)

Best grid Sharpe ratio is -0.29 (p=0.32).
period 2022-02-01–2026-06-01; cost=5bps
sharpe_ratio-0.29
Median Sharpe across 222 grid runs is -0.83.
Full grid of 222 parameter combinations.
sharpe_ratio-0.83
Median Sharpe in DOWN regime is -0.45 across 222 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-0.45
Median Sharpe in FLAT regime is -1.30 across 222 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-1.30
Median Sharpe in UP regime is -0.44 across 222 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-0.44

Runs (30)

runparamssharpeUPFLATDOWN
formation_days=10, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-garman-klass-vol-us-sp500-0000
cost_bps: 5
n_stocks: 5
regime_gate: false
-1.00-1.28-1.39-0.11
formation_days=10, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0001
cost_bps: 5
n_stocks: 5
regime_gate: true
-0.63-0.48-1.39-0.11
formation_days=10, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=False
r-garman-klass-vol-us-sp500-0002
cost_bps: 10
n_stocks: 5
regime_gate: false
-1.13-1.44-1.51-0.21
formation_days=10, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0003
cost_bps: 10
n_stocks: 5
regime_gate: true
-0.74-0.96-1.51-0.21
formation_days=10, holding_days=1, n_stocks=50, cost_bps=5, regime_gate=False
r-garman-klass-vol-us-sp500-0012
cost_bps: 5
n_stocks: 50
regime_gate: false
-0.83-0.82-1.61-0.01
formation_days=10, holding_days=1, n_stocks=50, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0013
cost_bps: 5
n_stocks: 50
regime_gate: true
-0.67-0.48-1.61-0.01
formation_days=10, holding_days=5, n_stocks=10, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0023
cost_bps: 10
n_stocks: 10
regime_gate: true
-0.62-0.73-1.18-0.29
formation_days=10, holding_days=10, n_stocks=5, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0033
cost_bps: 5
n_stocks: 5
regime_gate: true
-0.85+0.38-1.46-0.94
formation_days=10, holding_days=10, n_stocks=50, cost_bps=10, regime_gate=False
r-garman-klass-vol-us-sp500-0046
cost_bps: 10
n_stocks: 50
regime_gate: false
-1.87-1.75-2.44-1.31
formation_days=10, holding_days=10, n_stocks=50, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0047
cost_bps: 10
n_stocks: 50
regime_gate: true
-1.23+0.14-2.44-1.31
formation_days=10, holding_days=20, n_stocks=50, cost_bps=10, regime_gate=False
r-garman-klass-vol-us-sp500-0062
cost_bps: 10
n_stocks: 50
regime_gate: false
-1.43-1.71-1.06-1.60
formation_days=10, holding_days=60, n_stocks=5, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0065
cost_bps: 5
n_stocks: 5
regime_gate: true
-0.29+1.04-0.86-0.19
formation_days=20, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-garman-klass-vol-us-sp500-0080
cost_bps: 5
n_stocks: 5
regime_gate: false
-1.06-1.48-1.41-0.10
formation_days=20, holding_days=1, n_stocks=20, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0089
cost_bps: 5
n_stocks: 20
regime_gate: true
-0.57-0.39-1.43+0.08
formation_days=20, holding_days=5, n_stocks=10, cost_bps=5, regime_gate=False
r-garman-klass-vol-us-sp500-0100
cost_bps: 5
n_stocks: 10
regime_gate: false
-1.10-1.44-1.29-0.32
formation_days=20, holding_days=5, n_stocks=50, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0109
cost_bps: 5
n_stocks: 50
regime_gate: true
-0.53+0.14-1.20-0.26
formation_days=20, holding_days=10, n_stocks=20, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0123
cost_bps: 10
n_stocks: 20
regime_gate: true
-1.12+0.21-2.17-1.04
formation_days=20, holding_days=20, n_stocks=20, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0137
cost_bps: 5
n_stocks: 20
regime_gate: true
-0.65+0.70-0.98-1.26
formation_days=20, holding_days=60, n_stocks=20, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0155
cost_bps: 10
n_stocks: 20
regime_gate: true
-0.41+1.25-1.27-0.16
formation_days=40, holding_days=1, n_stocks=10, cost_bps=10, regime_gate=False
r-garman-klass-vol-us-sp500-0166
cost_bps: 10
n_stocks: 10
regime_gate: false
-0.89-1.09-1.24-0.27
formation_days=40, holding_days=1, n_stocks=50, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0175
cost_bps: 10
n_stocks: 50
regime_gate: true
-0.87-0.87-1.74-0.34
formation_days=40, holding_days=5, n_stocks=20, cost_bps=10, regime_gate=False
r-garman-klass-vol-us-sp500-0186
cost_bps: 10
n_stocks: 20
regime_gate: false
-1.21-1.65-1.18-0.44
formation_days=40, holding_days=10, n_stocks=10, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0199
cost_bps: 10
n_stocks: 10
regime_gate: true
-1.04-0.02-1.75-1.11
formation_days=40, holding_days=20, n_stocks=5, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0211
cost_bps: 10
n_stocks: 5
regime_gate: true
-0.64-0.08-0.79-1.07
formation_days=40, holding_days=60, n_stocks=50, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0237
cost_bps: 5
n_stocks: 50
regime_gate: true
-0.38+1.12-1.26-0.27
formation_days=60, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-garman-klass-vol-us-sp500-0240
cost_bps: 5
n_stocks: 5
regime_gate: false
-0.95-1.02-0.94-0.89
formation_days=60, holding_days=1, n_stocks=20, cost_bps=5, regime_gate=False
r-garman-klass-vol-us-sp500-0248
cost_bps: 5
n_stocks: 20
regime_gate: false
-1.01-0.77-1.31-0.98
formation_days=60, holding_days=5, n_stocks=5, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0257
cost_bps: 5
n_stocks: 5
regime_gate: true
-0.69-0.47-0.90-0.93
formation_days=60, holding_days=5, n_stocks=20, cost_bps=10, regime_gate=True
r-garman-klass-vol-us-sp500-0267
cost_bps: 10
n_stocks: 20
regime_gate: true
-0.68-0.41-1.21-0.48
formation_days=60, holding_days=10, n_stocks=20, cost_bps=5, regime_gate=True
r-garman-klass-vol-us-sp500-0281
cost_bps: 5
n_stocks: 20
regime_gate: true
-1.06+0.21-1.93-1.22

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-30T01:20:51

Related strategies