qbuntuqbuntu
rejectedno_edge· equity· dispersion· regime· timing

Cross-Sectional Dispersion Trading (JP All Stocks)

slug: dispersion-jp-all
performance summary
Sharpe (median)
-0.16
Max DD
-31.3%
Win rate
Alpha (ann.)
p-value
0.49
backtest period: 2022-03-012026-02-02
Sharpe across 192 grid runs:median -0.16best 0.57 (not representative)worst -0.95p25–p75 -0.370.05

Hypothesis

Stivers (2010), Jiang (2010): cross-sectional return dispersion as a market timing signal. Testing on the full Japanese stock universe.

Why it didn't work

Across 192 grid combinations, median Sharpe=-0.16, best=0.57. Primary failure mode: no_edge.

Facts (5)

Best grid Sharpe ratio is 0.57 (p=0.25).
period 2022-03-01–2026-02-02; cost=5bps
sharpe_ratio0.57
Median Sharpe across 192 grid runs is -0.16.
Full grid of 192 parameter combinations.
sharpe_ratio-0.16
Median Sharpe in DOWN regime is -0.18 across 192 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-0.18
Median Sharpe in FLAT regime is -0.25 across 192 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.25
Median Sharpe in UP regime is 0.43 across 192 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.43

Runs (30)

