決算後ドリフト(PEAD)(東証全銘柄)のバックテスト
Post-Earnings Announcement Drift (JP All Stocks)
slug: pead-jp-all
東証全銘柄(約3,747銘柄)で決算後ドリフト(PEAD)をバックテストした。2,400通りの中央値 Sharpe は +0.11。p-value は 0.55。Max DD は -35.2%。期間は 2023-12-08〜2026-06-16。最良 Sharpe +1.55 は代表値ではない。
判定は marginal。どこかのパラメータでは p-value が 0.10 を下回るが、中央値自体は promising の基準(Sharpe > 0.5 かつ p-value < 0.05)に届いていない。上昇・横ばい・下落で結果が割れ、中央値としては安定しない。
何を検証したか
決算後ドリフト(PEAD)は、決算発表のあとも株価が同じ方向へずれ続ける、という主張をグリッドで検証したものです。発表日のリターンそのものではなく、その後の保有期間で残るかを見ています。中央値の Sharpe が高くても、中央値の p-value が 0.05 を下回らなければ promising にはしません。最良の組み合わせは、期間や保有日数を後から選んだ結果です。
成績の中央値
Sharpe(中央値)
+0.11
Max DD
-35.2%
勝率
—
Alpha(年率)
—
p-value
0.55
期間: 2023-12-08 → 2026-06-16
2400通りの Sharpe:中央値 0.11最良 1.55 (代表値ではない)最悪 -1.48p25–p75 -0.27–0.41
仮説
原文は英語。
Ball & Brown (1968): stocks with positive earnings surprises drift upward. Testing PEAD on the full Japanese stock universe.
採用しなかった理由
Across 2400 grid combinations, median Sharpe=0.11, best=1.55. Primary failure mode: regime_dependent.
検証ファクト (5)
Best grid Sharpe ratio is 1.55 (p=0.015).
period 2023-12-08–2026-06-16; cost=5bps; side=BOTH
cite ↗ /cite/pead-jp-all-fact-best-sharpevia r-pead-jp-all-1368
Median Sharpe across 2400 grid runs is 0.11.
Full grid of 2400 parameter combinations.
Median Sharpe in DOWN regime is 1.07 across 2400 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
Median Sharpe in FLAT regime is -0.86 across 2400 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
Median Sharpe in UP regime is 0.26 across 2400 runs.
Regime=UP, N225 SMA20/SMA60 classification.
検証ラン (30)
| run | params | sharpe | UP | FLAT | DOWN |
|---|---|---|---|---|---|
holding_period=5, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=BOTH r-pead-jp-all-0000 | side: "BOTH" cost_bps: 5 n_positions: 3 | +0.29 | +0.35 | -0.05 | +1.13 |
holding_period=5, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=LONG_ONLY r-pead-jp-all-0001 | side: "LONG_ONLY" cost_bps: 5 n_positions: 3 | -1.05 | -0.82 | -2.75 | +1.38 |
holding_period=5, surprise_threshold=0.01, n_positions=3, cost_bps=10, side=BOTH r-pead-jp-all-0002 | side: "BOTH" cost_bps: 10 n_positions: 3 | +0.16 | +0.23 | -0.22 | +0.95 |
holding_period=5, surprise_threshold=0.01, n_positions=3, cost_bps=20, side=BOTH r-pead-jp-all-0006 | side: "BOTH" cost_bps: 20 n_positions: 3 | -0.11 | -0.01 | -0.55 | +0.59 |
holding_period=5, surprise_threshold=0.01, n_positions=20, cost_bps=5, side=BOTH r-pead-jp-all-0024 | side: "BOTH" cost_bps: 5 n_positions: 20 | +0.32 | +0.63 | -0.59 | +1.18 |
holding_period=5, surprise_threshold=0.02, n_positions=10, cost_bps=5, side=BOTH r-pead-jp-all-0112 | side: "BOTH" cost_bps: 5 n_positions: 10 | +0.40 | +0.60 | -0.56 | +2.39 |
holding_period=5, surprise_threshold=0.03, n_positions=20, cost_bps=15, side=BOTH r-pead-jp-all-0220 | side: "BOTH" cost_bps: 15 n_positions: 20 | +0.17 | +0.16 | -0.23 | +1.93 |
holding_period=5, surprise_threshold=0.05, n_positions=5, cost_bps=5, side=BOTH r-pead-jp-all-0328 | side: "BOTH" cost_bps: 5 n_positions: 5 | +0.30 | +0.01 | +0.67 | +1.32 |
holding_period=5, surprise_threshold=0.07, n_positions=3, cost_bps=5, side=BOTH r-pead-jp-all-0384 | side: "BOTH" cost_bps: 5 n_positions: 3 | +0.42 | +0.25 | +0.38 | +2.18 |
holding_period=5, surprise_threshold=0.07, n_positions=10, cost_bps=15, side=LONG_ONLY r-pead-jp-all-0437 | side: "LONG_ONLY" cost_bps: 15 n_positions: 10 | -1.23 | -0.76 | -2.98 | +0.61 |
holding_period=10, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=LONG_ONLY r-pead-jp-all-0545 | side: "LONG_ONLY" cost_bps: 5 n_positions: 3 | -1.23 | -0.70 | -2.96 | +0.65 |
holding_period=10, surprise_threshold=0.02, n_positions=3, cost_bps=20, side=LONG_ONLY r-pead-jp-all-0583 | side: "LONG_ONLY" cost_bps: 20 n_positions: 3 | -1.48 | -0.92 | -3.18 | +0.36 |
holding_period=10, surprise_threshold=0.02, n_positions=5, cost_bps=20, side=BOTH r-pead-jp-all-0654 | side: "BOTH" cost_bps: 20 n_positions: 5 | -0.44 | -0.34 | -1.02 | +0.78 |
holding_period=10, surprise_threshold=0.03, n_positions=20, cost_bps=10, side=BOTH r-pead-jp-all-0762 | side: "BOTH" cost_bps: 10 n_positions: 20 | +0.02 | -0.08 | -0.25 | +1.54 |
holding_period=10, surprise_threshold=0.07, n_positions=3, cost_bps=20, side=BOTH r-pead-jp-all-0870 | side: "BOTH" cost_bps: 20 n_positions: 3 | +0.35 | +0.12 | +0.70 | +0.90 |
holding_period=20, surprise_threshold=0.01, n_positions=10, cost_bps=10, side=BOTH r-pead-jp-all-0978 | side: "BOTH" cost_bps: 10 n_positions: 10 | +0.42 | +0.18 | +0.38 | +2.01 |
holding_period=20, surprise_threshold=0.02, n_positions=20, cost_bps=20, side=BOTH r-pead-jp-all-1086 | side: "BOTH" cost_bps: 20 n_positions: 20 | +0.57 | +0.33 | +0.53 | +2.60 |
holding_period=20, surprise_threshold=0.03, n_positions=5, cost_bps=10, side=BOTH r-pead-jp-all-1194 | side: "BOTH" cost_bps: 10 n_positions: 5 | +0.51 | +0.40 | +0.09 | +2.45 |
holding_period=20, surprise_threshold=0.05, n_positions=10, cost_bps=20, side=BOTH r-pead-jp-all-1302 | side: "BOTH" cost_bps: 20 n_positions: 10 | +0.67 | +0.27 | +0.61 | +2.56 |
holding_period=20, surprise_threshold=0.07, n_positions=20, cost_bps=5, side=BOTH r-pead-jp-all-1368 | side: "BOTH" cost_bps: 5 n_positions: 20 | +1.55 | +1.29 | +1.42 | +3.17 |
holding_period=20, surprise_threshold=0.07, n_positions=3, cost_bps=10, side=LONG_ONLY r-pead-jp-all-1411 | side: "LONG_ONLY" cost_bps: 10 n_positions: 3 | -0.20 | +0.33 | -1.43 | +1.10 |
holding_period=40, surprise_threshold=0.01, n_positions=5, cost_bps=20, side=LONG_ONLY r-pead-jp-all-1519 | side: "LONG_ONLY" cost_bps: 20 n_positions: 5 | +0.07 | +1.02 | -1.24 | +0.87 |
holding_period=40, surprise_threshold=0.02, n_positions=20, cost_bps=10, side=LONG_ONLY r-pead-jp-all-1627 | side: "LONG_ONLY" cost_bps: 10 n_positions: 20 | 0.00 | +1.47 | -1.61 | +0.44 |
holding_period=40, surprise_threshold=0.05, n_positions=3, cost_bps=20, side=LONG_ONLY r-pead-jp-all-1735 | side: "LONG_ONLY" cost_bps: 20 n_positions: 3 | +0.32 | +1.46 | -1.23 | +1.01 |
holding_period=40, surprise_threshold=0.07, n_positions=10, cost_bps=10, side=LONG_ONLY r-pead-jp-all-1843 | side: "LONG_ONLY" cost_bps: 10 n_positions: 10 | +0.26 | +1.38 | -1.26 | +0.80 |
holding_period=60, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=BOTH r-pead-jp-all-1920 | side: "BOTH" cost_bps: 5 n_positions: 3 | +0.75 | +0.80 | +0.40 | +1.84 |
holding_period=60, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=BOTH r-pead-jp-all-1952 | side: "BOTH" cost_bps: 5 n_positions: 3 | +0.75 | +0.80 | +0.40 | +1.84 |
holding_period=60, surprise_threshold=0.02, n_positions=5, cost_bps=15, side=BOTH r-pead-jp-all-2060 | side: "BOTH" cost_bps: 15 n_positions: 5 | +0.55 | +0.05 | +0.63 | +2.07 |
holding_period=60, surprise_threshold=0.03, n_positions=20, cost_bps=5, side=BOTH r-pead-jp-all-2168 | side: "BOTH" cost_bps: 5 n_positions: 20 | +0.37 | -0.92 | +1.19 | +1.65 |
holding_period=60, surprise_threshold=0.05, n_positions=3, cost_bps=15, side=BOTH r-pead-jp-all-2276 | side: "BOTH" cost_bps: 15 n_positions: 3 | +0.65 | +0.78 | -0.14 | +2.29 |
対象ユニバース
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:46:56