Volume Anomaly (JP All Stocks)
slug: volume-anomaly-jp-all
performance summary
Sharpe (median)
-0.24
Max DD
-23.2%
Win rate
—
Alpha (ann.)
—
p-value
0.50
backtest period: 2022-02-01 → 2026-06-01
Sharpe across 564 grid runs:median -0.24best 2.25 (not representative)worst -5.20p25–p75 -0.64–0.27
Hypothesis
Campbell, Grossman, Wang (1993): abnormal volume spikes predict subsequent price drift or reversal. Testing on the full Japanese stock universe.
Why it didn't work
Across 564 grid combinations, median Sharpe=-0.24, best=2.25. Primary failure mode: no_edge.
Facts (5)
Best grid Sharpe ratio is 2.25 (p=0.1).
period 2022-02-01–2026-06-01; cost=5bps
cite ↗ /cite/volume-anomaly-jp-all-fact-best-sharpevia r-volume-anomaly-jp-all-0676
Median Sharpe across 564 grid runs is -0.24.
Full grid of 564 parameter combinations.
Median Sharpe in DOWN regime is nan across 564 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
Median Sharpe in FLAT regime is -0.23 across 564 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
Median Sharpe in UP regime is -0.28 across 564 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-all-0000 | cost_bps: 5 direction: "momentum" regime_gate: false | -1.31 | -0.62 | -1.32 | — |
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=True r-volume-anomaly-jp-all-0001 | cost_bps: 5 direction: "momentum" regime_gate: true | -1.17 | -0.52 | -1.32 | — |
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0002 | cost_bps: 10 direction: "momentum" regime_gate: false | -1.44 | -0.81 | -1.45 | — |
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=10, regime_gate=True r-volume-anomaly-jp-all-0003 | cost_bps: 10 direction: "momentum" regime_gate: true | -1.27 | -0.60 | -1.45 | — |
volume_lookback=5, volume_threshold=1.5, holding_days=1, direction=vol_only, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0008 | cost_bps: 5 direction: "vol_only" regime_gate: false | -1.11 | -0.62 | -1.44 | — |
volume_lookback=5, volume_threshold=1.5, holding_days=10, direction=reversal, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0030 | cost_bps: 10 direction: "reversal" regime_gate: false | -0.71 | -1.65 | -0.59 | — |
volume_lookback=5, volume_threshold=1.5, holding_days=20, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0036 | cost_bps: 5 direction: "momentum" regime_gate: false | +0.39 | +1.72 | -0.13 | — |
volume_lookback=5, volume_threshold=2, holding_days=1, direction=vol_only, cost_bps=5, regime_gate=True r-volume-anomaly-jp-all-0057 | cost_bps: 5 direction: "vol_only" regime_gate: true | -1.34 | +0.07 | -1.70 | — |
volume_lookback=5, volume_threshold=2, holding_days=10, direction=vol_only, cost_bps=10, regime_gate=True r-volume-anomaly-jp-all-0083 | cost_bps: 10 direction: "vol_only" regime_gate: true | -0.54 | -2.56 | -0.30 | — |
volume_lookback=5, volume_threshold=3, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0096 | cost_bps: 5 direction: "momentum" regime_gate: false | -0.19 | -1.72 | +0.44 | — |
volume_lookback=5, volume_threshold=3, holding_days=5, direction=momentum, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0110 | cost_bps: 10 direction: "momentum" regime_gate: false | -1.15 | -0.82 | -1.27 | — |
volume_lookback=5, volume_threshold=3, holding_days=20, direction=reversal, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0136 | cost_bps: 5 direction: "reversal" regime_gate: false | -2.12 | -1.77 | -2.28 | — |
volume_lookback=10, volume_threshold=1.5, holding_days=5, direction=reversal, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0210 | cost_bps: 10 direction: "reversal" regime_gate: false | -0.18 | +0.31 | -0.35 | — |
volume_lookback=10, volume_threshold=2, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0240 | cost_bps: 5 direction: "momentum" regime_gate: false | +0.16 | -1.87 | +0.71 | — |
volume_lookback=10, volume_threshold=2, holding_days=10, direction=momentum, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0266 | cost_bps: 10 direction: "momentum" regime_gate: false | +0.66 | -0.75 | +0.88 | — |
volume_lookback=10, volume_threshold=3, holding_days=1, direction=reversal, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0292 | cost_bps: 5 direction: "reversal" regime_gate: false | +0.89 | +1.53 | +0.23 | — |
volume_lookback=10, volume_threshold=3, holding_days=10, direction=reversal, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0318 | cost_bps: 10 direction: "reversal" regime_gate: false | -0.29 | +2.53 | -4.84 | — |
volume_lookback=20, volume_threshold=1.5, holding_days=1, direction=vol_only, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0392 | cost_bps: 5 direction: "vol_only" regime_gate: false | -0.82 | -0.49 | -1.08 | — |
volume_lookback=20, volume_threshold=1.5, holding_days=20, direction=momentum, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0422 | cost_bps: 10 direction: "momentum" regime_gate: false | +1.60 | +1.91 | +1.41 | — |
volume_lookback=20, volume_threshold=2, holding_days=5, direction=vol_only, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0452 | cost_bps: 5 direction: "vol_only" regime_gate: false | -0.70 | -0.45 | -0.67 | — |
volume_lookback=20, volume_threshold=2, holding_days=20, direction=vol_only, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0478 | cost_bps: 10 direction: "vol_only" regime_gate: false | -0.72 | -0.54 | -0.56 | — |
volume_lookback=20, volume_threshold=3, holding_days=10, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0504 | cost_bps: 5 direction: "momentum" regime_gate: false | +1.42 | +0.72 | +3.35 | — |
volume_lookback=20, volume_threshold=3, holding_days=10, direction=reversal, cost_bps=10, regime_gate=True r-volume-anomaly-jp-all-0511 | cost_bps: 10 direction: "reversal" regime_gate: true | -5.20 | -8.38 | -4.19 | — |
volume_lookback=60, volume_threshold=1.5, holding_days=1, direction=momentum, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0576 | cost_bps: 5 direction: "momentum" regime_gate: false | -0.09 | -1.09 | +0.41 | — |
volume_lookback=60, volume_threshold=1.5, holding_days=1, direction=reversal, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0580 | cost_bps: 5 direction: "reversal" regime_gate: false | -0.10 | +0.89 | -0.59 | — |
volume_lookback=60, volume_threshold=1.5, holding_days=10, direction=reversal, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0606 | cost_bps: 10 direction: "reversal" regime_gate: false | 0.00 | +0.76 | -0.34 | — |
volume_lookback=60, volume_threshold=2, holding_days=1, direction=vol_only, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0632 | cost_bps: 5 direction: "vol_only" regime_gate: false | -1.63 | -3.18 | -1.50 | — |
volume_lookback=60, volume_threshold=2, holding_days=10, direction=vol_only, cost_bps=10, regime_gate=False r-volume-anomaly-jp-all-0658 | cost_bps: 10 direction: "vol_only" regime_gate: false | -0.76 | -1.64 | -0.50 | — |
volume_lookback=60, volume_threshold=3, holding_days=1, direction=reversal, cost_bps=5, regime_gate=False r-volume-anomaly-jp-all-0676 | cost_bps: 5 direction: "reversal" regime_gate: false | +2.25 | +4.09 | +2.02 | — |
volume_lookback=60, volume_threshold=3, holding_days=5, direction=momentum, cost_bps=5, regime_gate=True r-volume-anomaly-jp-all-0685 | cost_bps: 5 direction: "momentum" regime_gate: true | -0.68 | +2.61 | -0.94 | — |
Target universe
Tokyo Stock Exchange all listed (Prime/Standard/Growth), ~3747 stocks
Related strategies
source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-07-28T01:10:38