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

Post-Earnings Announcement Drift (JP Growth Stocks)

slug: pead-jp-growth
performance summary
Sharpe (median)
-0.28
Max DD
-47.2%
Win rate
Alpha (ann.)
p-value
0.63
backtest period: 2023-12-082026-06-09
Sharpe across 2400 grid runs:median -0.28best 1.14 (not representative)worst -1.46p25–p75 -0.52-0.09

Hypothesis

Ball & Brown (1968): stocks with positive earnings surprises drift upward over subsequent weeks/months, negative surprises drift downward. Tests PEAD with varying holding periods (5-60 days) in TSE Growth Market. Note: lookback_days is defined in grid but unused in evaluation (surprise is always 1-day abnormal return); grid inflates 3x as a result.

Why it didn't work

Across 2400 grid combinations, median Sharpe=-0.28, best=1.14. Primary failure mode: regime_dependent.

Facts (7)

Average monthly return correlation with other strategies in DOWN regime: -0.24
Pairwise Pearson correlation of monthly returns across 42 strategies, filtered to DOWN regime months (N=3, N225 < SMA20 < SMA60)
correlation-0.24
Average monthly return correlation with other strategies (full period): 0.07
Pairwise Pearson correlation of monthly returns across 42 strategies, full backtest period
correlation0.07
Best grid Sharpe ratio is 1.14 (p=0.074).
period 2023-12-08–2026-06-09; cost=5bps; side=BOTH
sharpe_ratio1.14
Median Sharpe across 2400 grid runs is -0.28.
Full grid of 2400 parameter combinations.
sharpe_ratio-0.28
Median Sharpe in DOWN regime is 1.13 across 2400 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio1.13
Median Sharpe in FLAT regime is -0.98 across 2400 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.98
Median Sharpe in UP regime is -0.30 across 2400 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-0.30

Runs (30)

