qbuntuqbuntu
rejectedregime_dependent· equity· dispersion· regime· timing

Cross-Sectional Dispersion Trading (JP Growth Stocks)

slug: dispersion-jp-growth
performance summary
Sharpe (median)
-0.16
Max DD
-33.9%
Win rate
Alpha (ann.)
p-value
0.52
backtest period: 2022-03-012026-06-01
Sharpe across 384 grid runs:median -0.16best 0.55 (not representative)worst -1.41p25–p75 -0.500.07

Hypothesis

Stivers (2010), Jiang (2010): cross-sectional return dispersion as a market timing signal. High dispersion favors momentum; low dispersion favors mean reversion. Switches between base signals based on dispersion regime.

Why it didn't work

Across 384 grid combinations, median Sharpe=-0.16, best=0.55. 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)
correlation0.07
Average monthly return correlation with other strategies (full period): 0.02
Pairwise Pearson correlation of monthly returns across 42 strategies, full backtest period
correlation0.02
Best grid Sharpe ratio is 0.55 (p=0.26).
period 2022-03-01–2026-06-01; cost=5bps
sharpe_ratio0.55
Median Sharpe across 384 grid runs is -0.16.
Full grid of 384 parameter combinations.
sharpe_ratio-0.16
Median Sharpe in DOWN regime is -1.32 across 384 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-1.32
Median Sharpe in FLAT regime is -0.03 across 384 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.03
Median Sharpe in UP regime is -0.29 across 384 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-0.29

Runs (30)

