配對交易(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