策略类型 · 统计套利

配对交易(Pairs Trading)
统计套利完整指南

2026-06-03·14 分钟阅读·策略类型

1980 年代中期,Morgan Stanley 的程序员 Nunzio Tartaglia 带了一群物理博士在地下室写程序, 发现历史上股价走得很像的两家公司,价差短期偏离后会回归。 他们把这个发现变成系统化交易策略,年化 50%+, 这套方法后来被叫做「配对交易」(Pairs Trading)

这篇讲配对交易的数学原理、Morgan Stanley 怎么发迹、 加密圈现代版怎么做、为什么 95% 散户尝试后都失败。 并附 Python / Pine 实作范例。

1. 配对交易一句话

同时做多一个资产、做空另一个高度相关的资产, 赌两者价差短期偏离后会回归均值

经典例子:可口可乐(KO)和百事(PEP)股价长期走势类似。 某天 KO 涨、PEP 没跟上 → 做空 KO、做多 PEP, 等价差收敛时两边都关仓获利。

这是「市场中性」策略
因为一边做多、一边做空,整体仓位对大盘方向不敏感。 大盘涨跌都不影响策略 PnL,只要两个资产的「相对」价差收敛就赚。 这对 2008 金融危机这种大事件特别有用 — 全市场崩盘时配对交易理论上不该亏太多。

2. 数学基础:协整、Spread、Z-Score

2.1 协整(Cointegration)

两个时间序列各自都不稳定(会持续涨跌) 但它们的线性组合稳定(会回到均值)。 这就叫协整。

配对交易的选对检验:Engle-Granger Johansen 检验(两种统计检定法)。 通过检验才代表这对能跑配对策略。

# Python: Engle-Granger 协整检验
from statsmodels.tsa.stattools import coint
import pandas as pd

# A, B 是两个资产的价格序列(同期)
score, pvalue, _ = coint(A, B)

# pvalue < 0.05 → 两者协整,可考虑配对
# pvalue 越小越稳定

2.2 Spread(价差)

算出 A、B 的对数价格, 用 OLS 回归得到 hedge ratio β。 Spread = log(A) − β × log(B)。

配对交易就是赌 spread 回归到历史平均

2.3 Z-Score 进场信号

把 spread 标准化:z = (spread − mean) / std。 常见规则:

  • z > +2:spread 过高 → 做空 A、做多 B
  • z < −2:spread 过低 → 做多 A、做空 B
  • |z| < 0.5:spread 回归 → 平仓
  • |z| > 4:可能结构性破坏 → 强制止损
# 简化版 Pairs Trading 逻辑
window = 60  # 60 期均值/标准差

spread = np.log(A) - beta * np.log(B)
mean = spread.rolling(window).mean()
std  = spread.rolling(window).std()
z    = (spread - mean) / std

if z > 2 and position == 0:
    short(A); long(B); position = -1
elif z < -2 and position == 0:
    long(A); short(B); position = +1
elif abs(z) < 0.5 and position != 0:
    close_all(); position = 0
elif abs(z) > 4:
    close_all(); position = 0  # 模型破坏 - 紧急退出

3. Morgan Stanley 起源故事(1980 中后期)

1986 年左右,Nunzio Tartaglia 在 Morgan Stanley 领一群人 — Gerry Bamberger(程序员)、David Shaw(后来开 DE Shaw、间接催生 Two Sigma 和 Citadel)— 做股票「配对」实验。

当时叫「黑盒子」(Black Box Trading), 因为大家不知道里面什么逻辑。后来证实核心就是配对交易 + 部分统计套利。 据传 1987 年策略年化报酬 50%+。

为什么这套会被叫『统计套利』(StatArb)
虽然叫套利,但其实不是真套利(真套利是无风险的,例如三角套利)。 这套是「统计上预期会收敛」的高胜率概率交易 — 每笔胜率 60~70%,靠大数法则赚长期。 Morgan Stanley 同时跑数百对配对, 靠分散把单对失败风险稀释。

1998 LTCM 事件

配对交易的最大教训:协整不是永久成立的

1998 年 LTCM(Long-Term Capital Management)就是用类似逻辑做主权债、 杠杆 25x,俄罗斯违约后相关性突然崩溃, 所有「应该回归」的价差继续发散,3 个月亏 $4.6B, 几乎拖垮全球金融系统。Fed 紧急召集银行救援。

详细看 均值回归策略 — LTCM 4.6B 崩盘完整解析

4. 加密圈版本:BTC vs ETH?

加密圈最常见的配对例子是BTC vs ETH。 两者长期相关性 ~0.85(一年滑动),但短期会背离。

