配对交易(Pairs Trading)
统计套利完整指南
1980 年代中期,Morgan Stanley 的程序员 Nunzio Tartaglia 带了一群物理博士在地下室写程序, 发现历史上股价走得很像的两家公司,价差短期偏离后会回归。 他们把这个发现变成系统化交易策略,年化 50%+, 这套方法后来被叫做「配对交易」(Pairs Trading)。
这篇讲配对交易的数学原理、Morgan Stanley 怎么发迹、 加密圈现代版怎么做、为什么 95% 散户尝试后都失败。 并附 Python / Pine 实作范例。
1. 配对交易一句话
同时做多一个资产、做空另一个高度相关的资产, 赌两者价差短期偏离后会回归均值。
经典例子:可口可乐(KO)和百事(PEP)股价长期走势类似。 某天 KO 涨、PEP 没跟上 → 做空 KO、做多 PEP, 等价差收敛时两边都关仓获利。
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%+。
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)6. 散户实作的 5 大陷阱
- 把「相关性」当「协整」。 相关性 0.9 不代表 spread 会回归 — 只代表他们涨跌方向一致。协整要看 spread 本身有没有均值回归性质
- 不做动态调 hedge ratio。 β 会随市场状态变,固定 β 跑半年后完全失效
- 同时下单滑价问题。 两边不能同时成交时, 你已经形成单边风险暴露, 不是配对策略而是裸仓
- 没有止损。 协整破坏时 spread 一路发散, 像 LTCM 那样继续加仓等回归 = 自毁
- 跑太少对。 机构跑 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 上实作
技术上需要:
- 两条 Alert(一条 long、一条 short), 或一条 Alert 多个 strategy 路由 (TVSBot 支持
payload.strategy同时触发两个策略, 细节看 多策略路由文档) - 两组 TVSBot 策略,一个对应 long BTC,一个对应 short ETH, 绑同一个 API key 确保同账号内对冲
- 调好仓位大小, 根据 hedge ratio β 设定 long / short 的 qty (β = 0.8 代表 long $100 BTC 对应 short $80 ETH)
9. 三个关键 takeaway
- 配对交易是市场中性策略 — 一边 long、一边 short, 理论上不依赖大盘方向
- 协整 ≠ 相关性。 选对要走统计检验(Engle-Granger / ADF), 不是看共涨共跌就行
- LTCM 1998 是最大教训: 协整可以突然破坏,没有止损 + 高杠杆 = 灾难。 一定要有「z > 4 强制平仓」这种 circuit breaker