# Pairs Trading / Statistical Arbitrage (JP Growth Stocks)

- **Slug**: `pair-trading-jp-growth`
- **Verdict**: promising
- **Asset class**: equity
- **Categories**: mean-reversion, pairs-trading, statistical-arbitrage
- **Source**: qbuntu-analysis (computed asof 2026-09-24T02:22:18)
- **Reproducibility**: analysis-engine@1455e77, backtest-lib@17a7674, grid tier=shallow (python 3.12.10, numpy 2.4.2, pandas 3.0.0)
- **HTML**: https://qbuntu.ai/strategies/pair-trading-jp-growth
- **JSON**: https://qbuntu.ai/v1/strategies/pair-trading-jp-growth
- **License**: CC-BY-4.0

## 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.

## Performance summary

Headline figures are the **median across the parameter grid**, not the best run.

| Metric | Value |
|---|---|
| Sharpe (median) | 1.8423 |
| Max drawdown | -2.4% |
| p-value | 0 |
| Backtest period | 2022-02-25 to 2026-09-02 |

Sharpe distribution across 288 grid runs: median 1.84, best 3.65 (best-case — not representative), worst 0.51, p25 0.98, p75 2.93.

## Methodology

- Notes: {"walk_forward_definition": {"type": "single_pass", "description": "Full period backtest without walk-forward split", "verdict_basis": "full_period"}}
- Slippage model: open-on-open + variable bps fixed (4x per round-trip: 2 legs)
- Position sizing: equal_weight
- Regime definition: N225 SMA20/SMA60 three-class
- Transaction cost bps: 5

## Target universe

Tokyo Stock Exchange Growth Market, ~495 stocks, tv >= 30M JPY

## Runs (30)

| run_id | params | sharpe | UP | FLAT | DOWN |
|---|---|---:|---:|---:|---:|
| `r-pair-trading-jp-growth-0000` | cost_bps=5, lookback=60, max_pairs=5, exit_zscore=0 | 0.83 | 2.55 | 0.93 | 1.78 |
| `r-pair-trading-jp-growth-0001` | cost_bps=10, lookback=60, max_pairs=5, exit_zscore=0 | 0.83 | 2.46 | 0.93 | 1.74 |
| `r-pair-trading-jp-growth-0002` | cost_bps=5, lookback=60, max_pairs=10, exit_zscore=0 | 0.83 | 1.39 | 0.8 | 1.48 |
| `r-pair-trading-jp-growth-0004` | cost_bps=5, lookback=60, max_pairs=20, exit_zscore=0 | 1.16 | 1.79 | 1.07 | 2.03 |
| `r-pair-trading-jp-growth-0012` | cost_bps=5, lookback=250, max_pairs=5, exit_zscore=0 | 1.62 | 6.66 | 1.64 | 2.27 |
| `r-pair-trading-jp-growth-0016` | cost_bps=5, lookback=250, max_pairs=20, exit_zscore=0 | 1.79 | 2.82 | 1.97 | 1.64 |
| `r-pair-trading-jp-growth-0028` | cost_bps=5, lookback=120, max_pairs=20, exit_zscore=0.25 | 3.15 | 3.26 | 3.21 | 2.26 |
| `r-pair-trading-jp-growth-0040` | cost_bps=5, lookback=60, max_pairs=20, exit_zscore=0.5 | 1.08 | 2.03 | 1.01 | 2.21 |
| `r-pair-trading-jp-growth-0052` | cost_bps=5, lookback=250, max_pairs=20, exit_zscore=0.5 | 1.95 | 1.67 | 3.13 | 6.58 |
| `r-pair-trading-jp-growth-0054` | cost_bps=5, lookback=60, max_pairs=5, exit_zscore=1 | 0.87 | 1.51 | 0.95 | -0.48 |
| `r-pair-trading-jp-growth-0065` | cost_bps=10, lookback=120, max_pairs=20, exit_zscore=1 | 3.02 | 3.14 | 3.12 | 2.03 |
| `r-pair-trading-jp-growth-0077` | cost_bps=10, lookback=60, max_pairs=20, exit_zscore=0 | 1.14 | 1.76 | 1.06 | 1.99 |
| `r-pair-trading-jp-growth-0089` | cost_bps=10, lookback=250, max_pairs=20, exit_zscore=0 | 1.79 | 2.8 | 1.96 | 1.63 |
| `r-pair-trading-jp-growth-0101` | cost_bps=10, lookback=120, max_pairs=20, exit_zscore=0.25 | 3.12 | 3.24 | 3.18 | 2.23 |
| `r-pair-trading-jp-growth-0113` | cost_bps=10, lookback=60, max_pairs=20, exit_zscore=0.5 | 1.06 | 1.99 | 0.99 | 2.15 |
| `r-pair-trading-jp-growth-0125` | cost_bps=10, lookback=250, max_pairs=20, exit_zscore=0.5 | 1.94 | 1.66 | 3.11 | 6.5 |
| `r-pair-trading-jp-growth-0137` | cost_bps=10, lookback=120, max_pairs=20, exit_zscore=1 | 3.02 | 3.14 | 3.12 | 2.03 |
| `r-pair-trading-jp-growth-0149` | cost_bps=10, lookback=60, max_pairs=20, exit_zscore=0 | 1.11 | 1.74 | 1.04 | 1.53 |
| `r-pair-trading-jp-growth-0161` | cost_bps=10, lookback=250, max_pairs=20, exit_zscore=0 | 1.82 | 3.08 | 1.86 | 1.75 |
| `r-pair-trading-jp-growth-0173` | cost_bps=10, lookback=120, max_pairs=20, exit_zscore=0.25 | 3.01 | 3.18 | 3.03 | 2.22 |
| `r-pair-trading-jp-growth-0185` | cost_bps=10, lookback=60, max_pairs=20, exit_zscore=0.5 | 1.06 | 2.03 | 0.98 | 2.07 |
| `r-pair-trading-jp-growth-0197` | cost_bps=10, lookback=250, max_pairs=20, exit_zscore=0.5 | 1.9 | 1.65 | 3.09 | 5.49 |
| `r-pair-trading-jp-growth-0209` | cost_bps=10, lookback=120, max_pairs=20, exit_zscore=1 | 3.04 | 3.23 | 3.1 | 2.07 |
| `r-pair-trading-jp-growth-0216` | cost_bps=5, lookback=60, max_pairs=5, exit_zscore=0 | 0.79 | 2.44 | 0.91 | 0.92 |
| `r-pair-trading-jp-growth-0222` | cost_bps=5, lookback=120, max_pairs=5, exit_zscore=0 | 2.97 | 3.34 | 2.7 | 4.94 |
| `r-pair-trading-jp-growth-0234` | cost_bps=5, lookback=60, max_pairs=5, exit_zscore=0.25 | 0.75 | 1.81 | 0.77 | -0.79 |
| `r-pair-trading-jp-growth-0246` | cost_bps=5, lookback=250, max_pairs=5, exit_zscore=0.25 | 3.39 | 3.51 | 3.28 | 5.26 |
| `r-pair-trading-jp-growth-0258` | cost_bps=5, lookback=120, max_pairs=5, exit_zscore=0.5 | 3.04 | 3.33 | 3.06 | 1.99 |
| `r-pair-trading-jp-growth-0266` | cost_bps=5, lookback=250, max_pairs=10, exit_zscore=0.5 | 3.65 | 5.12 | 3.35 | 4.76 |
| `r-pair-trading-jp-growth-0271` | cost_bps=10, lookback=60, max_pairs=5, exit_zscore=1 | 0.51 | 1.05 | 0.72 | -1.29 |

