qbuntuqbuntu

Cross-Sectional Momentum (JP Growth Stocks)

slug: momentum-cross-sectional-jp-growth

Cross-Sectional Momentum (JP Growth Stocks) backtest. Median Sharpe across 960 parameter sets is -0.48. p-value is 0.30. Max DD is -32.9%. Period: 2022-05-02 to 2026-09-01. Best Sharpe +0.75 is not the representative figure.

Verdict: rejected. The median reaches neither promising (Sharpe > 0.5 and p-value < 0.05) nor marginal (Sharpe > 0.05 and best p-value < 0.10). Primary reason: no_edge. It is not regime, frequency, or cost, and the median does not clear the bar.

What was tested

Cross-sectional momentum buys recent winners and sells recent losers. The page records the median of that rule, not the parameter cell that looks best. A positive Sharpe in one corner of the grid is not the strategy.

Performance summary

Sharpe (median)
-0.48
Max DD
-32.9%
Win rate
—
Alpha (ann.)
—
p-value
0.30
backtest period: 2022-05-02 → 2026-09-01
Sharpe across 960 grid runs:median -0.48best 0.75 (not representative)worst -1.70p25–p75 -0.74–-0.16

Hypothesis

Jegadeesh & Titman (1993): stocks with high past returns continue to outperform over intermediate horizons. LONG winners, SHORT losers. Tests cross-sectional momentum in TSE Growth Market.

Why it didn't work

Across 960 grid combinations, median Sharpe=-0.48, best=0.75. Primary failure mode: no_edge.

Facts (5)

Best grid Sharpe ratio is 0.75 (p=0.14).
period 2022-05-02–2026-09-01; cost=5bps
sharpe_ratio0.75
cite ↗ /cite/momentum-cross-sectional-jp-growth-fact-best-sharpevia r-momentum-cross-sectional-jp-growth-0536
Median Sharpe across 960 grid runs is -0.48.
Full grid of 960 parameter combinations.
sharpe_ratio-0.48
Median Sharpe in DOWN regime is -1.71 across 960 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-1.71
Median Sharpe in FLAT regime is -0.41 across 960 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.41
Median Sharpe in UP regime is -0.33 across 960 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-0.33

Runs (30)

