qbuntuqbuntu
marginalregime_dependent· equity· anomaly· calendar· seasonal

Calendar Effects (US S&P 500)

slug: calendar-effects-us-sp500
performance summary
Sharpe (median)
+0.23
Max DD
-14.4%
Win rate
Alpha (ann.)
p-value
0.33
backtest period: 2022-01-142026-06-09
Sharpe across 192 grid runs:median 0.23best 6.18 (not representative)worst -2.91p25–p75 -0.521.18

Hypothesis

Tests well-known calendar anomalies: Halloween effect, January effect, Turn-of-Month, and Day-of-Week effects. Applied to S&P 500 constituents.

Why it didn't work

Across 192 grid combinations, median Sharpe=0.23, best=6.18. Primary failure mode: regime_dependent.

Facts (5)

Best grid Sharpe ratio is 6.18 (p=0.039).
period 2022-01-14–2026-06-09; cost=5bps
sharpe_ratio6.18
Median Sharpe across 192 grid runs is 0.23.
Full grid of 192 parameter combinations.
sharpe_ratio0.23
Median Sharpe in DOWN regime is -0.08 across 192 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-0.08
Median Sharpe in FLAT regime is 0.28 across 192 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio0.28
Median Sharpe in UP regime is 0.96 across 192 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.96

Runs (30)

runparamssharpeUPFLATDOWN
effect=halloween, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0000
effect: "halloween"
cost_bps: 5
n_stocks: 5
-0.43-0.80-0.36+0.14
effect=halloween, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0001
effect: "halloween"
cost_bps: 5
n_stocks: 5
-0.31-0.70-0.36+0.14
effect=halloween, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=False
r-calendar-effects-us-sp500-0002
effect: "halloween"
cost_bps: 10
n_stocks: 5
-1.37-1.87-1.30-0.58
effect=halloween, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=True
r-calendar-effects-us-sp500-0003
effect: "halloween"
cost_bps: 10
n_stocks: 5
-1.20-1.68-1.30-0.58
effect=halloween, holding_days=1, n_stocks=20, cost_bps=10, regime_gate=True
r-calendar-effects-us-sp500-0011
effect: "halloween"
cost_bps: 10
n_stocks: 20
-1.31-1.87-1.88-0.12
effect=halloween, holding_days=1, n_stocks=50, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0012
effect: "halloween"
cost_bps: 5
n_stocks: 50
-0.81-1.54-1.21+0.78
effect=halloween, holding_days=5, n_stocks=10, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0020
effect: "halloween"
cost_bps: 5
n_stocks: 10
+0.09-0.87+0.68+0.57
effect=halloween, holding_days=5, n_stocks=50, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0028
effect: "halloween"
cost_bps: 5
n_stocks: 50
-0.27-0.60-0.74+0.72
effect=halloween, holding_days=20, n_stocks=5, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0032
effect: "halloween"
cost_bps: 5
n_stocks: 5
+0.16-0.15+0.82-0.25
effect=halloween, holding_days=20, n_stocks=10, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0037
effect: "halloween"
cost_bps: 5
n_stocks: 10
+1.00+1.90+1.29-0.01
effect=halloween, holding_days=20, n_stocks=50, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0045
effect: "halloween"
cost_bps: 5
n_stocks: 50
+0.63+0.63+0.94+0.17
effect=january, holding_days=1, n_stocks=10, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0053
effect: "january"
cost_bps: 5
n_stocks: 10
+2.90+2.14+2.30+9.47
effect=january, holding_days=1, n_stocks=50, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0061
effect: "january"
cost_bps: 5
n_stocks: 50
+2.32+2.97+0.99+7.53
effect=january, holding_days=5, n_stocks=10, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0069
effect: "january"
cost_bps: 5
n_stocks: 10
+2.46+5.77+2.27
effect=january, holding_days=5, n_stocks=50, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0077
effect: "january"
cost_bps: 5
n_stocks: 50
+4.53+4.41+3.50
effect=january, holding_days=20, n_stocks=10, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0085
effect: "january"
cost_bps: 5
n_stocks: 10
+5.24+6.56+6.18
effect=january, holding_days=20, n_stocks=20, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0088
effect: "january"
cost_bps: 5
n_stocks: 20
+6.18+7.13+6.04
effect=january, holding_days=20, n_stocks=50, cost_bps=10, regime_gate=False
r-calendar-effects-us-sp500-0094
effect: "january"
cost_bps: 10
n_stocks: 50
+4.42+4.46+6.20
effect=turn_of_month, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0096
effect: "turn_of_month"
cost_bps: 5
n_stocks: 5
-1.75-1.18-3.21-0.49
effect=turn_of_month, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=True
r-calendar-effects-us-sp500-0099
effect: "turn_of_month"
cost_bps: 10
n_stocks: 5
-2.91-2.43-4.15-1.21
effect=turn_of_month, holding_days=1, n_stocks=20, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0104
effect: "turn_of_month"
cost_bps: 5
n_stocks: 20
-1.51-1.33-2.58-0.32
effect=turn_of_month, holding_days=5, n_stocks=5, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0112
effect: "turn_of_month"
cost_bps: 5
n_stocks: 5
+1.02+1.40+0.45+1.23
effect=turn_of_month, holding_days=5, n_stocks=20, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0120
effect: "turn_of_month"
cost_bps: 5
n_stocks: 20
+1.16+1.54+1.13+0.80
effect=turn_of_month, holding_days=20, n_stocks=5, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0128
effect: "turn_of_month"
cost_bps: 5
n_stocks: 5
+1.26+2.02+0.14+2.18
effect=turn_of_month, holding_days=20, n_stocks=20, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0136
effect: "turn_of_month"
cost_bps: 5
n_stocks: 20
+1.18+1.36+0.35+2.78
effect=day_of_week, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-calendar-effects-us-sp500-0144
effect: "day_of_week"
cost_bps: 5
n_stocks: 5
-0.77-1.41+0.29-1.27
effect=day_of_week, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0145
effect: "day_of_week"
cost_bps: 5
n_stocks: 5
-0.38-0.67+0.29-1.27
effect=day_of_week, holding_days=1, n_stocks=20, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0153
effect: "day_of_week"
cost_bps: 5
n_stocks: 20
+0.07-0.41+0.77-0.55
effect=day_of_week, holding_days=5, n_stocks=5, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0161
effect: "day_of_week"
cost_bps: 5
n_stocks: 5
-0.17+2.90-2.10-1.05
effect=day_of_week, holding_days=5, n_stocks=20, cost_bps=5, regime_gate=True
r-calendar-effects-us-sp500-0169
effect: "day_of_week"
cost_bps: 5
n_stocks: 20
-0.67+2.48-1.80-2.50

Target universe

S&P 500 constituents, ~503 stocks

Related strategies

source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-07-29T01:08:35

Related strategies