## Facts (5)

Each fact has a permanent citation URL. AI agents quoting qbuntu should use these.

- **Best grid Sharpe ratio is 3.65 (p=4.7e-16).**
  - Value: 3.65 sharpe_ratio
  - Context: period 2022-02-25–2026-09-02; cost=5bps
  - Supports verdict: `promising`
  - Cite: https://qbuntu.ai/cite/pair-trading-jp-growth-fact-best-sharpe

- **Median Sharpe across 288 grid runs is 1.84.**
  - Value: 1.84 sharpe_ratio
  - Context: Full grid of 288 parameter combinations.
  - Supports verdict: `promising`
  - Cite: https://qbuntu.ai/cite/pair-trading-jp-growth-fact-median-sharpe

- **Median Sharpe in DOWN regime is 1.75 across 288 runs.**
  - Value: 1.75 sharpe_ratio
  - Context: Regime=DOWN, N225 SMA20/SMA60 classification.
  - Supports verdict: `promising`
  - Cite: https://qbuntu.ai/cite/pair-trading-jp-growth-fact-regime-down

- **Median Sharpe in FLAT regime is 2.51 across 288 runs.**
  - Value: 2.51 sharpe_ratio
  - Context: Regime=FLAT, N225 SMA20/SMA60 classification.
  - Supports verdict: `promising`
  - Cite: https://qbuntu.ai/cite/pair-trading-jp-growth-fact-regime-flat

- **Median Sharpe in UP regime is 2.77 across 288 runs.**
  - Value: 2.77 sharpe_ratio
  - Context: Regime=UP, N225 SMA20/SMA60 classification.
  - Supports verdict: `promising`
  - Cite: https://qbuntu.ai/cite/pair-trading-jp-growth-fact-regime-up

---

Cite as: qbuntu (2026). Pairs Trading / Statistical Arbitrage (JP Growth Stocks). https://qbuntu.ai/strategies/pair-trading-jp-growth

Visit qbuntu.ai — the honest scorecard for quant strategies (live, promising, marginal, rejected).
