Pairs Trading / Statistical Arbitrage (US S&P 500)
slug: pair-trading-us-sp500
Pairs Trading / Statistical Arbitrage (US S&P 500) backtest. Median Sharpe across 288 parameter sets is +1.67. p-value is 0.000003. Max DD is -1.5%. Period: 2022-03-09 to 2026-09-17. Best Sharpe +3.11 is not the representative figure.
Verdict: promising. Median Sharpe is above 0.5 and the median p-value is under 0.05. Not the best run.
Performance summary
Sharpe (median)
+1.67
Max DD
-1.5%
Win rate
—
Alpha (ann.)
—
p-value
0.00
backtest period: 2022-03-09 → 2026-09-17
Sharpe across 288 grid runs:median 1.67best 3.11 (not representative)worst 0.41p25–p75 0.97–2.15
Hypothesis
Engle-Granger cointegration: identify stock pairs with mean-reverting spreads. Applied to S&P 500 constituents.
Facts (5)
Best grid Sharpe ratio is 3.11 (p=9e-08).
period 2022-03-09–2026-09-17; cost=5bps
cite ↗ /cite/pair-trading-us-sp500-fact-best-sharpevia r-pair-trading-us-sp500-0012
Median Sharpe across 288 grid runs is 1.67.
Full grid of 288 parameter combinations.
Median Sharpe in DOWN regime is 2.96 across 288 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
Median Sharpe in FLAT regime is 2.18 across 288 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
Median Sharpe in UP regime is 1.66 across 288 runs.
Regime=UP, N225 SMA20/SMA60 classification.
Runs (30)
| run | params | sharpe | UP | FLAT | DOWN |
|---|---|---|---|---|---|
entry_zscore=1.5, exit_zscore=0, lookback=60, max_pairs=5, cost_bps=5 r-pair-trading-us-sp500-0000 | cost_bps: 5 lookback: 60 max_pairs: 5 | +1.21 | +0.81 | +1.86 | +2.09 |
entry_zscore=1.5, exit_zscore=0, lookback=60, max_pairs=5, cost_bps=10 r-pair-trading-us-sp500-0001 | cost_bps: 10 lookback: 60 max_pairs: 5 | +1.15 | +0.77 | +1.78 | +2.01 |
entry_zscore=1.5, exit_zscore=0, lookback=60, max_pairs=10, cost_bps=5 r-pair-trading-us-sp500-0002 | cost_bps: 5 lookback: 60 max_pairs: 10 | +0.68 | +1.11 | +0.69 | +2.38 |
entry_zscore=1.5, exit_zscore=0, lookback=60, max_pairs=20, cost_bps=5 r-pair-trading-us-sp500-0004 | cost_bps: 5 lookback: 60 max_pairs: 20 | +0.58 | +1.40 | +0.67 | +2.26 |
entry_zscore=1.5, exit_zscore=0, lookback=250, max_pairs=5, cost_bps=5 r-pair-trading-us-sp500-0012 | cost_bps: 5 lookback: 250 max_pairs: 5 | +3.11 | +3.94 | +2.55 | +5.00 |
entry_zscore=1.5, exit_zscore=0, lookback=250, max_pairs=20, cost_bps=5 r-pair-trading-us-sp500-0016 | cost_bps: 5 lookback: 250 max_pairs: 20 | +2.50 | +2.26 | +2.93 | +3.81 |
entry_zscore=1.5, exit_zscore=0.25, lookback=120, max_pairs=20, cost_bps=5 r-pair-trading-us-sp500-0028 | cost_bps: 5 lookback: 120 max_pairs: 20 | +2.16 | +2.26 | +2.03 | +3.01 |
entry_zscore=1.5, exit_zscore=0.5, lookback=60, max_pairs=20, cost_bps=5 r-pair-trading-us-sp500-0040 | cost_bps: 5 lookback: 60 max_pairs: 20 | +0.57 | +1.77 | +0.66 | +1.65 |
entry_zscore=1.5, exit_zscore=0.5, lookback=250, max_pairs=20, cost_bps=5 r-pair-trading-us-sp500-0052 | cost_bps: 5 lookback: 250 max_pairs: 20 | +2.61 | +3.25 | +2.32 | +5.21 |
entry_zscore=1.5, exit_zscore=1, lookback=60, max_pairs=5, cost_bps=5 r-pair-trading-us-sp500-0054 | cost_bps: 5 lookback: 60 max_pairs: 5 | +1.22 | +1.27 | +1.05 | +2.23 |
entry_zscore=1.5, exit_zscore=1, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0065 | cost_bps: 10 lookback: 120 max_pairs: 20 | +0.94 | +0.94 | +2.45 | +3.65 |
entry_zscore=2, exit_zscore=0, lookback=60, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0077 | cost_bps: 10 lookback: 60 max_pairs: 20 | +0.57 | +1.34 | +0.67 | +2.18 |
entry_zscore=2, exit_zscore=0, lookback=250, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0089 | cost_bps: 10 lookback: 250 max_pairs: 20 | +2.47 | +2.23 | +2.90 | +3.76 |
entry_zscore=2, exit_zscore=0.25, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0101 | cost_bps: 10 lookback: 120 max_pairs: 20 | +2.11 | +2.20 | +1.98 | +2.96 |
entry_zscore=2, exit_zscore=0.5, lookback=60, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0113 | cost_bps: 10 lookback: 60 max_pairs: 20 | +0.54 | +1.64 | +0.64 | +1.50 |
entry_zscore=2, exit_zscore=0.5, lookback=250, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0125 | cost_bps: 10 lookback: 250 max_pairs: 20 | +2.58 | +3.21 | +2.29 | +5.18 |
entry_zscore=2, exit_zscore=1, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0137 | cost_bps: 10 lookback: 120 max_pairs: 20 | +0.94 | +0.94 | +2.45 | +3.65 |
entry_zscore=2.5, exit_zscore=0, lookback=60, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0149 | cost_bps: 10 lookback: 60 max_pairs: 20 | +0.57 | +1.34 | +0.67 | +2.18 |
entry_zscore=2.5, exit_zscore=0, lookback=250, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0161 | cost_bps: 10 lookback: 250 max_pairs: 20 | +2.47 | +2.23 | +2.90 | +3.76 |
entry_zscore=2.5, exit_zscore=0.25, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0173 | cost_bps: 10 lookback: 120 max_pairs: 20 | +2.11 | +2.20 | +1.98 | +2.96 |
entry_zscore=2.5, exit_zscore=0.5, lookback=60, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0185 | cost_bps: 10 lookback: 60 max_pairs: 20 | +0.54 | +1.64 | +0.64 | +1.50 |
entry_zscore=2.5, exit_zscore=0.5, lookback=250, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0197 | cost_bps: 10 lookback: 250 max_pairs: 20 | +2.58 | +3.21 | +2.29 | +5.18 |
entry_zscore=2.5, exit_zscore=1, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-us-sp500-0209 | cost_bps: 10 lookback: 120 max_pairs: 20 | +0.94 | +0.94 | +2.45 | +3.65 |
entry_zscore=3, exit_zscore=0, lookback=60, max_pairs=5, cost_bps=5 r-pair-trading-us-sp500-0216 | cost_bps: 5 lookback: 60 max_pairs: 5 | +1.26 | +0.89 | +1.86 | +2.19 |
entry_zscore=3, exit_zscore=0, lookback=120, max_pairs=5, cost_bps=5 r-pair-trading-us-sp500-0222 | cost_bps: 5 lookback: 120 max_pairs: 5 | +2.01 | +2.17 | +1.81 | +1.86 |
entry_zscore=3, exit_zscore=0.25, lookback=60, max_pairs=5, cost_bps=5 r-pair-trading-us-sp500-0234 | cost_bps: 5 lookback: 60 max_pairs: 5 | +2.09 | +2.24 | +2.30 | +1.28 |
entry_zscore=3, exit_zscore=0.25, lookback=250, max_pairs=5, cost_bps=5 r-pair-trading-us-sp500-0246 | cost_bps: 5 lookback: 250 max_pairs: 5 | +2.14 | +1.76 | +5.30 | +8.88 |
entry_zscore=3, exit_zscore=0.5, lookback=60, max_pairs=10, cost_bps=10 r-pair-trading-us-sp500-0255 | cost_bps: 10 lookback: 60 max_pairs: 10 | +0.41 | +1.59 | +0.55 | +1.16 |
entry_zscore=3, exit_zscore=0.5, lookback=120, max_pairs=5, cost_bps=10 r-pair-trading-us-sp500-0259 | cost_bps: 10 lookback: 120 max_pairs: 5 | +1.59 | +1.30 | +1.85 | +1.95 |
entry_zscore=3, exit_zscore=1, lookback=60, max_pairs=5, cost_bps=10 r-pair-trading-us-sp500-0271 | cost_bps: 10 lookback: 60 max_pairs: 5 | +1.18 | +1.17 | +0.97 | +2.18 |
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:18