qbuntuqbuntu
marginalno_edge· equity· anomaly· factor· volume

Volume Anomaly (US S&P 500)

slug: volume-anomaly-us-sp500
performance summary
Sharpe (median)
+0.08
Max DD
-14.7%
Win rate
Alpha (ann.)
p-value
0.40
backtest period: 2022-02-012026-06-01
Sharpe across 768 grid runs:median 0.08best 3.07 (not representative)worst -2.98p25–p75 -0.540.49

Hypothesis

Campbell, Grossman, Wang (1993): abnormal volume spikes predict subsequent price drift or reversal. Applied to S&P 500 constituents.

Why it didn't work

Across 768 grid combinations, median Sharpe=0.08, best=3.07. Primary failure mode: no_edge.

Facts (5)

Best grid Sharpe ratio is 3.07 (p=0.039).
period 2022-02-01–2026-06-01; cost=5bps
sharpe_ratio3.07
Median Sharpe across 768 grid runs is 0.08.
Full grid of 768 parameter combinations.
sharpe_ratio0.08
Median Sharpe in DOWN regime is 0.48 across 768 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio0.48
Median Sharpe in FLAT regime is -0.02 across 768 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.02
Median Sharpe in UP regime is -0.21 across 768 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-0.21

Runs (30)

runparamssharpeUPFLATDOWN
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0000
cost_bps: 5
direction: "momentum"
regime_gate: false
+0.15+0.87-0.02-1.28
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=True
r-volume-anomaly-us-sp500-0001
cost_bps: 5
direction: "momentum"
regime_gate: true
+0.30+0.72-0.02-1.28
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=10, regime_gate=False
r-volume-anomaly-us-sp500-0002
cost_bps: 10
direction: "momentum"
regime_gate: false
-0.30+0.42-0.52-1.69
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0003
cost_bps: 10
direction: "momentum"
regime_gate: true
+0.04+0.52-0.52-1.69
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=vol_only, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0008
cost_bps: 5
direction: "vol_only"
regime_gate: false
+0.23+0.16-0.56+1.64
volume_lookback=5, volume_threshold=1.5, holding_days=20, direction=momentum, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0036
cost_bps: 5
direction: "momentum"
regime_gate: false
+0.33+0.95-0.97+0.55
volume_lookback=5, volume_threshold=1.5, holding_days=20, direction=reversal, cost_bps=5, regime_gate=True
r-volume-anomaly-us-sp500-0041
cost_bps: 5
direction: "reversal"
regime_gate: true
+0.01+0.09+0.67-0.65
volume_lookback=5, volume_threshold=2, holding_days=10, direction=reversal, cost_bps=5, regime_gate=True
r-volume-anomaly-us-sp500-0077
cost_bps: 5
direction: "reversal"
regime_gate: true
+0.42-0.18+0.58+1.59
volume_lookback=5, volume_threshold=3, holding_days=5, direction=reversal, cost_bps=5, regime_gate=True
r-volume-anomaly-us-sp500-0113
cost_bps: 5
direction: "reversal"
regime_gate: true
+0.25+0.17-0.09+3.02
volume_lookback=5, volume_threshold=5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0144
cost_bps: 5
direction: "momentum"
regime_gate: false
+0.19-1.33+0.58
volume_lookback=5, volume_threshold=5, holding_days=1, direction=reversal, cost_bps=10, regime_gate=False
r-volume-anomaly-us-sp500-0150
cost_bps: 10
direction: "reversal"
regime_gate: false
-0.46+0.96-0.78
volume_lookback=5, volume_threshold=5, holding_days=10, direction=momentum, cost_bps=10, regime_gate=False
r-volume-anomaly-us-sp500-0170
cost_bps: 10
direction: "momentum"
regime_gate: false
-2.98-2.28-3.12
volume_lookback=5, volume_threshold=5, holding_days=20, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0187
cost_bps: 10
direction: "reversal"
regime_gate: true
+2.10+3.24+1.01
volume_lookback=10, volume_threshold=1.5, holding_days=10, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0223
cost_bps: 10
direction: "reversal"
regime_gate: true
-0.34-0.64-0.69+2.01
volume_lookback=10, volume_threshold=2, holding_days=5, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0259
cost_bps: 10
direction: "reversal"
regime_gate: true
+0.46+0.08+0.32+1.55
volume_lookback=10, volume_threshold=3, holding_days=1, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0295
cost_bps: 10
direction: "reversal"
regime_gate: true
-0.02-0.69+0.01+1.71
volume_lookback=10, volume_threshold=3, holding_days=20, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0331
cost_bps: 10
direction: "reversal"
regime_gate: true
+1.03+0.73+1.09+1.87
volume_lookback=10, volume_threshold=5, holding_days=10, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0367
cost_bps: 10
direction: "reversal"
regime_gate: true
+1.82+92.61+1.92
volume_lookback=20, volume_threshold=1.5, holding_days=5, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0403
cost_bps: 10
direction: "reversal"
regime_gate: true
-0.43-0.20-1.29-0.15
volume_lookback=20, volume_threshold=2, holding_days=1, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0439
cost_bps: 10
direction: "reversal"
regime_gate: true
-0.09-0.65+0.04+2.02
volume_lookback=20, volume_threshold=2, holding_days=20, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0475
cost_bps: 10
direction: "reversal"
regime_gate: true
+0.21-0.23+0.81+0.93
volume_lookback=20, volume_threshold=3, holding_days=10, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0511
cost_bps: 10
direction: "reversal"
regime_gate: true
+0.23-0.01+0.55+0.41
volume_lookback=20, volume_threshold=5, holding_days=5, direction=reversal, cost_bps=10, regime_gate=True
r-volume-anomaly-us-sp500-0547
cost_bps: 10
direction: "reversal"
regime_gate: true
+1.26+5.24+0.52+2.45
volume_lookback=60, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0576
cost_bps: 5
direction: "momentum"
regime_gate: false
-0.29-0.05+0.19-1.84
volume_lookback=60, volume_threshold=1.5, holding_days=1, direction=vol_only, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0584
cost_bps: 5
direction: "vol_only"
regime_gate: false
+0.20-0.03-0.55+2.15
volume_lookback=60, volume_threshold=1.5, holding_days=20, direction=vol_only, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0620
cost_bps: 5
direction: "vol_only"
regime_gate: false
+1.21+1.00+0.63+2.99
volume_lookback=60, volume_threshold=2, holding_days=10, direction=vol_only, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0656
cost_bps: 5
direction: "vol_only"
regime_gate: false
+0.29-0.69+0.18+2.24
volume_lookback=60, volume_threshold=3, holding_days=5, direction=vol_only, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0692
cost_bps: 5
direction: "vol_only"
regime_gate: false
-0.70-1.62+0.61+0.20
volume_lookback=60, volume_threshold=5, holding_days=1, direction=vol_only, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0728
cost_bps: 5
direction: "vol_only"
regime_gate: false
+0.03-3.57+2.83+1.04
volume_lookback=60, volume_threshold=5, holding_days=20, direction=vol_only, cost_bps=5, regime_gate=False
r-volume-anomaly-us-sp500-0764
cost_bps: 5
direction: "vol_only"
regime_gate: false
+3.07+2.64+1.80+6.64

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