Pairs Trading / Statistical Arbitrage (JP Growth Stocks)
slug: pair-trading-jp-growth
Pairs Trading / Statistical Arbitrage (JP Growth Stocks) backtest. Median Sharpe across 288 parameter sets is +1.84. p-value is 0. Max DD is -2.4%. Period: 2022-02-25 to 2026-09-02. Best Sharpe +3.65 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.84
Max DD
-2.4%
Win rate
—
Alpha (ann.)
—
p-value
0.00
backtest period: 2022-02-25 → 2026-09-02
Sharpe across 288 grid runs:median 1.84best 3.65 (not representative)worst 0.51p25–p75 0.98–2.93
Hypothesis
Engle-Granger cointegration: identify stock pairs with mean-reverting spreads via ADF test. When normalized spread z-score exceeds entry threshold, trade the spread (LONG underperformer, SHORT outperformer). Close when z-score reverts to exit threshold.
Facts (5)
Best grid Sharpe ratio is 3.65 (p=4.7e-16).
period 2022-02-25–2026-09-02; cost=5bps
cite ↗ /cite/pair-trading-jp-growth-fact-best-sharpevia r-pair-trading-jp-growth-0266
Median Sharpe across 288 grid runs is 1.84.
Full grid of 288 parameter combinations.
Median Sharpe in DOWN regime is 1.75 across 288 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
Median Sharpe in FLAT regime is 2.51 across 288 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
Median Sharpe in UP regime is 2.77 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-jp-growth-0000 | cost_bps: 5 lookback: 60 max_pairs: 5 | +0.83 | +2.55 | +0.93 | +1.78 |
entry_zscore=1.5, exit_zscore=0, lookback=60, max_pairs=5, cost_bps=10 r-pair-trading-jp-growth-0001 | cost_bps: 10 lookback: 60 max_pairs: 5 | +0.83 | +2.46 | +0.93 | +1.74 |
entry_zscore=1.5, exit_zscore=0, lookback=60, max_pairs=10, cost_bps=5 r-pair-trading-jp-growth-0002 | cost_bps: 5 lookback: 60 max_pairs: 10 | +0.83 | +1.39 | +0.80 | +1.48 |
entry_zscore=1.5, exit_zscore=0, lookback=60, max_pairs=20, cost_bps=5 r-pair-trading-jp-growth-0004 | cost_bps: 5 lookback: 60 max_pairs: 20 | +1.16 | +1.79 | +1.07 | +2.03 |
entry_zscore=1.5, exit_zscore=0, lookback=250, max_pairs=5, cost_bps=5 r-pair-trading-jp-growth-0012 | cost_bps: 5 lookback: 250 max_pairs: 5 | +1.62 | +6.66 | +1.64 | +2.27 |
entry_zscore=1.5, exit_zscore=0, lookback=250, max_pairs=20, cost_bps=5 r-pair-trading-jp-growth-0016 | cost_bps: 5 lookback: 250 max_pairs: 20 | +1.79 | +2.82 | +1.97 | +1.64 |
entry_zscore=1.5, exit_zscore=0.25, lookback=120, max_pairs=20, cost_bps=5 r-pair-trading-jp-growth-0028 | cost_bps: 5 lookback: 120 max_pairs: 20 | +3.15 | +3.26 | +3.21 | +2.26 |
entry_zscore=1.5, exit_zscore=0.5, lookback=60, max_pairs=20, cost_bps=5 r-pair-trading-jp-growth-0040 | cost_bps: 5 lookback: 60 max_pairs: 20 | +1.08 | +2.03 | +1.01 | +2.21 |
entry_zscore=1.5, exit_zscore=0.5, lookback=250, max_pairs=20, cost_bps=5 r-pair-trading-jp-growth-0052 | cost_bps: 5 lookback: 250 max_pairs: 20 | +1.95 | +1.67 | +3.13 | +6.58 |
entry_zscore=1.5, exit_zscore=1, lookback=60, max_pairs=5, cost_bps=5 r-pair-trading-jp-growth-0054 | cost_bps: 5 lookback: 60 max_pairs: 5 | +0.87 | +1.51 | +0.95 | -0.48 |
entry_zscore=1.5, exit_zscore=1, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0065 | cost_bps: 10 lookback: 120 max_pairs: 20 | +3.02 | +3.14 | +3.12 | +2.03 |
entry_zscore=2, exit_zscore=0, lookback=60, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0077 | cost_bps: 10 lookback: 60 max_pairs: 20 | +1.14 | +1.76 | +1.06 | +1.99 |
entry_zscore=2, exit_zscore=0, lookback=250, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0089 | cost_bps: 10 lookback: 250 max_pairs: 20 | +1.79 | +2.80 | +1.96 | +1.63 |
entry_zscore=2, exit_zscore=0.25, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0101 | cost_bps: 10 lookback: 120 max_pairs: 20 | +3.12 | +3.24 | +3.18 | +2.23 |
entry_zscore=2, exit_zscore=0.5, lookback=60, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0113 | cost_bps: 10 lookback: 60 max_pairs: 20 | +1.06 | +1.99 | +0.99 | +2.15 |
entry_zscore=2, exit_zscore=0.5, lookback=250, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0125 | cost_bps: 10 lookback: 250 max_pairs: 20 | +1.94 | +1.66 | +3.11 | +6.50 |
entry_zscore=2, exit_zscore=1, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0137 | cost_bps: 10 lookback: 120 max_pairs: 20 | +3.02 | +3.14 | +3.12 | +2.03 |
entry_zscore=2.5, exit_zscore=0, lookback=60, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0149 | cost_bps: 10 lookback: 60 max_pairs: 20 | +1.11 | +1.74 | +1.04 | +1.53 |
entry_zscore=2.5, exit_zscore=0, lookback=250, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0161 | cost_bps: 10 lookback: 250 max_pairs: 20 | +1.82 | +3.08 | +1.86 | +1.75 |
entry_zscore=2.5, exit_zscore=0.25, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0173 | cost_bps: 10 lookback: 120 max_pairs: 20 | +3.01 | +3.18 | +3.03 | +2.22 |
entry_zscore=2.5, exit_zscore=0.5, lookback=60, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0185 | cost_bps: 10 lookback: 60 max_pairs: 20 | +1.06 | +2.03 | +0.98 | +2.07 |
entry_zscore=2.5, exit_zscore=0.5, lookback=250, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0197 | cost_bps: 10 lookback: 250 max_pairs: 20 | +1.90 | +1.65 | +3.09 | +5.49 |
entry_zscore=2.5, exit_zscore=1, lookback=120, max_pairs=20, cost_bps=10 r-pair-trading-jp-growth-0209 | cost_bps: 10 lookback: 120 max_pairs: 20 | +3.04 | +3.23 | +3.10 | +2.07 |
entry_zscore=3, exit_zscore=0, lookback=60, max_pairs=5, cost_bps=5 r-pair-trading-jp-growth-0216 | cost_bps: 5 lookback: 60 max_pairs: 5 | +0.79 | +2.44 | +0.91 | +0.92 |
entry_zscore=3, exit_zscore=0, lookback=120, max_pairs=5, cost_bps=5 r-pair-trading-jp-growth-0222 | cost_bps: 5 lookback: 120 max_pairs: 5 | +2.97 | +3.34 | +2.70 | +4.94 |
entry_zscore=3, exit_zscore=0.25, lookback=60, max_pairs=5, cost_bps=5 r-pair-trading-jp-growth-0234 | cost_bps: 5 lookback: 60 max_pairs: 5 | +0.75 | +1.81 | +0.77 | -0.79 |
entry_zscore=3, exit_zscore=0.25, lookback=250, max_pairs=5, cost_bps=5 r-pair-trading-jp-growth-0246 | cost_bps: 5 lookback: 250 max_pairs: 5 | +3.39 | +3.51 | +3.28 | +5.26 |
entry_zscore=3, exit_zscore=0.5, lookback=120, max_pairs=5, cost_bps=5 r-pair-trading-jp-growth-0258 | cost_bps: 5 lookback: 120 max_pairs: 5 | +3.04 | +3.33 | +3.06 | +1.99 |
entry_zscore=3, exit_zscore=0.5, lookback=250, max_pairs=10, cost_bps=5 r-pair-trading-jp-growth-0266 | cost_bps: 5 lookback: 250 max_pairs: 10 | +3.65 | +5.12 | +3.35 | +4.76 |
entry_zscore=3, exit_zscore=1, lookback=60, max_pairs=5, cost_bps=10 r-pair-trading-jp-growth-0271 | cost_bps: 10 lookback: 60 max_pairs: 5 | +0.51 | +1.05 | +0.72 | -1.29 |
Target universe
Tokyo Stock Exchange Growth Market, ~495 stocks, tv >= 30M JPY
source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-09-24T02:22:18