Volume Anomaly (JP Growth Stocks)
slug: volume-anomaly-jp-growth
performance summary
Sharpe (median)
-0.03
Max DD
-44.1%
Win rate
—
Alpha (ann.)
—
p-value
0.58
backtest period: 2022-02-01 → 2026-06-01
Sharpe across 689 grid runs:median -0.03best 0.84 (not representative)worst -1.48p25–p75 -0.29–0.23
Hypothesis
Campbell, Grossman, Wang (1993): abnormal volume spikes predict subsequent price drift or reversal. High volume + positive return signals momentum continuation; high volume + negative return signals overreaction. Tests momentum, reversal, and volume-only directions.
Why it didn't work
Across 689 grid combinations, median Sharpe=-0.03, best=0.84. Primary failure mode: regime_dependent.
Facts (7)
Average monthly return correlation with other strategies in DOWN regime: 0.07
Pairwise Pearson correlation of monthly returns across 42 strategies, filtered to DOWN regime months (N=3, N225 < SMA20 < SMA60)
Average monthly return correlation with other strategies (full period): 0.13
Pairwise Pearson correlation of monthly returns across 42 strategies, full backtest period
Best grid Sharpe ratio is 0.84 (p=0.096).
period 2022-02-01–2026-06-01; cost=5bps
cite ↗ /cite/volume-anomaly-jp-growth-fact-best-sharpevia r-volume-anomaly-jp-growth-0184
Median Sharpe across 689 grid runs is -0.03.
Full grid of 689 parameter combinations.
Median Sharpe in DOWN regime is -0.86 across 689 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
Median Sharpe in FLAT regime is -0.16 across 689 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
Median Sharpe in UP regime is 0.27 across 689 runs.
Regime=UP, N225 SMA20/SMA60 classification.
Runs (30)
| run | params | sharpe | UP | FLAT | DOWN |
|---|---|---|---|---|---|
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0000 | cost_bps: 5 direction: "momentum" regime_gate: false | -0.21 | -0.68 | -0.02 | -1.19 |
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=True r-volume-anomaly-jp-growth-0001 | cost_bps: 5 direction: "momentum" regime_gate: true | -0.44 | -1.06 | -0.02 | -1.19 |
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=10, regime_gate=False r-volume-anomaly-jp-growth-0002 | cost_bps: 10 direction: "momentum" regime_gate: false | -0.42 | -0.89 | -0.22 | -1.64 |
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0003 | cost_bps: 10 direction: "momentum" regime_gate: true | -0.59 | -1.16 | -0.22 | -1.64 |
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=vol_only, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0008 | cost_bps: 5 direction: "vol_only" regime_gate: false | -1.19 | -1.45 | -1.10 | -2.13 |
volume_lookback=5, volume_threshold=1.5, holding_days=20, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0036 | cost_bps: 5 direction: "momentum" regime_gate: false | +0.41 | +0.10 | +0.61 | -0.77 |
volume_lookback=5, volume_threshold=1.5, holding_days=20, direction=momentum, cost_bps=5, regime_gate=True r-volume-anomaly-jp-growth-0037 | cost_bps: 5 direction: "momentum" regime_gate: true | +0.31 | +0.01 | +0.61 | -0.77 |
volume_lookback=5, volume_threshold=2, holding_days=5, direction=vol_only, cost_bps=5, regime_gate=True r-volume-anomaly-jp-growth-0069 | cost_bps: 5 direction: "vol_only" regime_gate: true | -0.19 | +0.86 | -0.34 | -2.51 |
volume_lookback=5, volume_threshold=3, holding_days=1, direction=reversal, cost_bps=5, regime_gate=True r-volume-anomaly-jp-growth-0101 | cost_bps: 5 direction: "reversal" regime_gate: true | -0.65 | -0.98 | -0.46 | -2.79 |
volume_lookback=5, volume_threshold=3, holding_days=20, direction=momentum, cost_bps=5, regime_gate=True r-volume-anomaly-jp-growth-0133 | cost_bps: 5 direction: "momentum" regime_gate: true | +0.16 | +0.79 | -0.27 | -0.86 |
volume_lookback=5, volume_threshold=5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0144 | cost_bps: 5 direction: "momentum" regime_gate: false | -0.08 | -0.28 | -0.03 | +0.25 |
volume_lookback=5, volume_threshold=5, holding_days=10, direction=momentum, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0171 | cost_bps: 10 direction: "momentum" regime_gate: true | +0.06 | +0.80 | -0.60 | -1.16 |
volume_lookback=5, volume_threshold=5, holding_days=20, direction=reversal, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0184 | cost_bps: 5 direction: "reversal" regime_gate: false | +0.84 | +0.02 | +0.94 | +2.48 |
volume_lookback=10, volume_threshold=1.5, holding_days=5, direction=momentum, cost_bps=10, regime_gate=False r-volume-anomaly-jp-growth-0206 | cost_bps: 10 direction: "momentum" regime_gate: false | -0.11 | +0.32 | -0.26 | -2.55 |
volume_lookback=10, volume_threshold=1.5, holding_days=20, direction=vol_only, cost_bps=10, regime_gate=False r-volume-anomaly-jp-growth-0238 | cost_bps: 10 direction: "vol_only" regime_gate: false | -0.34 | +0.17 | -0.41 | -2.19 |
volume_lookback=10, volume_threshold=2, holding_days=1, direction=vol_only, cost_bps=10, regime_gate=False r-volume-anomaly-jp-growth-0250 | cost_bps: 10 direction: "vol_only" regime_gate: false | -1.48 | -1.23 | -1.43 | -3.83 |
volume_lookback=10, volume_threshold=2, holding_days=10, direction=reversal, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0271 | cost_bps: 10 direction: "reversal" regime_gate: true | +0.13 | +0.06 | +0.25 | -1.11 |
volume_lookback=10, volume_threshold=3, holding_days=5, direction=reversal, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0307 | cost_bps: 10 direction: "reversal" regime_gate: true | +0.01 | +0.52 | -0.18 | -1.40 |
volume_lookback=10, volume_threshold=5, holding_days=1, direction=reversal, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0343 | cost_bps: 10 direction: "reversal" regime_gate: true | +0.19 | +0.40 | +0.11 | -0.31 |
volume_lookback=20, volume_threshold=1.5, holding_days=1, direction=reversal, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0391 | cost_bps: 10 direction: "reversal" regime_gate: true | +0.14 | -0.24 | +0.38 | +0.09 |
volume_lookback=20, volume_threshold=1.5, holding_days=20, direction=momentum, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0423 | cost_bps: 10 direction: "momentum" regime_gate: true | +0.18 | +0.22 | +0.26 | -3.46 |
volume_lookback=20, volume_threshold=2, holding_days=5, direction=vol_only, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0455 | cost_bps: 10 direction: "vol_only" regime_gate: true | -0.75 | +0.60 | -0.98 | -3.96 |
volume_lookback=20, volume_threshold=3, holding_days=1, direction=reversal, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0487 | cost_bps: 10 direction: "reversal" regime_gate: true | -0.19 | -0.84 | +0.10 | +0.24 |
volume_lookback=20, volume_threshold=3, holding_days=20, direction=vol_only, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0527 | cost_bps: 10 direction: "vol_only" regime_gate: true | -0.29 | -0.17 | -0.11 | -5.33 |
volume_lookback=20, volume_threshold=5, holding_days=20, direction=reversal, cost_bps=10, regime_gate=True r-volume-anomaly-jp-growth-0571 | cost_bps: 10 direction: "reversal" regime_gate: true | +0.59 | +1.12 | +0.39 | +0.46 |
volume_lookback=60, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0576 | cost_bps: 5 direction: "momentum" regime_gate: false | -0.66 | +0.05 | -0.95 | +0.13 |
volume_lookback=60, volume_threshold=1.5, holding_days=10, direction=vol_only, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0608 | cost_bps: 5 direction: "vol_only" regime_gate: false | -0.21 | +0.44 | -0.35 | -3.16 |
volume_lookback=60, volume_threshold=2, holding_days=5, direction=vol_only, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0644 | cost_bps: 5 direction: "vol_only" regime_gate: false | -0.81 | +0.58 | -1.17 | -3.01 |
volume_lookback=60, volume_threshold=3, holding_days=1, direction=reversal, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0676 | cost_bps: 5 direction: "reversal" regime_gate: false | +0.12 | -0.83 | +0.56 | -0.80 |
volume_lookback=60, volume_threshold=5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-growth-0720 | cost_bps: 5 direction: "momentum" regime_gate: false | -0.81 | -0.16 | -1.04 | -0.26 |
Target universe
Tokyo Stock Exchange Growth Market, ~495 stocks, tv >= 30M JPY
source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-07-28T01:10:32