qbuntuqbuntu

クロスセクショナル・モメンタム(東証グロース)のバックテスト

Cross-Sectional Momentum (JP Growth Stocks)

slug: momentum-cross-sectional-jp-growth

東証グロース(約495銘柄)でクロスセクショナル・モメンタムをバックテストした。960通りの中央値 Sharpe は -0.48。p-value は 0.30。Max DD は -32.9%。期間は 2022-05-02〜2026-09-01。最良 Sharpe +0.75 は代表値ではない。

判定は rejected。中央値は promising(Sharpe > 0.5 かつ p-value < 0.05)にも marginal(Sharpe > 0.05 かつ最良 p-value < 0.10)にも届いていない。主因は no_edge。レジーム・取引回数・コストには分類されず、中央値が採用ラインに届いていない。

何を検証したか

クロスセクショナル・モメンタムは、直近のリターンが高かった銘柄を買い、低かった銘柄を売る方法です。日本ではこの横断の効きが弱いことが長く指摘されていて、このページはその主張をパラメータ全体の中央値で見ています。グリッドの端に Sharpe がプラスの組み合わせが残っても、それはこの戦略の成績ではありません。

成績の中央値

Sharpe(中央値)
-0.48
Max DD
-32.9%
勝率
—
Alpha(年率)
—
p-value
0.30
期間: 2022-05-02 → 2026-09-01
960通りの Sharpe:中央値 -0.48最良 0.75 (代表値ではない)最悪 -1.70p25–p75 -0.74–-0.16

仮説

原文は英語。

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.

採用しなかった理由

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

検証ファクト (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

検証ラン (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

対象ユニバース

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

関連する戦略