qbuntuqbuntu
marginalregime_dependent· equity· factor· interaction· momentum· volume

Momentum × Volume Interaction (US S&P 500)

slug: momentum-volume-us-sp500
performance summary
Sharpe (median)
+0.05
Max DD
-14.0%
Win rate
Alpha (ann.)
p-value
0.59
backtest period: 2022-05-022026-06-01
Sharpe across 320 grid runs:median 0.05best 1.34 (not representative)worst -0.84p25–p75 -0.170.32

Hypothesis

Lee & Swaminathan (2000): volume confirms momentum quality. Applied to S&P 500 constituents.

Why it didn't work

Across 320 grid combinations, median Sharpe=0.05, best=1.34. Primary failure mode: regime_dependent.

Facts (5)

Best grid Sharpe ratio is 1.34 (p=0.0079).
period 2022-05-02–2026-06-01; cost=5bps
sharpe_ratio1.34
Median Sharpe across 320 grid runs is 0.05.
Full grid of 320 parameter combinations.
sharpe_ratio0.05
Median Sharpe in DOWN regime is -0.03 across 320 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-0.03
Median Sharpe in FLAT regime is -0.46 across 320 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.46
Median Sharpe in UP regime is 0.79 across 320 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.79

Runs (30)

runparamssharpeUPFLATDOWN
formation_days=20, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0000
cost_bps: 5
n_stocks: 5
regime_gate: false
+0.90+2.18+0.03+0.44
formation_days=20, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=True
r-momentum-volume-us-sp500-0001
cost_bps: 5
n_stocks: 5
regime_gate: true
+0.54+1.16+0.03+0.44
formation_days=20, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=False
r-momentum-volume-us-sp500-0002
cost_bps: 10
n_stocks: 5
regime_gate: false
+0.65+1.82-0.16+0.25
formation_days=20, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=True
r-momentum-volume-us-sp500-0003
cost_bps: 10
n_stocks: 5
regime_gate: true
+0.35+0.98-0.16+0.25
formation_days=20, holding_days=1, n_stocks=50, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0012
cost_bps: 5
n_stocks: 50
regime_gate: false
+0.19+0.47-0.07+0.31
formation_days=20, holding_days=5, n_stocks=5, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0016
cost_bps: 5
n_stocks: 5
regime_gate: false
+1.34+2.40-0.27+1.96
formation_days=20, holding_days=5, n_stocks=5, cost_bps=10, regime_gate=True
r-momentum-volume-us-sp500-0019
cost_bps: 10
n_stocks: 5
regime_gate: true
+1.17+2.45-0.41+1.86
formation_days=20, holding_days=10, n_stocks=5, cost_bps=5, regime_gate=True
r-momentum-volume-us-sp500-0033
cost_bps: 5
n_stocks: 5
regime_gate: true
+1.07+2.26-0.05+0.87
formation_days=20, holding_days=10, n_stocks=50, cost_bps=10, regime_gate=True
r-momentum-volume-us-sp500-0047
cost_bps: 10
n_stocks: 50
regime_gate: true
-0.04+0.85-1.15-0.18
formation_days=20, holding_days=20, n_stocks=50, cost_bps=5, regime_gate=True
r-momentum-volume-us-sp500-0061
cost_bps: 5
n_stocks: 50
regime_gate: true
+0.31+1.25-0.60+0.09
formation_days=20, holding_days=60, n_stocks=5, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0064
cost_bps: 5
n_stocks: 5
regime_gate: false
+0.05+0.53-0.11-1.01
formation_days=20, holding_days=60, n_stocks=50, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0076
cost_bps: 5
n_stocks: 50
regime_gate: false
-0.03+0.66-0.39-1.62
formation_days=60, holding_days=1, n_stocks=20, cost_bps=10, regime_gate=False
r-momentum-volume-us-sp500-0090
cost_bps: 10
n_stocks: 20
regime_gate: false
-0.13+0.54-0.68-0.57
formation_days=60, holding_days=5, n_stocks=20, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0104
cost_bps: 5
n_stocks: 20
regime_gate: false
+0.08+0.06-0.43+1.08
formation_days=60, holding_days=10, n_stocks=10, cost_bps=10, regime_gate=False
r-momentum-volume-us-sp500-0118
cost_bps: 10
n_stocks: 10
regime_gate: false
-0.32+0.78-1.35-0.03
formation_days=60, holding_days=20, n_stocks=10, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0132
cost_bps: 5
n_stocks: 10
regime_gate: false
-0.10+0.67-0.59-0.36
formation_days=60, holding_days=60, n_stocks=5, cost_bps=10, regime_gate=False
r-momentum-volume-us-sp500-0146
cost_bps: 10
n_stocks: 5
regime_gate: false
-0.13+0.46-0.28-3.62
formation_days=120, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0160
cost_bps: 5
n_stocks: 5
regime_gate: false
-0.21+0.36-0.16-1.55
formation_days=120, holding_days=1, n_stocks=20, cost_bps=10, regime_gate=True
r-momentum-volume-us-sp500-0171
cost_bps: 10
n_stocks: 20
regime_gate: true
-0.84-0.70-1.09-0.74
formation_days=120, holding_days=1, n_stocks=50, cost_bps=10, regime_gate=True
r-momentum-volume-us-sp500-0175
cost_bps: 10
n_stocks: 50
regime_gate: true
-0.80+0.00-1.60-1.14
formation_days=120, holding_days=5, n_stocks=50, cost_bps=5, regime_gate=True
r-momentum-volume-us-sp500-0189
cost_bps: 5
n_stocks: 50
regime_gate: true
+0.28+1.09-0.63+1.09
formation_days=120, holding_days=10, n_stocks=20, cost_bps=10, regime_gate=True
r-momentum-volume-us-sp500-0203
cost_bps: 10
n_stocks: 20
regime_gate: true
-0.45+0.42-0.95-1.26
formation_days=120, holding_days=20, n_stocks=20, cost_bps=5, regime_gate=True
r-momentum-volume-us-sp500-0217
cost_bps: 5
n_stocks: 20
regime_gate: true
+0.10+0.80+0.03-0.94
formation_days=120, holding_days=60, n_stocks=10, cost_bps=10, regime_gate=True
r-momentum-volume-us-sp500-0231
cost_bps: 10
n_stocks: 10
regime_gate: true
+0.57+0.93+0.19+0.11
formation_days=250, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0240
cost_bps: 5
n_stocks: 5
regime_gate: false
+0.15+0.55-0.05-1.49
formation_days=250, holding_days=1, n_stocks=10, cost_bps=10, regime_gate=False
r-momentum-volume-us-sp500-0246
cost_bps: 10
n_stocks: 10
regime_gate: false
-0.10+0.09-0.07-1.12
formation_days=250, holding_days=5, n_stocks=10, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0260
cost_bps: 5
n_stocks: 10
regime_gate: false
+0.39+0.22+0.26+1.80
formation_days=250, holding_days=10, n_stocks=5, cost_bps=10, regime_gate=False
r-momentum-volume-us-sp500-0274
cost_bps: 10
n_stocks: 5
regime_gate: false
-0.59-0.39-1.46+0.51
formation_days=250, holding_days=20, n_stocks=5, cost_bps=5, regime_gate=False
r-momentum-volume-us-sp500-0288
cost_bps: 5
n_stocks: 5
regime_gate: false
-0.41-0.10-0.98+1.06
formation_days=250, holding_days=20, n_stocks=50, cost_bps=10, regime_gate=False
r-momentum-volume-us-sp500-0302
cost_bps: 10
n_stocks: 50
regime_gate: false
+0.06+0.25-0.35+0.81

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:50

Related strategies