qbuntuqbuntu
rejectedno_edge· equity· factor· momentum· time-series

Time-Series Momentum (US S&P 500)

slug: ts-momentum-us-sp500
performance summary
Sharpe (median)
-0.23
Max DD
-8.7%
Win rate
Alpha (ann.)
p-value
0.46
backtest period: 2022-02-012026-06-01
Sharpe across 120 grid runs:median -0.23best 0.99 (not representative)worst -1.33p25–p75 -0.490.07

Hypothesis

Moskowitz, Ooi, Pedersen (2012): each stock's own past return predicts its future return. Applied to S&P 500 constituents.

Why it didn't work

Across 120 grid combinations, median Sharpe=-0.23, best=0.99. Primary failure mode: no_edge.

Facts (5)

Best grid Sharpe ratio is 0.99 (p=0.039).
period 2022-02-01–2026-06-01; cost=5bps
sharpe_ratio0.99
Median Sharpe across 120 grid runs is -0.23.
Full grid of 120 parameter combinations.
sharpe_ratio-0.23
Median Sharpe in DOWN regime is -0.38 across 120 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-0.38
Median Sharpe in FLAT regime is -0.50 across 120 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.50
Median Sharpe in UP regime is 0.09 across 120 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.09

Runs (30)

runparamssharpeUPFLATDOWN
formation_days=20, holding_days=1, threshold_pct=0, cost_bps=5
r-ts-momentum-us-sp500-0000
cost_bps: 5
holding_days: 1
threshold_pct: 0
+0.41+0.45+0.28+0.53
formation_days=20, holding_days=1, threshold_pct=0, cost_bps=10
r-ts-momentum-us-sp500-0001
cost_bps: 10
holding_days: 1
threshold_pct: 0
-0.33-0.53-0.39+0.02
formation_days=20, holding_days=1, threshold_pct=0.05, cost_bps=5
r-ts-momentum-us-sp500-0002
cost_bps: 5
holding_days: 1
threshold_pct: 0.05
+0.69+0.89+0.45+0.70
formation_days=20, holding_days=1, threshold_pct=0.1, cost_bps=5
r-ts-momentum-us-sp500-0004
cost_bps: 5
holding_days: 1
threshold_pct: 0.1
+0.99+1.38+0.40+1.07
formation_days=20, holding_days=5, threshold_pct=0, cost_bps=10
r-ts-momentum-us-sp500-0007
cost_bps: 10
holding_days: 5
threshold_pct: 0
-0.30-0.20-0.73+0.24
formation_days=20, holding_days=5, threshold_pct=0.1, cost_bps=10
r-ts-momentum-us-sp500-0011
cost_bps: 10
holding_days: 5
threshold_pct: 0.1
-0.16-0.18-0.22+0.05
formation_days=20, holding_days=10, threshold_pct=0.05, cost_bps=10
r-ts-momentum-us-sp500-0015
cost_bps: 10
holding_days: 10
threshold_pct: 0.05
-0.55+0.15-1.24-0.83
formation_days=20, holding_days=20, threshold_pct=0, cost_bps=10
r-ts-momentum-us-sp500-0019
cost_bps: 10
holding_days: 20
threshold_pct: 0
-0.18+0.14-0.77-0.04
formation_days=20, holding_days=20, threshold_pct=0.1, cost_bps=10
r-ts-momentum-us-sp500-0023
cost_bps: 10
holding_days: 20
threshold_pct: 0.1
+0.06+0.47-0.49+0.16
formation_days=20, holding_days=60, threshold_pct=0, cost_bps=5
r-ts-momentum-us-sp500-0024
cost_bps: 5
holding_days: 60
threshold_pct: 0
-0.22+0.18-0.41-0.81
formation_days=20, holding_days=60, threshold_pct=0.1, cost_bps=5
r-ts-momentum-us-sp500-0028
cost_bps: 5
holding_days: 60
threshold_pct: 0.1
-0.19+0.10-0.33-0.64
formation_days=60, holding_days=1, threshold_pct=0.05, cost_bps=5
r-ts-momentum-us-sp500-0032
cost_bps: 5
holding_days: 1
threshold_pct: 0.05
+0.07+1.22-0.73-0.62
formation_days=60, holding_days=5, threshold_pct=0, cost_bps=5
r-ts-momentum-us-sp500-0036
cost_bps: 5
holding_days: 5
threshold_pct: 0
-0.28-0.35-0.52+0.74
formation_days=60, holding_days=5, threshold_pct=0.1, cost_bps=5
r-ts-momentum-us-sp500-0040
cost_bps: 5
holding_days: 5
threshold_pct: 0.1
-0.04-0.18-0.10+0.60
formation_days=60, holding_days=10, threshold_pct=0.05, cost_bps=5
r-ts-momentum-us-sp500-0044
cost_bps: 5
holding_days: 10
threshold_pct: 0.05
-0.43+0.44-1.03-0.78
formation_days=60, holding_days=20, threshold_pct=0, cost_bps=5
r-ts-momentum-us-sp500-0048
cost_bps: 5
holding_days: 20
threshold_pct: 0
-0.30+0.08-0.43-0.70
formation_days=60, holding_days=20, threshold_pct=0.1, cost_bps=5
r-ts-momentum-us-sp500-0052
cost_bps: 5
holding_days: 20
threshold_pct: 0.1
-0.23+0.16-0.50-0.43
formation_days=60, holding_days=60, threshold_pct=0.05, cost_bps=5
r-ts-momentum-us-sp500-0056
cost_bps: 5
holding_days: 60
threshold_pct: 0.05
-0.09+0.31-0.00-2.09
formation_days=120, holding_days=1, threshold_pct=0, cost_bps=5
r-ts-momentum-us-sp500-0060
cost_bps: 5
holding_days: 1
threshold_pct: 0
-0.59+0.11-1.21-1.12
formation_days=120, holding_days=1, threshold_pct=0, cost_bps=10
r-ts-momentum-us-sp500-0061
cost_bps: 10
holding_days: 1
threshold_pct: 0
-1.33-0.84-1.96-1.58
formation_days=120, holding_days=1, threshold_pct=0.1, cost_bps=10
r-ts-momentum-us-sp500-0065
cost_bps: 10
holding_days: 1
threshold_pct: 0.1
-0.73-0.03-1.53-0.99
formation_days=120, holding_days=5, threshold_pct=0.05, cost_bps=10
r-ts-momentum-us-sp500-0069
cost_bps: 10
holding_days: 5
threshold_pct: 0.05
-0.73-0.62-1.34+0.46
formation_days=120, holding_days=10, threshold_pct=0, cost_bps=10
r-ts-momentum-us-sp500-0073
cost_bps: 10
holding_days: 10
threshold_pct: 0
-1.24-0.51-2.23-1.29
formation_days=120, holding_days=10, threshold_pct=0.1, cost_bps=10
r-ts-momentum-us-sp500-0077
cost_bps: 10
holding_days: 10
threshold_pct: 0.1
-0.75+0.01-1.56-0.84
formation_days=120, holding_days=20, threshold_pct=0.05, cost_bps=10
r-ts-momentum-us-sp500-0081
cost_bps: 10
holding_days: 20
threshold_pct: 0.05
-0.37-0.28-0.33-0.74
formation_days=120, holding_days=60, threshold_pct=0, cost_bps=10
r-ts-momentum-us-sp500-0085
cost_bps: 10
holding_days: 60
threshold_pct: 0
+0.31+0.53+0.16-0.83
formation_days=120, holding_days=60, threshold_pct=0.1, cost_bps=10
r-ts-momentum-us-sp500-0089
cost_bps: 10
holding_days: 60
threshold_pct: 0.1
+0.25+0.40+0.24-1.31
formation_days=250, holding_days=1, threshold_pct=0, cost_bps=5
r-ts-momentum-us-sp500-0090
cost_bps: 5
holding_days: 1
threshold_pct: 0
-0.39-0.07-1.38+0.03
formation_days=250, holding_days=1, threshold_pct=0.1, cost_bps=5
r-ts-momentum-us-sp500-0094
cost_bps: 5
holding_days: 1
threshold_pct: 0.1
-0.38-0.11-0.87-0.34
formation_days=250, holding_days=5, threshold_pct=0.05, cost_bps=5
r-ts-momentum-us-sp500-0098
cost_bps: 5
holding_days: 5
threshold_pct: 0.05
-0.10-0.26-0.45+1.93

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-28T01:10:28

Related strategies