qbuntuqbuntu
rejectedno_edge· equity· factor· reversal· skewness

Skewness Reversal (US S&P 500)

slug: skewness-reversal-us-sp500

Skewness Reversal (US S&P 500) backtest. Median Sharpe across 144 parameter sets is -1.03. p-value is 0.03. Max DD is -18.9%. Period: 2022-02-01 to 2026-09-01. Best Sharpe +0.39 is not the representative figure.

Verdict: rejected. The median reaches neither promising (Sharpe > 0.5 and p-value < 0.05) nor marginal (Sharpe > 0.05 and best p-value < 0.10). Primary reason: no_edge. It is not regime, frequency, or cost, and the median does not clear the bar.

Performance summary

Sharpe (median)
-1.03
Max DD
-18.9%
Win rate
—
Alpha (ann.)
—
p-value
0.03
backtest period: 2022-02-01 → 2026-09-01
Sharpe across 144 grid runs:median -1.03best 0.39 (not representative)worst -3.17p25–p75 -1.52–-0.51

Hypothesis

Investors overpay for lottery-like positive skewness and shun negative skewness (Harvey & Siddique 2000 line): stocks with extreme recent return skewness should subsequently revert. Ranking on realized skewness tests the effect long/short.

Why it didn't work

Across 144 grid combinations, median Sharpe=-1.03, best=0.39. Primary failure mode: no_edge.

Facts (5)

Best grid Sharpe ratio is 0.39 (p=0.41).
period 2022-02-01–2026-09-01; cost=5bps
sharpe_ratio0.39
Median Sharpe across 144 grid runs is -1.03.
Full grid of 144 parameter combinations.
sharpe_ratio-1.03
Median Sharpe in DOWN regime is -0.24 across 144 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-0.24
Median Sharpe in FLAT regime is -1.39 across 144 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-1.39
Median Sharpe in UP regime is -1.15 across 144 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-1.15

Runs (30)

