Post-Earnings Announcement Drift (JP All Stocks)
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
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)
Runs (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 |