runparamssharpeUPFLATDOWN
dispersion_window=10, holding_days=5, base_signal=momentum_20, n_stocks=5, cost_bps=5
r-dispersion-jp-growth-0000
cost_bps: 5
n_stocks: 5
base_signal: "momentum_20"
-1.34-1.43-1.18-2.70
dispersion_window=10, holding_days=5, base_signal=momentum_20, n_stocks=5, cost_bps=10
r-dispersion-jp-growth-0001
cost_bps: 10
n_stocks: 5
base_signal: "momentum_20"
-1.41-1.52-1.25-2.75
dispersion_window=10, holding_days=5, base_signal=momentum_20, n_stocks=10, cost_bps=5
r-dispersion-jp-growth-0002
cost_bps: 5
n_stocks: 10
base_signal: "momentum_20"
-1.21-1.76-0.96-1.72
dispersion_window=10, holding_days=5, base_signal=momentum_20, n_stocks=50, cost_bps=5
r-dispersion-jp-growth-0006
cost_bps: 5
n_stocks: 50
base_signal: "momentum_20"
-0.51-1.16-0.10-1.51
dispersion_window=10, holding_days=5, base_signal=momentum_60, n_stocks=5, cost_bps=5
r-dispersion-jp-growth-0008
cost_bps: 5
n_stocks: 5
base_signal: "momentum_60"
-1.00-1.66-0.74-2.33
dispersion_window=10, holding_days=5, base_signal=mean_reversion, n_stocks=5, cost_bps=5
r-dispersion-jp-growth-0016
cost_bps: 5
n_stocks: 5
base_signal: "mean_reversion"
-0.24-1.47+0.38+1.45
dispersion_window=10, holding_days=5, base_signal=mean_reversion, n_stocks=50, cost_bps=5
r-dispersion-jp-growth-0022
cost_bps: 5
n_stocks: 50
base_signal: "mean_reversion"
-0.12-0.60-0.05+1.17
dispersion_window=10, holding_days=10, base_signal=momentum_60, n_stocks=50, cost_bps=10
r-dispersion-jp-growth-0039
cost_bps: 10
n_stocks: 50
base_signal: "momentum_60"
+0.04+0.39-0.01-1.06
dispersion_window=10, holding_days=20, base_signal=momentum_60, n_stocks=5, cost_bps=5
r-dispersion-jp-growth-0056
cost_bps: 5
n_stocks: 5
base_signal: "momentum_60"
-0.70-0.30-0.80-1.53
dispersion_window=10, holding_days=60, base_signal=momentum_20, n_stocks=5, cost_bps=5
r-dispersion-jp-growth-0072
cost_bps: 5
n_stocks: 5
base_signal: "momentum_20"
-0.24+0.12-0.22-1.73
dispersion_window=10, holding_days=60, base_signal=momentum_20, n_stocks=10, cost_bps=5
r-dispersion-jp-growth-0074
cost_bps: 5
n_stocks: 10
base_signal: "momentum_20"
-0.02+0.09-0.03-0.32
dispersion_window=10, holding_days=60, base_signal=mean_reversion, n_stocks=10, cost_bps=10
r-dispersion-jp-growth-0091
cost_bps: 10
n_stocks: 10
base_signal: "mean_reversion"
+0.02-0.65+0.24-0.90
dispersion_window=20, holding_days=5, base_signal=momentum_60, n_stocks=20, cost_bps=5
r-dispersion-jp-growth-0108
cost_bps: 5
n_stocks: 20
base_signal: "momentum_60"
-0.57-0.45-0.55-1.16
dispersion_window=20, holding_days=10, base_signal=momentum_20, n_stocks=20, cost_bps=10
r-dispersion-jp-growth-0125
cost_bps: 10
n_stocks: 20
base_signal: "momentum_20"
+0.05+0.05+0.23-2.64
dispersion_window=20, holding_days=10, base_signal=mean_reversion, n_stocks=50, cost_bps=5
r-dispersion-jp-growth-0142
cost_bps: 5
n_stocks: 50
base_signal: "mean_reversion"
-0.38-1.24-0.26+0.77
dispersion_window=20, holding_days=20, base_signal=momentum_60, n_stocks=50, cost_bps=10
r-dispersion-jp-growth-0159
cost_bps: 10
n_stocks: 50
base_signal: "momentum_60"
-0.32-0.32-0.17-1.67
dispersion_window=20, holding_days=60, base_signal=momentum_60, n_stocks=5, cost_bps=5
r-dispersion-jp-growth-0176
cost_bps: 5
n_stocks: 5
base_signal: "momentum_60"
-0.04-0.27+0.05-1.35
dispersion_window=40, holding_days=5, base_signal=momentum_20, n_stocks=5, cost_bps=10
r-dispersion-jp-growth-0193
cost_bps: 10
n_stocks: 5
base_signal: "momentum_20"
-1.41-1.52-1.25-2.75
dispersion_window=40, holding_days=5, base_signal=mean_reversion, n_stocks=10, cost_bps=5
r-dispersion-jp-growth-0210
cost_bps: 5
n_stocks: 10
base_signal: "mean_reversion"
-0.14-0.60+0.01+1.14
dispersion_window=40, holding_days=10, base_signal=momentum_60, n_stocks=10, cost_bps=10
r-dispersion-jp-growth-0227
cost_bps: 10
n_stocks: 10
base_signal: "momentum_60"
+0.03-0.22+0.21-1.28
dispersion_window=40, holding_days=20, base_signal=momentum_20, n_stocks=20, cost_bps=5
r-dispersion-jp-growth-0244
cost_bps: 5
n_stocks: 20
base_signal: "momentum_20"
-0.39+0.51-0.54-2.41
dispersion_window=40, holding_days=20, base_signal=mean_reversion, n_stocks=20, cost_bps=10
r-dispersion-jp-growth-0261
cost_bps: 10
n_stocks: 20
base_signal: "mean_reversion"
+0.26-1.07+0.53+2.84
dispersion_window=40, holding_days=20, base_signal=mean_reversion, n_stocks=50, cost_bps=5
r-dispersion-jp-growth-0262
cost_bps: 5
n_stocks: 50
base_signal: "mean_reversion"
+0.55+0.77+0.45+2.73
dispersion_window=40, holding_days=60, base_signal=momentum_60, n_stocks=50, cost_bps=10
r-dispersion-jp-growth-0279
cost_bps: 10
n_stocks: 50
base_signal: "momentum_60"
+0.21+0.22+0.37-2.13
dispersion_window=60, holding_days=5, base_signal=momentum_20, n_stocks=5, cost_bps=5
r-dispersion-jp-growth-0288
cost_bps: 5
n_stocks: 5
base_signal: "momentum_20"
-1.34-1.43-1.18-2.70
dispersion_window=60, holding_days=5, base_signal=momentum_60, n_stocks=5, cost_bps=10
r-dispersion-jp-growth-0297
cost_bps: 10
n_stocks: 5
base_signal: "momentum_60"
-1.06-1.75-0.79-2.38
dispersion_window=60, holding_days=10, base_signal=momentum_20, n_stocks=10, cost_bps=5
r-dispersion-jp-growth-0314
cost_bps: 5
n_stocks: 10
base_signal: "momentum_20"
-0.16-0.05-0.10-1.64
dispersion_window=60, holding_days=10, base_signal=mean_reversion, n_stocks=10, cost_bps=10
r-dispersion-jp-growth-0331
cost_bps: 10
n_stocks: 10
base_signal: "mean_reversion"
-0.50-2.19+0.09-2.21
dispersion_window=60, holding_days=20, base_signal=momentum_60, n_stocks=20, cost_bps=5
r-dispersion-jp-growth-0348
cost_bps: 5
n_stocks: 20
base_signal: "momentum_60"
-0.14+0.71-0.23-2.85
dispersion_window=60, holding_days=60, base_signal=momentum_20, n_stocks=20, cost_bps=10
r-dispersion-jp-growth-0365
cost_bps: 10
n_stocks: 20
base_signal: "momentum_20"
-0.14-0.31-0.08-2.34

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

Related strategies