# Pair Trading

Pair trading strategy.

- Repository: https://github.com/HKUDS/Vibe-Trading (37375 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add HKUDS/Vibe-Trading --skill pair-trading -g -a claude-code -y`
Codex: `npx skills add HKUDS/Vibe-Trading --skill pair-trading -g -a codex -y`
Cursor: `npx skills add HKUDS/Vibe-Trading --skill pair-trading -g -a cursor -y`
Gemini CLI: `npx skills add HKUDS/Vibe-Trading --skill pair-trading -g -a gemini-cli -y`

## Description

Pair trading strategy. Trades mean reversion using the spread/ratio Z-score of two correlated instruments. Requires at least two instruments.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Pair Trading Strategy

## Purpose

Select two highly correlated instruments (such as stocks from the same industry or BTC/ETH), monitor how far their price ratio (or spread) deviates from the mean, and trade against extreme deviations while waiting for mean reversion.

## Signal Logic

1. **Compute the price ratio**: `ratio = close_A / close_B`
2. **Rolling mean and standard deviation**: `mean = ratio.rolling(lookback).mean()`, `std = ratio.rolling(lookback).std()`
3. **Z-score**: `z = (ratio - mean) / std`
4. **Signal generation**:
   - Z < -entry_z → long A, short B (ratio is too low, expected to revert)
   - Z > +entry_z → short A, long B (ratio is too high, expected to revert)
   - |Z| < exit_z → close the position (reverted back near the mean)

## Implementation Notes

- Pair trading requires **exactly two instruments** (`codes` array length = 2)
- The first instrument is A (`leg1`), and the second is B (`leg2`)
- Signals for A and B are opposite: when A is long, B is short, and vice versa
- **Equal-weight allocation only**: A and B each take 50% of capital, with no precise hedge-ratio calculation

## Parameters

| Parameter | Default | Description |
|------|--------|------|
| lookback | 60 | Lookback window for mean and standard deviation |
| entry_z | 2.0 | Entry Z-score threshold |
| exit_z | 0.5 | Exit Z-score threshold |

## Example `config.json`

```json
{
  "source": "tushare",
  "codes": ["601318.SH", "601628.SH"],
  "start_date": "2023-01-01",
  "end_date": "2024-12-31",
  "initial_cash": 1000000,
  "commission": 0.001,
  "extra_fields": null
}
```

Cryptocurrency version:
```json
{
  "source": "okx",
  "codes": ["BTC-USDT", "ETH-USDT"],
  "start_date": "2024-01-01",
  "end_date": "2024-12-31",
  "initial_cash": 1000000,
  "commission": 0.001,
  "extra_fields": null
}
```

## Common Pitfalls

The rest: https://github.com/HKUDS/Vibe-Trading/blob/HEAD/agent/src/skills/pair-trading/SKILL.md