runparamssharpeUPFLATDOWN
formation_days=60, holding_days=1, n_stocks=5, skip_days=0, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0000
cost_bps: 5
n_stocks: 5
skip_days: 0
-1.05-0.21-1.44-3.71
formation_days=60, holding_days=1, n_stocks=5, skip_days=0, cost_bps=5, regime_gate=True
r-momentum-cross-sectional-jp-growth-0001
cost_bps: 5
n_stocks: 5
skip_days: 0
-1.19-0.65-1.44-3.71
formation_days=60, holding_days=1, n_stocks=5, skip_days=0, cost_bps=10, regime_gate=False
r-momentum-cross-sectional-jp-growth-0002
cost_bps: 10
n_stocks: 5
skip_days: 0
-1.17-0.30-1.57-4.04
formation_days=60, holding_days=1, n_stocks=5, skip_days=0, cost_bps=10, regime_gate=True
r-momentum-cross-sectional-jp-growth-0003
cost_bps: 10
n_stocks: 5
skip_days: 0
-1.29-0.69-1.57-4.04
formation_days=60, holding_days=1, n_stocks=5, skip_days=21, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0008
cost_bps: 5
n_stocks: 5
skip_days: 21
-0.77-0.87-0.93+1.53
formation_days=60, holding_days=1, n_stocks=50, skip_days=0, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0036
cost_bps: 5
n_stocks: 50
skip_days: 0
-1.25-1.44-1.05-5.13
formation_days=60, holding_days=1, n_stocks=50, skip_days=0, cost_bps=10, regime_gate=False
r-momentum-cross-sectional-jp-growth-0038
cost_bps: 10
n_stocks: 50
skip_days: 0
-1.70-1.79-1.53-6.22
formation_days=60, holding_days=5, n_stocks=5, skip_days=0, cost_bps=10, regime_gate=True
r-momentum-cross-sectional-jp-growth-0051
cost_bps: 10
n_stocks: 5
skip_days: 0
-1.01-4.03-0.65-2.38
formation_days=60, holding_days=10, n_stocks=5, skip_days=0, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0096
cost_bps: 5
n_stocks: 5
skip_days: 0
-0.37+0.25-0.41-1.79
formation_days=60, holding_days=10, n_stocks=50, skip_days=21, cost_bps=5, regime_gate=True
r-momentum-cross-sectional-jp-growth-0141
cost_bps: 5
n_stocks: 50
skip_days: 21
+0.01-0.09+0.11-0.29
formation_days=60, holding_days=20, n_stocks=50, skip_days=5, cost_bps=10, regime_gate=False
r-momentum-cross-sectional-jp-growth-0186
cost_bps: 10
n_stocks: 50
skip_days: 5
-0.11-0.00-0.09-0.78
formation_days=60, holding_days=60, n_stocks=5, skip_days=0, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0192
cost_bps: 5
n_stocks: 5
skip_days: 0
+0.01-0.15+0.10-1.35
formation_days=60, holding_days=60, n_stocks=50, skip_days=5, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0232
cost_bps: 5
n_stocks: 50
skip_days: 5
+0.04+0.06+0.21-2.91
formation_days=120, holding_days=1, n_stocks=50, skip_days=0, cost_bps=5, regime_gate=True
r-momentum-cross-sectional-jp-growth-0277
cost_bps: 5
n_stocks: 50
skip_days: 0
-0.61-0.52-0.58-7.42
formation_days=120, holding_days=5, n_stocks=20, skip_days=21, cost_bps=10, regime_gate=False
r-momentum-cross-sectional-jp-growth-0322
cost_bps: 10
n_stocks: 20
skip_days: 21
-0.13+0.31-0.26-0.78
formation_days=120, holding_days=10, n_stocks=20, skip_days=5, cost_bps=10, regime_gate=True
r-momentum-cross-sectional-jp-growth-0367
cost_bps: 10
n_stocks: 20
skip_days: 5
-0.18-0.24-0.07-2.53
formation_days=120, holding_days=20, n_stocks=20, skip_days=5, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0412
cost_bps: 5
n_stocks: 20
skip_days: 5
-0.70-0.33-0.75-2.18
formation_days=120, holding_days=60, n_stocks=20, skip_days=0, cost_bps=5, regime_gate=True
r-momentum-cross-sectional-jp-growth-0457
cost_bps: 5
n_stocks: 20
skip_days: 0
-0.57-0.99-0.32-2.96
formation_days=180, holding_days=1, n_stocks=10, skip_days=21, cost_bps=10, regime_gate=False
r-momentum-cross-sectional-jp-growth-0502
cost_bps: 10
n_stocks: 10
skip_days: 21
-0.23-0.12-0.12-2.45
formation_days=180, holding_days=5, n_stocks=5, skip_days=21, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0536
cost_bps: 5
n_stocks: 5
skip_days: 21
+0.75+2.44+0.43+0.07
formation_days=180, holding_days=5, n_stocks=10, skip_days=21, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0548
cost_bps: 5
n_stocks: 10
skip_days: 21
+0.38+1.37+0.34-1.52
formation_days=180, holding_days=10, n_stocks=10, skip_days=5, cost_bps=5, regime_gate=True
r-momentum-cross-sectional-jp-growth-0593
cost_bps: 5
n_stocks: 10
skip_days: 5
-0.42-0.75-0.15-2.07
formation_days=180, holding_days=20, n_stocks=10, skip_days=0, cost_bps=10, regime_gate=False
r-momentum-cross-sectional-jp-growth-0638
cost_bps: 10
n_stocks: 10
skip_days: 0
-0.89-1.02-0.63-3.30
formation_days=180, holding_days=60, n_stocks=5, skip_days=21, cost_bps=10, regime_gate=True
r-momentum-cross-sectional-jp-growth-0683
cost_bps: 10
n_stocks: 5
skip_days: 21
-0.69-0.88-0.41-1.92
formation_days=250, holding_days=1, n_stocks=5, skip_days=0, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0720
cost_bps: 5
n_stocks: 5
skip_days: 0
-0.11+1.38-0.77-1.55
formation_days=250, holding_days=1, n_stocks=5, skip_days=21, cost_bps=5, regime_gate=True
r-momentum-cross-sectional-jp-growth-0729
cost_bps: 5
n_stocks: 5
skip_days: 21
-0.01+0.94-0.57+2.22
formation_days=250, holding_days=5, n_stocks=5, skip_days=5, cost_bps=10, regime_gate=False
r-momentum-cross-sectional-jp-growth-0774
cost_bps: 10
n_stocks: 5
skip_days: 5
+0.65+2.27+0.11-1.01
formation_days=250, holding_days=10, n_stocks=5, skip_days=0, cost_bps=10, regime_gate=True
r-momentum-cross-sectional-jp-growth-0819
cost_bps: 10
n_stocks: 5
skip_days: 0
-0.44+1.28-0.88-1.01
formation_days=250, holding_days=20, n_stocks=5, skip_days=0, cost_bps=5, regime_gate=False
r-momentum-cross-sectional-jp-growth-0864
cost_bps: 5
n_stocks: 5
skip_days: 0
-1.17+0.38-1.87-2.00
formation_days=250, holding_days=20, n_stocks=50, skip_days=21, cost_bps=5, regime_gate=True
r-momentum-cross-sectional-jp-growth-0909
cost_bps: 5
n_stocks: 50
skip_days: 21
-0.63-0.49-0.43-2.51

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-09-24T21:54:26

Related strategies