qbuntuqbuntu

セクターローテーション(東証グロース)のバックテスト

Sector Rotation / Sector Momentum (JP Growth Stocks)

slug: sector-rotation-jp-growth

東証グロース(約495銘柄)でセクターローテーションをバックテストした。576通りの中央値 Sharpe は -0.54。p-value は 0.21。Max DD は -21.9%。期間は 2022-03-01〜2026-09-01。最良 Sharpe +1.03 は代表値ではない。

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

成績の中央値

Sharpe(中央値)
-0.54
Max DD
-21.9%
勝率
—
Alpha(年率)
—
p-value
0.21
期間: 2022-03-01 → 2026-09-01
576通りの Sharpe:中央値 -0.54最良 1.03 (代表値ではない)最悪 -1.69p25–p75 -0.80–-0.29

仮説

原文は英語。

Cross-sectional sector momentum: group stocks by TSE ticker-code sector, compute sector-level momentum, LONG top sectors, SHORT bottom sectors. Tests equal-sector, equal-stock, and cap-weighted approaches.

採用しなかった理由

Across 576 grid combinations, median Sharpe=-0.54, best=1.03. Primary failure mode: no_edge.

検証ファクト (5)

Best grid Sharpe ratio is 1.03 (p=0.033).
period 2022-03-01–2026-09-01; cost=5bps
sharpe_ratio1.03
Median Sharpe across 576 grid runs is -0.54.
Full grid of 576 parameter combinations.
sharpe_ratio-0.54
Median Sharpe in DOWN regime is -2.32 across 576 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-2.32
Median Sharpe in FLAT regime is -0.50 across 576 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.50
Median Sharpe in UP regime is -0.42 across 576 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-0.42

検証ラン (30)