runparamssharpeUPFLATDOWN
holding_period=5, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=BOTH
r-pead-jp-growth-0000
side: "BOTH"
cost_bps: 5
n_positions: 3
+0.06-0.29+0.55+0.93
holding_period=5, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=LONG_ONLY
r-pead-jp-growth-0001
side: "LONG_ONLY"
cost_bps: 5
n_positions: 3
-1.03-1.10-2.19+1.54
holding_period=5, surprise_threshold=0.01, n_positions=3, cost_bps=10, side=BOTH
r-pead-jp-growth-0002
side: "BOTH"
cost_bps: 10
n_positions: 3
-0.06-0.39+0.41+0.75
holding_period=5, surprise_threshold=0.01, n_positions=3, cost_bps=20, side=BOTH
r-pead-jp-growth-0006
side: "BOTH"
cost_bps: 20
n_positions: 3
-0.29-0.59+0.12+0.39
holding_period=5, surprise_threshold=0.01, n_positions=20, cost_bps=5, side=BOTH
r-pead-jp-growth-0024
side: "BOTH"
cost_bps: 5
n_positions: 20
+0.19+0.08+0.17+1.26
holding_period=5, surprise_threshold=0.02, n_positions=10, cost_bps=5, side=BOTH
r-pead-jp-growth-0112
side: "BOTH"
cost_bps: 5
n_positions: 10
+0.25+0.11+0.06+2.40
holding_period=5, surprise_threshold=0.03, n_positions=20, cost_bps=15, side=BOTH
r-pead-jp-growth-0220
side: "BOTH"
cost_bps: 15
n_positions: 20
+0.02-0.20+0.03+1.90
holding_period=5, surprise_threshold=0.05, n_positions=20, cost_bps=20, side=LONG_ONLY
r-pead-jp-growth-0319
side: "LONG_ONLY"
cost_bps: 20
n_positions: 20
-1.46-1.54-2.48+1.12
holding_period=5, surprise_threshold=0.05, n_positions=5, cost_bps=5, side=LONG_ONLY
r-pead-jp-growth-0329
side: "LONG_ONLY"
cost_bps: 5
n_positions: 5
-1.07-1.31-1.72+1.53
holding_period=5, surprise_threshold=0.07, n_positions=3, cost_bps=5, side=BOTH
r-pead-jp-growth-0384
side: "BOTH"
cost_bps: 5
n_positions: 3
+0.17-0.12+0.41+2.04
holding_period=5, surprise_threshold=0.07, n_positions=10, cost_bps=20, side=BOTH
r-pead-jp-growth-0438
side: "BOTH"
cost_bps: 20
n_positions: 10
-0.07-0.18-0.41+2.13
holding_period=10, surprise_threshold=0.01, n_positions=3, cost_bps=10, side=BOTH
r-pead-jp-growth-0546
side: "BOTH"
cost_bps: 10
n_positions: 3
-0.49-0.57-0.64+0.32
holding_period=10, surprise_threshold=0.02, n_positions=5, cost_bps=20, side=BOTH
r-pead-jp-growth-0654
side: "BOTH"
cost_bps: 20
n_positions: 5
-0.68-0.94-0.64+0.72
holding_period=10, surprise_threshold=0.03, n_positions=20, cost_bps=10, side=BOTH
r-pead-jp-growth-0762
side: "BOTH"
cost_bps: 10
n_positions: 20
-0.23-0.50-0.19+1.40
holding_period=10, surprise_threshold=0.07, n_positions=3, cost_bps=20, side=BOTH
r-pead-jp-growth-0870
side: "BOTH"
cost_bps: 20
n_positions: 3
-0.32-0.58+0.04+0.45
holding_period=20, surprise_threshold=0.01, n_positions=10, cost_bps=10, side=BOTH
r-pead-jp-growth-0978
side: "BOTH"
cost_bps: 10
n_positions: 10
+0.28-0.26+0.30+2.15
holding_period=20, surprise_threshold=0.02, n_positions=20, cost_bps=20, side=BOTH
r-pead-jp-growth-1086
side: "BOTH"
cost_bps: 20
n_positions: 20
+0.39-0.07+0.26+2.74
holding_period=20, surprise_threshold=0.03, n_positions=5, cost_bps=10, side=BOTH
r-pead-jp-growth-1194
side: "BOTH"
cost_bps: 10
n_positions: 5
+0.21-0.18+0.04+2.67
holding_period=20, surprise_threshold=0.05, n_positions=20, cost_bps=5, side=BOTH
r-pead-jp-growth-1272
side: "BOTH"
cost_bps: 5
n_positions: 20
+1.14+0.47+1.23+3.70
holding_period=20, surprise_threshold=0.05, n_positions=10, cost_bps=20, side=LONG_ONLY
r-pead-jp-growth-1303
side: "LONG_ONLY"
cost_bps: 20
n_positions: 10
-0.30+0.05-1.22+0.84
holding_period=20, surprise_threshold=0.07, n_positions=3, cost_bps=10, side=LONG_ONLY
r-pead-jp-growth-1411
side: "LONG_ONLY"
cost_bps: 10
n_positions: 3
-0.41-0.14-1.48+1.15
holding_period=40, surprise_threshold=0.01, n_positions=5, cost_bps=20, side=LONG_ONLY
r-pead-jp-growth-1519
side: "LONG_ONLY"
cost_bps: 20
n_positions: 5
-0.27-0.37-0.76+1.08
holding_period=40, surprise_threshold=0.02, n_positions=20, cost_bps=10, side=LONG_ONLY
r-pead-jp-growth-1627
side: "LONG_ONLY"
cost_bps: 10
n_positions: 20
-0.30-0.09-1.10+0.62
holding_period=40, surprise_threshold=0.05, n_positions=3, cost_bps=20, side=LONG_ONLY
r-pead-jp-growth-1735
side: "LONG_ONLY"
cost_bps: 20
n_positions: 3
-0.39-0.39-1.07+1.00
holding_period=40, surprise_threshold=0.07, n_positions=10, cost_bps=10, side=LONG_ONLY
r-pead-jp-growth-1843
side: "LONG_ONLY"
cost_bps: 10
n_positions: 10
-0.44-0.46-1.05+0.79
holding_period=60, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=BOTH
r-pead-jp-growth-1920
side: "BOTH"
cost_bps: 5
n_positions: 3
-0.31+0.66-1.18+1.78
holding_period=60, surprise_threshold=0.01, n_positions=3, cost_bps=5, side=BOTH
r-pead-jp-growth-1952
side: "BOTH"
cost_bps: 5
n_positions: 3
-0.31+0.66-1.18+1.78
holding_period=60, surprise_threshold=0.02, n_positions=5, cost_bps=15, side=BOTH
r-pead-jp-growth-2060
side: "BOTH"
cost_bps: 15
n_positions: 5
-0.32+0.31-1.01+2.06
holding_period=60, surprise_threshold=0.03, n_positions=20, cost_bps=5, side=BOTH
r-pead-jp-growth-2168
side: "BOTH"
cost_bps: 5
n_positions: 20
-0.58-0.07-1.10+0.77
holding_period=60, surprise_threshold=0.05, n_positions=3, cost_bps=15, side=BOTH
r-pead-jp-growth-2276
side: "BOTH"
cost_bps: 15
n_positions: 3
-0.18+0.62-1.06+1.74

Target universe

Tokyo Stock Exchange Growth Market, ~495 stocks, tv >= 30M JPY

Related strategies

source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-07-27T03:36:53

Related strategies