qbuntuqbuntu
marginalregime_dependent· equity· earnings· event-driven· momentum

決算後ドリフト(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
sharpe_ratio1.55
Median Sharpe across 2400 grid runs is 0.11.
Full grid of 2400 parameter combinations.
sharpe_ratio0.11
Median Sharpe in DOWN regime is 1.07 across 2400 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio1.07
Median Sharpe in FLAT regime is -0.86 across 2400 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.86
Median Sharpe in UP regime is 0.26 across 2400 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.26

検証ラン (30)

runparamssharpeUPFLATDOWN
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

関連する戦略