runparamssharpeUPFLATDOWN
lookback_days=20, n_stocks=5, cost_bps=5, regime_gate=False, holding_days=1
r-skewness-reversal-us-sp500-0000
cost_bps: 5
n_stocks: 5
regime_gate: false
-1.74-2.64-1.40-0.83
lookback_days=20, n_stocks=5, cost_bps=5, regime_gate=False, holding_days=5
r-skewness-reversal-us-sp500-0001
cost_bps: 5
n_stocks: 5
regime_gate: false
-1.36-1.51-1.64+0.06
lookback_days=20, n_stocks=5, cost_bps=5, regime_gate=False, holding_days=20
r-skewness-reversal-us-sp500-0002
cost_bps: 5
n_stocks: 5
regime_gate: false
-0.34-1.23-0.19+1.63
lookback_days=20, n_stocks=5, cost_bps=5, regime_gate=True, holding_days=1
r-skewness-reversal-us-sp500-0003
cost_bps: 5
n_stocks: 5
regime_gate: true
-1.40-1.93-1.40-0.83
lookback_days=20, n_stocks=5, cost_bps=10, regime_gate=False, holding_days=1
r-skewness-reversal-us-sp500-0006
cost_bps: 10
n_stocks: 5
regime_gate: false
-2.12-3.12-1.74-1.15
lookback_days=20, n_stocks=5, cost_bps=10, regime_gate=True, holding_days=5
r-skewness-reversal-us-sp500-0010
cost_bps: 10
n_stocks: 5
regime_gate: true
-1.25-1.20-1.80-0.24
lookback_days=20, n_stocks=10, cost_bps=5, regime_gate=True, holding_days=5
r-skewness-reversal-us-sp500-0016
cost_bps: 5
n_stocks: 10
regime_gate: true
-0.70-0.61-1.18+0.33
lookback_days=20, n_stocks=10, cost_bps=10, regime_gate=True, holding_days=5
r-skewness-reversal-us-sp500-0022
cost_bps: 10
n_stocks: 10
regime_gate: true
-0.94-0.81-1.44-0.02
lookback_days=20, n_stocks=20, cost_bps=5, regime_gate=True, holding_days=5
r-skewness-reversal-us-sp500-0028
cost_bps: 5
n_stocks: 20
regime_gate: true
-0.35+0.36-1.39+0.64
lookback_days=20, n_stocks=20, cost_bps=10, regime_gate=True, holding_days=5
r-skewness-reversal-us-sp500-0034
cost_bps: 10
n_stocks: 20
regime_gate: true
-0.65+0.16-1.73-0.11
lookback_days=20, n_stocks=50, cost_bps=5, regime_gate=False, holding_days=1
r-skewness-reversal-us-sp500-0036
cost_bps: 5
n_stocks: 50
regime_gate: false
-1.39-1.80-1.25-0.31
lookback_days=20, n_stocks=50, cost_bps=5, regime_gate=True, holding_days=20
r-skewness-reversal-us-sp500-0041
cost_bps: 5
n_stocks: 50
regime_gate: true
+0.28+0.73-0.99+1.45
lookback_days=20, n_stocks=50, cost_bps=10, regime_gate=True, holding_days=20
r-skewness-reversal-us-sp500-0047
cost_bps: 10
n_stocks: 50
regime_gate: true
+0.11+0.63-1.26+1.11
lookback_days=40, n_stocks=5, cost_bps=5, regime_gate=True, holding_days=20
r-skewness-reversal-us-sp500-0053
cost_bps: 5
n_stocks: 5
regime_gate: true
-0.04+0.32-1.18+1.64
lookback_days=40, n_stocks=5, cost_bps=10, regime_gate=True, holding_days=20
r-skewness-reversal-us-sp500-0059
cost_bps: 10
n_stocks: 5
regime_gate: true
-0.13+0.25-1.28+1.52
lookback_days=40, n_stocks=10, cost_bps=5, regime_gate=True, holding_days=20
r-skewness-reversal-us-sp500-0065
cost_bps: 5
n_stocks: 10
regime_gate: true
-0.16-0.01-1.49+1.74
lookback_days=40, n_stocks=10, cost_bps=10, regime_gate=True, holding_days=20
r-skewness-reversal-us-sp500-0071
cost_bps: 10
n_stocks: 10
regime_gate: true
-0.28-0.09-1.66+1.58
lookback_days=40, n_stocks=20, cost_bps=5, regime_gate=True, holding_days=20
r-skewness-reversal-us-sp500-0077
cost_bps: 5
n_stocks: 20
regime_gate: true
-0.54-0.07-1.28+0.00
lookback_days=40, n_stocks=20, cost_bps=10, regime_gate=False, holding_days=1
r-skewness-reversal-us-sp500-0078
cost_bps: 10
n_stocks: 20
regime_gate: false
-3.17-4.12-2.09-3.46
lookback_days=40, n_stocks=50, cost_bps=5, regime_gate=False, holding_days=1
r-skewness-reversal-us-sp500-0084
cost_bps: 5
n_stocks: 50
regime_gate: false
-2.17-3.07-1.36-1.73
lookback_days=40, n_stocks=50, cost_bps=10, regime_gate=False, holding_days=1
r-skewness-reversal-us-sp500-0090
cost_bps: 10
n_stocks: 50
regime_gate: false
-3.00-3.96-2.14-2.54
lookback_days=60, n_stocks=5, cost_bps=5, regime_gate=False, holding_days=1
r-skewness-reversal-us-sp500-0096
cost_bps: 5
n_stocks: 5
regime_gate: false
-1.55-1.66-1.74-0.93
lookback_days=60, n_stocks=5, cost_bps=5, regime_gate=False, holding_days=5
r-skewness-reversal-us-sp500-0097
cost_bps: 5
n_stocks: 5
regime_gate: false
-1.08-0.68-1.28-1.47
lookback_days=60, n_stocks=5, cost_bps=5, regime_gate=True, holding_days=20
r-skewness-reversal-us-sp500-0101
cost_bps: 5
n_stocks: 5
regime_gate: true
+0.39+0.73-0.18+0.91
lookback_days=60, n_stocks=5, cost_bps=10, regime_gate=False, holding_days=20
r-skewness-reversal-us-sp500-0104
cost_bps: 10
n_stocks: 5
regime_gate: false
+0.22+0.44-0.29+0.81
lookback_days=60, n_stocks=10, cost_bps=5, regime_gate=False, holding_days=20
r-skewness-reversal-us-sp500-0110
cost_bps: 5
n_stocks: 10
regime_gate: false
-0.56-1.16-0.49+0.90
lookback_days=60, n_stocks=10, cost_bps=10, regime_gate=False, holding_days=20
r-skewness-reversal-us-sp500-0116
cost_bps: 10
n_stocks: 10
regime_gate: false
-0.71-1.31-0.62+0.76
lookback_days=60, n_stocks=20, cost_bps=5, regime_gate=False, holding_days=20
r-skewness-reversal-us-sp500-0122
cost_bps: 5
n_stocks: 20
regime_gate: false
-0.56-1.17-0.16+0.48
lookback_days=60, n_stocks=20, cost_bps=10, regime_gate=False, holding_days=20
r-skewness-reversal-us-sp500-0128
cost_bps: 10
n_stocks: 20
regime_gate: false
-0.74-1.35-0.33+0.27
lookback_days=60, n_stocks=50, cost_bps=5, regime_gate=False, holding_days=20
r-skewness-reversal-us-sp500-0134
cost_bps: 5
n_stocks: 50
regime_gate: false
-0.83-1.54-0.23+0.02

Target universe

S&P 500 constituents, ~503 stocks

Related strategies

source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-09-24T02:22:21

Related strategies