qbuntuqbuntu
rejectedregime_dependent· equity· anomaly· factor· liquidity· turnover

Turnover Factor (US S&P 500)

slug: turnover-us-sp500
performance summary
Sharpe (median)
-0.21
Max DD
-15.5%
Win rate
Alpha (ann.)
p-value
0.45
backtest period: 2022-05-022026-06-01
Sharpe across 320 grid runs:median -0.21best 0.51 (not representative)worst -2.58p25–p75 -0.580.05

Hypothesis

Datar, Naik, Radcliffe (1998): low turnover stocks outperform. Applied to S&P 500 constituents.

Why it didn't work

Across 320 grid combinations, median Sharpe=-0.21, best=0.51. Primary failure mode: regime_dependent.

Facts (5)

Best grid Sharpe ratio is 0.51 (p=0.09).
period 2022-05-02–2026-06-01; cost=5bps
sharpe_ratio0.51
Median Sharpe across 320 grid runs is -0.21.
Full grid of 320 parameter combinations.
sharpe_ratio-0.21
Median Sharpe in DOWN regime is -1.12 across 320 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-1.12
Median Sharpe in FLAT regime is -1.10 across 320 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-1.10
Median Sharpe in UP regime is 0.76 across 320 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio0.76

Runs (30)

runparamssharpeUPFLATDOWN
formation_days=10, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0000
cost_bps: 5
n_stocks: 5
regime_gate: false
+0.23+0.83-0.42-0.39
formation_days=10, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=True
r-turnover-us-sp500-0001
cost_bps: 5
n_stocks: 5
regime_gate: true
-0.24-0.09-0.42-0.39
formation_days=10, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0002
cost_bps: 10
n_stocks: 5
regime_gate: false
-0.06+0.53-0.70-0.71
formation_days=10, holding_days=1, n_stocks=5, cost_bps=10, regime_gate=True
r-turnover-us-sp500-0003
cost_bps: 10
n_stocks: 5
regime_gate: true
-0.44-0.21-0.70-0.71
formation_days=10, holding_days=1, n_stocks=50, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0012
cost_bps: 5
n_stocks: 50
regime_gate: false
-1.47-1.36-1.99-0.54
formation_days=10, holding_days=5, n_stocks=5, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0018
cost_bps: 10
n_stocks: 5
regime_gate: false
-0.09+0.95-0.86-1.85
formation_days=10, holding_days=10, n_stocks=5, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0032
cost_bps: 5
n_stocks: 5
regime_gate: false
+0.01+1.24-0.81-2.35
formation_days=10, holding_days=10, n_stocks=50, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0046
cost_bps: 10
n_stocks: 50
regime_gate: false
-0.57+0.11-1.30-0.45
formation_days=10, holding_days=20, n_stocks=50, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0060
cost_bps: 5
n_stocks: 50
regime_gate: false
-0.43+0.27-1.07-0.69
formation_days=10, holding_days=60, n_stocks=5, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0064
cost_bps: 5
n_stocks: 5
regime_gate: false
+0.14+0.50-0.54+0.47
formation_days=10, holding_days=60, n_stocks=20, cost_bps=10, regime_gate=True
r-turnover-us-sp500-0075
cost_bps: 10
n_stocks: 20
regime_gate: true
+0.29+0.85-0.78-0.19
formation_days=10, holding_days=60, n_stocks=50, cost_bps=5, regime_gate=True
r-turnover-us-sp500-0077
cost_bps: 5
n_stocks: 50
regime_gate: true
+0.51+0.92-0.19-0.11
formation_days=20, holding_days=1, n_stocks=20, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0090
cost_bps: 10
n_stocks: 20
regime_gate: false
-1.29-1.02-1.51-1.83
formation_days=20, holding_days=5, n_stocks=20, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0104
cost_bps: 5
n_stocks: 20
regime_gate: false
+0.13+1.22-0.97-0.61
formation_days=20, holding_days=10, n_stocks=10, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0118
cost_bps: 10
n_stocks: 10
regime_gate: false
-0.32+1.26-1.37-1.98
formation_days=20, holding_days=20, n_stocks=10, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0132
cost_bps: 5
n_stocks: 10
regime_gate: false
-0.40+1.52-1.36-1.44
formation_days=20, holding_days=60, n_stocks=5, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0146
cost_bps: 10
n_stocks: 5
regime_gate: false
+0.03+0.37-0.59-0.23
formation_days=40, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0160
cost_bps: 5
n_stocks: 5
regime_gate: false
-0.08+0.41-0.37-0.60
formation_days=40, holding_days=1, n_stocks=50, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0174
cost_bps: 10
n_stocks: 50
regime_gate: false
-2.23-2.22-1.69-4.85
formation_days=40, holding_days=5, n_stocks=50, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0188
cost_bps: 5
n_stocks: 50
regime_gate: false
-0.09+0.25-0.57-0.22
formation_days=40, holding_days=10, n_stocks=20, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0202
cost_bps: 10
n_stocks: 20
regime_gate: false
-0.42+0.70-1.61-2.27
formation_days=40, holding_days=20, n_stocks=20, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0216
cost_bps: 5
n_stocks: 20
regime_gate: false
-0.80+0.08-1.67-1.50
formation_days=40, holding_days=60, n_stocks=10, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0230
cost_bps: 10
n_stocks: 10
regime_gate: false
-0.10+0.18-0.68-0.19
formation_days=60, holding_days=1, n_stocks=5, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0240
cost_bps: 5
n_stocks: 5
regime_gate: false
-0.56-0.04-0.82-1.10
formation_days=60, holding_days=1, n_stocks=10, cost_bps=5, regime_gate=True
r-turnover-us-sp500-0245
cost_bps: 5
n_stocks: 10
regime_gate: true
-0.63-0.04-0.88-1.42
formation_days=60, holding_days=1, n_stocks=50, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0254
cost_bps: 10
n_stocks: 50
regime_gate: false
-2.58-2.49-2.30-4.52
formation_days=60, holding_days=5, n_stocks=10, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0260
cost_bps: 5
n_stocks: 10
regime_gate: false
-0.24+0.29-0.75-0.96
formation_days=60, holding_days=10, n_stocks=5, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0274
cost_bps: 10
n_stocks: 5
regime_gate: false
-0.88+0.12-1.60-2.34
formation_days=60, holding_days=20, n_stocks=5, cost_bps=5, regime_gate=False
r-turnover-us-sp500-0288
cost_bps: 5
n_stocks: 5
regime_gate: false
-1.06-0.17-1.85-1.83
formation_days=60, holding_days=20, n_stocks=50, cost_bps=10, regime_gate=False
r-turnover-us-sp500-0302
cost_bps: 10
n_stocks: 50
regime_gate: false
-1.25-0.97-1.81-0.85

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:52

Related strategies