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

Post-Earnings Announcement Drift (JP All Stocks)

slug: pead-jp-all

Post-Earnings Announcement Drift (JP All Stocks) backtest. Median Sharpe across 2,400 parameter sets is +0.11. p-value is 0.55. Max DD is -35.2%. Period: 2023-12-08 to 2026-06-16. Best Sharpe +1.55 is not the representative figure.

Verdict: marginal. Some parameter set has a p-value under 0.10, but the median itself misses promising (Sharpe > 0.5 and p-value < 0.05). Results split across up, flat, and down markets, so the median is not stable.

What was tested

Post-earnings announcement drift asks whether prices keep moving in the earnings direction after the announcement. The headline is the median across holding periods and parameters. A high median Sharpe is not promising unless the median p-value is under 0.05. The best cell is a parameter choice made after seeing the grid.

Performance summary

Sharpe (median)
+0.11
Max DD
-35.2%
Win rate
—
Alpha (ann.)
—
p-value
0.55
backtest period: 2023-12-08 → 2026-06-16
Sharpe across 2400 grid runs:median 0.11best 1.55 (not representative)worst -1.48p25–p75 -0.27–0.41

Hypothesis

Ball & Brown (1968): stocks with positive earnings surprises drift upward. Testing PEAD on the full Japanese stock universe.

Why it didn't work

Across 2400 grid combinations, median Sharpe=0.11, best=1.55. Primary failure mode: regime_dependent.

Facts (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

Runs (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

Target universe

Tokyo Stock Exchange all listed (Prime/Standard/Growth), ~3747 stocks

Related strategies

source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-09-26T05:46:56

Related strategies