決算リバーサル(東証全銘柄)のバックテスト
Earnings Reversal (JP All Stocks)
slug: earnings-reversal-short-jp-all
東証全銘柄(約3,747銘柄)で決算リバーサルをバックテストした。2,880通りの中央値 Sharpe は -0.79。p-value は 0.18。Max DD は -83.4%。期間は 2023-12-12〜2026-05-29。最良 Sharpe +1.65 は代表値ではない。
判定は rejected。中央値は promising(Sharpe > 0.5 かつ p-value < 0.05)にも marginal(Sharpe > 0.05 かつ最良 p-value < 0.10)にも届いていない。主因は no_edge。レジーム・取引回数・コストには分類されず、中央値が採用ラインに届いていない。
成績の中央値
Sharpe(中央値)
-0.79
Max DD
-83.4%
勝率
—
Alpha(年率)
—
p-value
0.18
期間: 2023-12-12 → 2026-05-29
2880通りの Sharpe:中央値 -0.79最良 1.65 (代表値ではない)最悪 -5.87p25–p75 -2.72–0.62
仮説
原文は英語。
Post-earnings price reactions tend to overshoot. Testing on the full Japanese stock universe.
採用しなかった理由
Across 2880 grid combinations, median Sharpe=-0.79, best=1.65. Primary failure mode: no_edge.
検証ファクト (5)
Best grid Sharpe ratio is 1.65 (p=0.032).
period 2023-12-12–2026-05-29; cost=5bps; side=SHORT_ONLY
cite ↗ /cite/earnings-reversal-short-jp-all-fact-best-sharpevia r-earnings-reversal-short-jp-all-2772
Median Sharpe across 2880 grid runs is -0.79.
Full grid of 2880 parameter combinations.
Median Sharpe in DOWN regime is -2.86 across 2880 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
Median Sharpe in FLAT regime is -1.11 across 2880 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
Median Sharpe in UP regime is 0.02 across 2880 runs.
Regime=UP, N225 SMA20/SMA60 classification.
検証ラン (30)
| run | params | sharpe | UP | FLAT | DOWN |
|---|---|---|---|---|---|
holding_period=1, reaction_threshold=0.03, n_positions=1, cost_bps=5, side=SHORT_ONLY r-earnings-reversal-short-jp-all-0000 | side: "SHORT_ONLY" cost_bps: 5 n_positions: 1 | +1.22 | +1.68 | +0.92 | +0.29 |
holding_period=1, reaction_threshold=0.03, n_positions=1, cost_bps=5, side=LONG_ONLY r-earnings-reversal-short-jp-all-0001 | side: "LONG_ONLY" cost_bps: 5 n_positions: 1 | -2.54 | -0.48 | -4.70 | -4.06 |
holding_period=1, reaction_threshold=0.03, n_positions=1, cost_bps=5, side=BOTH r-earnings-reversal-short-jp-all-0002 | side: "BOTH" cost_bps: 5 n_positions: 1 | +0.67 | +1.63 | +0.01 | -2.15 |
holding_period=1, reaction_threshold=0.03, n_positions=1, cost_bps=20, side=SHORT_ONLY r-earnings-reversal-short-jp-all-0009 | side: "SHORT_ONLY" cost_bps: 20 n_positions: 1 | +0.86 | +1.32 | +0.60 | -0.13 |
holding_period=1, reaction_threshold=0.03, n_positions=10, cost_bps=5, side=SHORT_ONLY r-earnings-reversal-short-jp-all-0036 | side: "SHORT_ONLY" cost_bps: 5 n_positions: 10 | +1.10 | +1.44 | +0.89 | +0.45 |
holding_period=1, reaction_threshold=0.03, n_positions=10, cost_bps=5, side=BOTH r-earnings-reversal-short-jp-all-0134 | side: "BOTH" cost_bps: 5 n_positions: 10 | -0.74 | +0.52 | -2.07 | -3.76 |
holding_period=1, reaction_threshold=0.05, n_positions=5, cost_bps=5, side=SHORT_ONLY r-earnings-reversal-short-jp-all-0264 | side: "SHORT_ONLY" cost_bps: 5 n_positions: 5 | +1.03 | +1.42 | +0.75 | +0.38 |
holding_period=1, reaction_threshold=0.07, n_positions=1, cost_bps=20, side=LONG_ONLY r-earnings-reversal-short-jp-all-0394 | side: "LONG_ONLY" cost_bps: 20 n_positions: 1 | -3.93 | -1.31 | -6.85 | -6.50 |
holding_period=1, reaction_threshold=0.1, n_positions=10, cost_bps=15, side=BOTH r-earnings-reversal-short-jp-all-0524 | side: "BOTH" cost_bps: 15 n_positions: 10 | -1.33 | +0.33 | -2.48 | -5.14 |
holding_period=1, reaction_threshold=0.15, n_positions=1, cost_bps=5, side=SHORT_ONLY r-earnings-reversal-short-jp-all-0576 | side: "SHORT_ONLY" cost_bps: 5 n_positions: 1 | +1.42 | +2.10 | +0.28 | +2.60 |
holding_period=1, reaction_threshold=0.15, n_positions=5, cost_bps=15, side=LONG_ONLY r-earnings-reversal-short-jp-all-0655 | side: "LONG_ONLY" cost_bps: 15 n_positions: 5 | -5.53 | -2.67 | -8.60 | -7.41 |
holding_period=2, reaction_threshold=0.03, n_positions=3, cost_bps=10, side=BOTH r-earnings-reversal-short-jp-all-0785 | side: "BOTH" cost_bps: 10 n_positions: 3 | -0.86 | -0.43 | -0.93 | -3.16 |
holding_period=2, reaction_threshold=0.05, n_positions=1, cost_bps=10, side=SHORT_ONLY r-earnings-reversal-short-jp-all-0915 | side: "SHORT_ONLY" cost_bps: 10 n_positions: 1 | +1.01 | +1.21 | +1.49 | -1.40 |
holding_period=2, reaction_threshold=0.07, n_positions=10, cost_bps=5, side=LONG_ONLY r-earnings-reversal-short-jp-all-1045 | side: "LONG_ONLY" cost_bps: 5 n_positions: 10 | -4.69 | -3.70 | -5.64 | -5.12 |
holding_period=2, reaction_threshold=0.1, n_positions=3, cost_bps=20, side=BOTH r-earnings-reversal-short-jp-all-1175 | side: "BOTH" cost_bps: 20 n_positions: 3 | -1.17 | -0.47 | -1.30 | -4.80 |
holding_period=2, reaction_threshold=0.15, n_positions=1, cost_bps=20, side=SHORT_ONLY r-earnings-reversal-short-jp-all-1305 | side: "SHORT_ONLY" cost_bps: 20 n_positions: 1 | +1.08 | +0.68 | +1.54 | +1.52 |
holding_period=2, reaction_threshold=0.15, n_positions=10, cost_bps=20, side=LONG_ONLY r-earnings-reversal-short-jp-all-1342 | side: "LONG_ONLY" cost_bps: 20 n_positions: 10 | -5.87 | -4.23 | -7.24 | -7.31 |
holding_period=2, reaction_threshold=0.15, n_positions=10, cost_bps=15, side=BOTH r-earnings-reversal-short-jp-all-1436 | side: "BOTH" cost_bps: 15 n_positions: 10 | -0.91 | -0.04 | -1.64 | -2.89 |
holding_period=3, reaction_threshold=0.03, n_positions=5, cost_bps=15, side=SHORT_ONLY r-earnings-reversal-short-jp-all-1566 | side: "SHORT_ONLY" cost_bps: 15 n_positions: 5 | +0.26 | +0.47 | +0.30 | -0.93 |
holding_period=3, reaction_threshold=0.05, n_positions=3, cost_bps=10, side=LONG_ONLY r-earnings-reversal-short-jp-all-1696 | side: "LONG_ONLY" cost_bps: 10 n_positions: 3 | -3.43 | -2.35 | -4.20 | -4.41 |
holding_period=3, reaction_threshold=0.07, n_positions=1, cost_bps=5, side=BOTH r-earnings-reversal-short-jp-all-1826 | side: "BOTH" cost_bps: 5 n_positions: 1 | +0.35 | +0.33 | +0.98 | -1.62 |
holding_period=3, reaction_threshold=0.1, n_positions=10, cost_bps=5, side=SHORT_ONLY r-earnings-reversal-short-jp-all-1956 | side: "SHORT_ONLY" cost_bps: 5 n_positions: 10 | +0.98 | +1.18 | +0.93 | +0.36 |
holding_period=3, reaction_threshold=0.15, n_positions=3, cost_bps=20, side=LONG_ONLY r-earnings-reversal-short-jp-all-2086 | side: "LONG_ONLY" cost_bps: 20 n_positions: 3 | -3.73 | -2.01 | -4.43 | -7.43 |
holding_period=5, reaction_threshold=0.03, n_positions=1, cost_bps=5, side=SHORT_ONLY r-earnings-reversal-short-jp-all-2160 | side: "SHORT_ONLY" cost_bps: 5 n_positions: 1 | +1.10 | +1.03 | +1.73 | -0.20 |
holding_period=5, reaction_threshold=0.03, n_positions=1, cost_bps=20, side=SHORT_ONLY r-earnings-reversal-short-jp-all-2217 | side: "SHORT_ONLY" cost_bps: 20 n_positions: 1 | +0.90 | +0.84 | +1.51 | -0.39 |
holding_period=5, reaction_threshold=0.05, n_positions=10, cost_bps=15, side=LONG_ONLY r-earnings-reversal-short-jp-all-2347 | side: "LONG_ONLY" cost_bps: 15 n_positions: 10 | -2.69 | -1.38 | -3.68 | -4.02 |
holding_period=5, reaction_threshold=0.07, n_positions=5, cost_bps=10, side=BOTH r-earnings-reversal-short-jp-all-2477 | side: "BOTH" cost_bps: 10 n_positions: 5 | -0.81 | -0.61 | -1.01 | -2.43 |
holding_period=5, reaction_threshold=0.1, n_positions=3, cost_bps=10, side=SHORT_ONLY r-earnings-reversal-short-jp-all-2607 | side: "SHORT_ONLY" cost_bps: 10 n_positions: 3 | +1.10 | +0.93 | +2.35 | -1.00 |
holding_period=5, reaction_threshold=0.15, n_positions=1, cost_bps=5, side=LONG_ONLY r-earnings-reversal-short-jp-all-2737 | side: "LONG_ONLY" cost_bps: 5 n_positions: 1 | -2.31 | -0.61 | -3.61 | -5.14 |
holding_period=5, reaction_threshold=0.15, n_positions=10, cost_bps=5, side=SHORT_ONLY r-earnings-reversal-short-jp-all-2772 | side: "SHORT_ONLY" cost_bps: 5 n_positions: 10 | +1.65 | +1.23 | +2.99 | +0.41 |
対象ユニバース
Tokyo Stock Exchange all listed (Prime/Standard/Growth), ~3747 stocks
関連する戦略
source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-09-26T05:50:51