但这对其实不算「协整」 — 因为背后驱动因素不同 (BTC 是价值储存叙事、ETH 是 DeFi / 智能合约叙事), 长期 ETH/BTC 比率有结构性偏移。

加密圈比较容易做配对的对:

  • 同类 L1:SOL vs AVAX、APT vs SUI(同期上线、相似叙事)
  • 同类 LST:stETH vs cbETH(同样 staked ETH,差异是发行商)
  • 同类稳定币:USDC vs USDT(极窄价差,需高频才有意义)
  • L1 vs 衍生 L2:ETH vs ARB / OP(ARB 跟 ETH 强相关但有溢价周期)
  • BTC 现货 vs BTC 永续:技术上叫「现期套利」, 其实就是 z-score 用在 basis 上

5. 一个简化版 Pine 范例

下面是BTC vs ETH 的 z-score 配对策略 Pine 范例:

//@version=5
strategy("BTC-ETH Pairs", overlay=false, initial_capital=10000)

// 取两个资产价格
btc = request.security("BINANCE:BTCUSDT", timeframe.period, close)
eth = request.security("BINANCE:ETHUSDT", timeframe.period, close)

// 计算 spread(这里用简化版 ratio,正式版要先算 OLS hedge ratio)
ratio = btc / eth
window = input.int(100, "Window")

mean = ta.sma(ratio, window)
sd   = ta.stdev(ratio, window)
z    = (ratio - mean) / sd

// 信号规则
long_signal  = z < -2
short_signal = z > 2
exit_signal  = math.abs(z) < 0.5

if long_signal
    strategy.entry("Long BTC / Short ETH", strategy.long)
if short_signal
    strategy.entry("Short BTC / Long ETH", strategy.short)
if exit_signal
    strategy.close_all()

plot(z, title="Z-Score")
hline(2, color=color.red)
hline(-2, color=color.green)
hline(0, color=color.gray)
这只是教学版
正式跑要做的更多:协整检验、动态 hedge ratio、 下单时两个 symbol 同时送出(一边滑价就破坏配对)。 Pine 本身不太擅长同时操作两个资产 — 通常进阶做法是写成两条 Alert, TVSBot 后端收到后一起送出。

6. 散户实作的 5 大陷阱

  1. 把「相关性」当「协整」。 相关性 0.9 不代表 spread 会回归 — 只代表他们涨跌方向一致。协整要看 spread 本身有没有均值回归性质
  2. 不做动态调 hedge ratio。 β 会随市场状态变,固定 β 跑半年后完全失效
  3. 同时下单滑价问题。 两边不能同时成交时, 你已经形成单边风险暴露, 不是配对策略而是裸仓
  4. 没有止损。 协整破坏时 spread 一路发散, 像 LTCM 那样继续加仓等回归 = 自毁
  5. 跑太少对。 机构跑 100~500 对分散风险。 散户跑 1~2 对, 单对失败就 game over。 建议至少 5 对以上分散

7. 为什么 95% 散户尝试后失败

配对交易看起来简单(就是一个 z-score), 实际是对统计学要求很高的策略

  • 选对需要协整检验、计算 hedge ratio
  • 动态 re-estimate β(rolling regression)
  • 同时跑多对分散风险
  • 监控结构性破坏信号(Augmented Dickey-Fuller 变动)
  • 跨交易所执行避免单一资金费率 / 滑价污染

这些散户通常都跳过 — 看了个 BTC/ETH 简单 ratio 信号就上线, 结构性背离(例如 ETH 升级事件)后就一路亏损。

8. 在 TVSBot 上实作

技术上需要:

  1. 两条 Alert(一条 long、一条 short), 或一条 Alert 多个 strategy 路由 (TVSBot 支持 payload.strategy 同时触发两个策略, 细节看 多策略路由文档
  2. 两组 TVSBot 策略,一个对应 long BTC,一个对应 short ETH, 绑同一个 API key 确保同账号内对冲
  3. 调好仓位大小, 根据 hedge ratio β 设定 long / short 的 qty (β = 0.8 代表 long $100 BTC 对应 short $80 ETH)

Get started

想把今天学到的东西自动化跑起来?

想跑配对 / 统计套利?TVSBot 支持多策略路由 + 跨交易所执行,把信号分到不同 API key 并行下单。

免费注册 TVSBot

9. 三个关键 takeaway

  1. 配对交易是市场中性策略 — 一边 long、一边 short, 理论上不依赖大盘方向
  2. 协整 ≠ 相关性。 选对要走统计检验(Engle-Granger / ADF), 不是看共涨共跌就行
  3. LTCM 1998 是最大教训: 协整可以突然破坏,没有止损 + 高杠杆 = 灾难。 一定要有「z > 4 强制平仓」这种 circuit breaker