runparamssharpeUPFLATDOWN
dispersion_window=10, holding_days=5, base_signal=momentum_20, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0000
cost_bps: 5
n_stocks: 5
base_signal: "momentum_20"
-0.50+0.30-0.54-1.84
dispersion_window=10, holding_days=5, base_signal=momentum_20, n_stocks=5, cost_bps=10
r-dispersion-jp-all-0001
cost_bps: 10
n_stocks: 5
base_signal: "momentum_20"
-0.64+0.11-0.67-1.96
dispersion_window=10, holding_days=5, base_signal=momentum_20, n_stocks=10, cost_bps=5
r-dispersion-jp-all-0002
cost_bps: 5
n_stocks: 10
base_signal: "momentum_20"
+0.57+1.58+0.23+0.18
dispersion_window=10, holding_days=5, base_signal=momentum_20, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0003
cost_bps: 10
n_stocks: 10
base_signal: "momentum_20"
+0.41+1.45+0.05+0.05
dispersion_window=10, holding_days=5, base_signal=momentum_60, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0008
cost_bps: 5
n_stocks: 5
base_signal: "momentum_60"
+0.03+0.38+0.03-1.18
dispersion_window=10, holding_days=5, base_signal=mean_reversion, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0016
cost_bps: 5
n_stocks: 5
base_signal: "mean_reversion"
-0.34-0.66-0.29-0.08
dispersion_window=10, holding_days=5, base_signal=mean_reversion, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0019
cost_bps: 10
n_stocks: 10
base_signal: "mean_reversion"
-0.95-2.23-0.43-1.12
dispersion_window=10, holding_days=10, base_signal=momentum_20, n_stocks=10, cost_bps=5
r-dispersion-jp-all-0026
cost_bps: 5
n_stocks: 10
base_signal: "momentum_20"
+0.44+1.75+0.08+0.21
dispersion_window=10, holding_days=10, base_signal=mean_reversion, n_stocks=10, cost_bps=5
r-dispersion-jp-all-0042
cost_bps: 5
n_stocks: 10
base_signal: "mean_reversion"
-0.78-2.55-0.41-0.20
dispersion_window=10, holding_days=20, base_signal=momentum_60, n_stocks=10, cost_bps=5
r-dispersion-jp-all-0058
cost_bps: 5
n_stocks: 10
base_signal: "momentum_60"
-0.07+1.36-0.69+2.29
dispersion_window=10, holding_days=60, base_signal=momentum_20, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0072
cost_bps: 5
n_stocks: 5
base_signal: "momentum_20"
-0.20+0.75-0.54+2.48
dispersion_window=10, holding_days=60, base_signal=momentum_20, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0075
cost_bps: 10
n_stocks: 10
base_signal: "momentum_20"
+0.17+1.67-0.25+3.60
dispersion_window=10, holding_days=60, base_signal=mean_reversion, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0091
cost_bps: 10
n_stocks: 10
base_signal: "mean_reversion"
-0.29-0.92-0.03-10.01
dispersion_window=20, holding_days=5, base_signal=momentum_60, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0107
cost_bps: 10
n_stocks: 10
base_signal: "momentum_60"
+0.14+0.48+0.01-0.43
dispersion_window=20, holding_days=10, base_signal=momentum_20, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0123
cost_bps: 10
n_stocks: 10
base_signal: "momentum_20"
+0.34+1.65-0.03+0.14
dispersion_window=20, holding_days=10, base_signal=mean_reversion, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0139
cost_bps: 10
n_stocks: 10
base_signal: "mean_reversion"
-0.89-2.67-0.53-0.27
dispersion_window=20, holding_days=20, base_signal=momentum_60, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0155
cost_bps: 10
n_stocks: 10
base_signal: "momentum_60"
-0.16+1.28-0.79+2.07
dispersion_window=20, holding_days=60, base_signal=momentum_20, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0171
cost_bps: 10
n_stocks: 10
base_signal: "momentum_20"
+0.17+1.67-0.25+3.60
dispersion_window=20, holding_days=60, base_signal=mean_reversion, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0187
cost_bps: 10
n_stocks: 10
base_signal: "mean_reversion"
-0.29-0.92-0.03-10.01
dispersion_window=40, holding_days=5, base_signal=momentum_60, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0203
cost_bps: 10
n_stocks: 10
base_signal: "momentum_60"
+0.14+0.48+0.01-0.43
dispersion_window=40, holding_days=10, base_signal=momentum_20, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0219
cost_bps: 10
n_stocks: 10
base_signal: "momentum_20"
+0.34+1.65-0.03+0.14
dispersion_window=40, holding_days=10, base_signal=mean_reversion, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0235
cost_bps: 10
n_stocks: 10
base_signal: "mean_reversion"
-0.85-2.67-0.47-0.27
dispersion_window=40, holding_days=20, base_signal=momentum_60, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0251
cost_bps: 10
n_stocks: 10
base_signal: "momentum_60"
-0.16+1.28-0.79+2.07
dispersion_window=40, holding_days=60, base_signal=momentum_20, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0267
cost_bps: 10
n_stocks: 10
base_signal: "momentum_20"
+0.17+1.67-0.25+3.60
dispersion_window=40, holding_days=60, base_signal=mean_reversion, n_stocks=10, cost_bps=10
r-dispersion-jp-all-0283
cost_bps: 10
n_stocks: 10
base_signal: "mean_reversion"
-0.26-0.92+0.02-10.01
dispersion_window=60, holding_days=5, base_signal=momentum_20, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0288
cost_bps: 5
n_stocks: 5
base_signal: "momentum_20"
-0.50+0.30-0.54-1.84
dispersion_window=60, holding_days=5, base_signal=mean_reversion, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0304
cost_bps: 5
n_stocks: 5
base_signal: "mean_reversion"
-0.32-0.66-0.25-0.08
dispersion_window=60, holding_days=10, base_signal=momentum_60, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0320
cost_bps: 5
n_stocks: 5
base_signal: "momentum_60"
+0.14+0.67-0.20+2.14
dispersion_window=60, holding_days=20, base_signal=momentum_20, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0336
cost_bps: 5
n_stocks: 5
base_signal: "momentum_20"
-0.37+1.18-0.90-0.15
dispersion_window=60, holding_days=20, base_signal=mean_reversion, n_stocks=5, cost_bps=5
r-dispersion-jp-all-0352
cost_bps: 5
n_stocks: 5
base_signal: "mean_reversion"
+0.05-2.06+0.71-1.66

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-31T01:32:26

Related strategies