runparamssharpeUPFLATDOWN
formation_days=20, holding_days=5, n_sectors=2, weighting=equal_sector, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0000
cost_bps: 5
n_sectors: 2
weighting: "equal_sector"
-0.80-0.12-1.06-1.34
formation_days=20, holding_days=5, n_sectors=2, weighting=equal_sector, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0001
cost_bps: 5
n_sectors: 2
weighting: "equal_sector"
-0.77+0.33-1.06-1.34
formation_days=20, holding_days=5, n_sectors=2, weighting=equal_sector, cost_bps=10, regime_gate=False
r-sector-rotation-jp-growth-0002
cost_bps: 10
n_sectors: 2
weighting: "equal_sector"
-0.95-0.24-1.23-1.54
formation_days=20, holding_days=5, n_sectors=2, weighting=equal_sector, cost_bps=10, regime_gate=True
r-sector-rotation-jp-growth-0003
cost_bps: 10
n_sectors: 2
weighting: "equal_sector"
-0.92+0.24-1.23-1.54
formation_days=20, holding_days=5, n_sectors=2, weighting=equal_stock, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0004
cost_bps: 5
n_sectors: 2
weighting: "equal_stock"
-1.10-0.58-1.17-1.85
formation_days=20, holding_days=5, n_sectors=2, weighting=cap_weight, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0008
cost_bps: 5
n_sectors: 2
weighting: "cap_weight"
-1.11-0.63-1.32-0.21
formation_days=20, holding_days=5, n_sectors=4, weighting=equal_sector, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0024
cost_bps: 5
n_sectors: 4
weighting: "equal_sector"
-0.64+0.01-1.00+3.22
formation_days=20, holding_days=5, n_sectors=4, weighting=cap_weight, cost_bps=10, regime_gate=False
r-sector-rotation-jp-growth-0034
cost_bps: 10
n_sectors: 4
weighting: "cap_weight"
-1.69-1.17-1.77-2.18
formation_days=20, holding_days=5, n_sectors=4, weighting=cap_weight, cost_bps=10, regime_gate=True
r-sector-rotation-jp-growth-0035
cost_bps: 10
n_sectors: 4
weighting: "cap_weight"
-1.19-0.03-1.77-2.18
formation_days=20, holding_days=10, n_sectors=4, weighting=equal_sector, cost_bps=10, regime_gate=True
r-sector-rotation-jp-growth-0075
cost_bps: 10
n_sectors: 4
weighting: "equal_sector"
-0.44-0.05-0.83+0.55
formation_days=20, holding_days=20, n_sectors=3, weighting=equal_stock, cost_bps=10, regime_gate=True
r-sector-rotation-jp-growth-0115
cost_bps: 10
n_sectors: 3
weighting: "equal_stock"
-0.69-0.36-0.95+0.68
formation_days=20, holding_days=60, n_sectors=2, weighting=equal_sector, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0144
cost_bps: 5
n_sectors: 2
weighting: "equal_sector"
-0.28+0.05-0.42+0.01
formation_days=20, holding_days=60, n_sectors=3, weighting=equal_sector, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0156
cost_bps: 5
n_sectors: 3
weighting: "equal_sector"
-0.20+0.18-0.36+0.04
formation_days=60, holding_days=5, n_sectors=2, weighting=equal_stock, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0196
cost_bps: 5
n_sectors: 2
weighting: "equal_stock"
-0.97-1.19-0.65-6.12
formation_days=60, holding_days=5, n_sectors=4, weighting=cap_weight, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0224
cost_bps: 5
n_sectors: 4
weighting: "cap_weight"
-0.38-0.38-0.38-0.49
formation_days=60, holding_days=10, n_sectors=2, weighting=cap_weight, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0248
cost_bps: 5
n_sectors: 2
weighting: "cap_weight"
+1.03+1.05+1.19+0.03
formation_days=60, holding_days=10, n_sectors=4, weighting=equal_sector, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0265
cost_bps: 5
n_sectors: 4
weighting: "equal_sector"
-0.18-0.01-0.19-2.52
formation_days=60, holding_days=20, n_sectors=3, weighting=equal_stock, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0305
cost_bps: 5
n_sectors: 3
weighting: "equal_stock"
-0.27-0.21-0.21-2.34
formation_days=60, holding_days=60, n_sectors=2, weighting=cap_weight, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0345
cost_bps: 5
n_sectors: 2
weighting: "cap_weight"
+0.25-0.74+0.73+0.86
formation_days=120, holding_days=5, n_sectors=2, weighting=equal_sector, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0385
cost_bps: 5
n_sectors: 2
weighting: "equal_sector"
-0.63-0.18-0.54-2.95
formation_days=120, holding_days=5, n_sectors=4, weighting=equal_stock, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0413
cost_bps: 5
n_sectors: 4
weighting: "equal_stock"
-0.49+0.34-1.14-0.20
formation_days=120, holding_days=10, n_sectors=3, weighting=cap_weight, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0453
cost_bps: 5
n_sectors: 3
weighting: "cap_weight"
-0.24-0.10-0.21-3.07
formation_days=120, holding_days=20, n_sectors=3, weighting=equal_sector, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0493
cost_bps: 5
n_sectors: 3
weighting: "equal_sector"
-0.98-0.72-1.02-1.56
formation_days=120, holding_days=60, n_sectors=2, weighting=equal_stock, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0533
cost_bps: 5
n_sectors: 2
weighting: "equal_stock"
-0.03-0.78+0.36-1.35
formation_days=120, holding_days=60, n_sectors=4, weighting=cap_weight, cost_bps=5, regime_gate=True
r-sector-rotation-jp-growth-0561
cost_bps: 5
n_sectors: 4
weighting: "cap_weight"
-0.78-1.63-0.47-2.59
formation_days=250, holding_days=5, n_sectors=2, weighting=equal_sector, cost_bps=5, regime_gate=False
r-sector-rotation-jp-growth-0576
cost_bps: 5
n_sectors: 2
weighting: "equal_sector"
+0.42+1.07+0.63-2.20
formation_days=250, holding_days=5, n_sectors=4, weighting=equal_sector, cost_bps=10, regime_gate=False
r-sector-rotation-jp-growth-0602
cost_bps: 10
n_sectors: 4
weighting: "equal_sector"
-0.90-0.97-0.63-1.97
formation_days=250, holding_days=10, n_sectors=3, weighting=equal_stock, cost_bps=10, regime_gate=False
r-sector-rotation-jp-growth-0642
cost_bps: 10
n_sectors: 3
weighting: "equal_stock"
-0.86-0.87-0.71-2.62
formation_days=250, holding_days=20, n_sectors=2, weighting=cap_weight, cost_bps=10, regime_gate=False
r-sector-rotation-jp-growth-0682
cost_bps: 10
n_sectors: 2
weighting: "cap_weight"
-0.68-0.56-0.42-7.63
formation_days=250, holding_days=60, n_sectors=2, weighting=equal_sector, cost_bps=10, regime_gate=False
r-sector-rotation-jp-growth-0722
cost_bps: 10
n_sectors: 2
weighting: "equal_sector"
-0.22-0.36+0.32-6.98

対象ユニバース

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:27

関連する戦略