精選

配對交易完全指南:從理論到實踐,揭開統計套利的神秘面紗

量化研究團隊
量化研究團隊
2025-12-27 197 瀏覽 3 分鐘閱讀
配對交易完全指南:從理論到實踐,揭開統計套利的神秘面紗

引言:在不確定性中尋找相對確定性

2008年金融海嘯期間,當大多數投資組合價值腰斬之際,一些量化對沖基金卻憑藉著一種被稱為「市場中性」的策略取得了正回報。這種策略的核心思想之一,就是配對交易。它不預測市場的絕對方向,而是專注於資產之間的相對價格關係。想像一下,你發現可口可樂和百事可樂的股價長期以來就像一對共舞的舞伴,步調基本一致。當其中一位舞伴突然超前或落後太多時,你便下注他們最終會重新同步。這就是配對交易的精髓:做多相對低估的資產,同時做空相對高估的資產,從價差回歸中獲利。

配對交易的理論基石:不僅僅是相關性

許多初學者誤以為配對交易就是尋找兩隻高度相關的股票。然而,相關性衡量的是價格變化的方向同步性,卻無法保證價格水平本身不會永久性偏離。真正的理論核心是協整

什麼是協整?

協整由諾貝爾經濟學獎得主羅伯特·恩格爾和克萊夫·格蘭傑提出。簡單來說,如果兩個非平穩的時間序列(如股票價格)的某個線性組合是平穩的,那麼它們就是協整的。這個平穩的線性組合就是我們交易的「價差」。

數學上,對於兩個價格序列 \(P_{A,t}\) 和 \(P_{B,t}\),如果存在一個係數 \(\gamma\),使得價差序列 \(S_t = P_{A,t} - \gamma P_{B,t}\) 是平穩的(均值回歸),那麼A和B就是協整的。這個 \(\gamma\) 被稱為對沖比率

協整 vs. 相關性:一個關鍵區別

考慮油價(XOM)和一家完全獨立的科技公司(AAPL)。它們在某段時間內可能因為市場整體情緒而呈現正相關(同漲同跌),但它們的價差沒有理由回歸到一個長期均值——科技股可能永遠跑贏能源股。相反,像花旗集團(C)和摩根大通(JPM)這樣的同業銀行股,雖然價格各自隨機遊走,但其價差受制於相似的監管環境、利率週期和經濟基本面,因此更可能呈現均值回歸特性。這就是協整的力量。

實戰四部曲:構建你的配對交易策略

第一步:配對選擇與數據準備

選擇邏輯至關重要。常見方法包括:

  • 基本面驅動:選擇同一行業、市值相近、業務模式類似的公司(如麥當勞 vs. 溫蒂漢堡)。
  • 統計驅動:在大範圍股票池中進行大規模協整檢驗,尋找統計顯著的配對。此法計算量大,且可能產生「數據窺探偏差」。

業界通常結合兩者。我們以美國零售業的兩大巨頭沃爾瑪(WMT)和Target(TGT)作為候選案例。

import yfinance as yf
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.stattools import coint
import matplotlib.pyplot as plt

# 下載歷史數據
tickers = ['WMT', 'TGT']
data = yf.download(tickers, start='2018-01-01', end='2023-12-31')['Adj Close']
data.columns = tickers

# 計算對數價格(通常更平穩,回報更接近正態分佈)
log_data = np.log(data)

第二步:協整檢驗與對沖比率計算

我們使用最常用的恩格爾-格蘭傑兩步法進行協整檢驗,並用普通最小二乘法估算對沖比率。

# 恩格爾-格蘭傑協整檢驗
score, pvalue, _ = coint(log_data['WMT'], log_data['TGT'])
print(f'協整檢驗p值: {pvalue:.4f}')
# 通常p值小於0.05表示在95%置信水平下拒絕「不存在協整關係」的原假設

# 計算對沖比率 gamma (使用OLS回歸: WMT = gamma * TGT + c)
model = sm.OLS(log_data['WMT'], sm.add_constant(log_data['TGT']))
results = model.fit()
gamma = results.params['TGT']
print(f'對沖比率 gamma (TGT係數): {gamma:.4f}')

# 計算價差序列
spread = log_data['WMT'] - gamma * log_data['TGT']

第三步:交易信號生成

價差序列被假定為均值回歸。我們需要定義何時偏離足夠遠以觸發交易。常用方法是計算價差的Z分數

\[ Z_t = \frac{S_t - \mu_S}{\sigma_S} \]

其中,\(\mu_S\) 和 \(\sigma_S\) 是價差在回顧窗口(如60天)內的滾動均值和滾動標準差。

# 計算滾動均值和標準差(使用60交易日窗口)
window = 60
spread_mean = spread.rolling(window=window).mean()
spread_std = spread.rolling(window=window).std()

# 計算Z分數
zscore = (spread - spread_mean) / spread_std

# 定義交易閾值
entry_threshold = 2.0  # 當|Z| > 2時開倉
exit_threshold = 0.5   # 當|Z| < 0.5時平倉

# 生成交易信號
# 當Z分數低於 -entry_threshold,價差過窄(WMT相對太便宜,TGT相對太貴):
# -> 做多價差 = 做多1股WMT + 做空 gamma 股TGT
# 當Z分數高於 entry_threshold,價差過寬:
# -> 做空價差 = 做空1股WMT + 做多 gamma 股TGT
long_signal = zscore < -entry_threshold
short_signal = zscore > entry_threshold
exit_signal = np.abs(zscore) < exit_threshold

第四步:回測與績效評估

模擬策略表現,需考慮交易成本、滑價和保證金。以下是簡化回測:

# 初始化持倉和投資組合價值
positions = pd.DataFrame(index=zscore.index, columns=['WMT', 'TGT', 'Portfolio'])
positions['WMT'] = 0
positions['TGT'] = 0
positions['Portfolio'] = 0.0  # 現金+持倉市值

cash = 1000000  # 初始本金
position_held = False
trade_log = []

for i in range(window, len(zscore)):
    current_price_WMT = data['WMT'].iloc[i]
    current_price_TGT = data['TGT'].iloc[i]
    
    # 平倉信號
    if position_held and exit_signal.iloc[i]:
        # 平掉所有WMT和TGT的頭寸(此處簡化,實際需按開倉方向反向操作)
        cash += positions['WMT'].iloc[i-1] * current_price_WMT + positions['TGT'].iloc[i-1] * current_price_TGT
        positions.loc[positions.index[i], ['WMT', 'TGT']] = 0
        position_held = False
        trade_log.append(f"{positions.index[i]}: 平倉")
    
    # 開多價差信號 (做多WMT,做空TGT)
    elif not position_held and long_signal.iloc[i]:
        # 假設投入10萬美元於價差交易,計算股數
        capital_per_leg = 100000
        wmt_shares = capital_per_leg / current_price_WMT
        tgt_shares = -gamma * capital_per_leg / current_price_TGT  # 負號表示做空
        
        cash -= (wmt_shares * current_price_WMT + tgt_shares * current_price_TGT)  # 做空帶來現金流入
        positions.loc[positions.index[i], 'WMT'] = wmt_shares
        positions.loc[positions.index[i], 'TGT'] = tgt_shares
        position_held = True
        trade_log.append(f"{positions.index[i]}: 做多價差 (Z={zscore.iloc[i]:.2f})")
    
    # 開空價差信號 (做空WMT,做多TGT) - 邏輯類似,代碼略
    
    # 更新投資組合市值
    if position_held:
        positions.loc[positions.index[i], 'Portfolio'] = cash + positions['WMT'].iloc[i] * current_price_WMT + positions['TGT'].iloc[i] * current_price_TGT
    else:
        positions.loc[positions.index[i], 'Portfolio'] = cash

# 繪製投資組合淨值曲線
portfolio_value = positions['Portfolio'].replace(0, np.nan).dropna()
(portfolio_value / portfolio_value.iloc[0]).plot(title='策略淨值曲線 (簡化回測)')
plt.ylabel('累積回報')
plt.show()

歷史案例深度剖析

案例一:美國航空(AAL)與達美航空(DAL)在疫情中的崩潰與復甦(2020)

2020年3月新冠疫情爆發,航空股全線暴跌。一個經典的配對交易思路是做多相對堅挺的達美航空,做空相對脆弱的美國航空。然而,這場危機揭示了配對交易的一個重大風險:結構性斷裂。政府救助、公司破傳聞、債務負擔差異等基本面衝擊,可能永久性改變兩家公司間的均衡關係。價差不僅沒有回歸,反而可能持續擴大,導致雙邊虧損。成功的基金並非簡單地套用歷史模型,而是動態評估政府干預的可能性與公司生存概率,及時調整甚至暫停策略。

案例二:歐元/美元與英鎊/美元的匯率配對(2014-2016)

這是一個經典的跨市場套利案例。歐元和英鎊都對美元交易,且經濟聯繫緊密。許多量化基金曾建立歐元/美元與英鎊/美元的價差交易。然而,2016年英國脫歐公投通過,導致英鎊基本面發生劇變,與歐元的長期均衡關係被打破。那些僅依賴歷史數據、未納入政治風險模型的策略遭受重創。這個案例強調了納入宏觀與事件風險因子的重要性。

風險警示:為什麼大多數散戶的配對交易會失敗?

  • 偽相關性與過度擬合:在大量數據中挖掘出的「協整」關係可能只是統計巧合,樣本外失效。
  • 交易成本侵蝕利潤:高頻的均值回歸交易可能被佣金、滑價和買賣價差吞噬所有alpha。
  • 協整關係破裂:如案例所示,併購、監管、技術革新都可能永久改變配對關係。
  • 流動性與融券風險:做空側可能面臨無法借到股票或被迫平倉的風險。
  • 槓桿的雙刃劍:市場中性策略往往使用高槓桿以放大微薄利潤,這在價差不利變動時會導致毀滅性損失。

進階方向與行動建議

對於有志於深入此領域的投資者:

  1. 從模擬交易開始:用本文的代碼框架測試不同行業、不同參數(窗口、閾值)的表現。
  2. 學習正規檢驗方法:深入研究Johansen協整檢驗、Kalman Filter動態估計對沖比率。
  3. 擴展到多腿配對:使用PCA或聚類方法構建「一籃子股票vs另一籃子股票」的交易,穩定性更佳。
  4. 整合機器學習:用XGBoost或神經網絡預測價差運動,而非簡單依賴Z分數閾值。
  5. 必讀權威文獻
    • 書籍:Pairs Trading: Quantitative Methods and Analysis by Ganapathy Vidyamurthy。這是該領域的經典教科書。
    • 論文:Gatev, E., Goetzmann, W. N., & Rouwenhorst, K. G. (2006). Pairs Trading: Performance of a Relative-Value Arbitrage Rule. The Review of Financial Studies. 這篇論文首次對配對交易進行了大規模的學術實證研究。

免責聲明與結語

免責聲明:本文所有內容僅供教育與研究目的,不構成任何投資建議。金融市場交易存在重大風險,可能導致本金全部損失。過往表現不預示未來結果。文中提及的股票、案例僅為說明用途,並非推薦。讀者進行任何投資決策前,應諮詢獨立專業財務顧問,並充分了解相關風險。

配對交易是一門將優雅的統計理論與殘酷的市場現實相結合的藝術。它並非「聖杯」,而是一個需要持續研究、嚴謹風險管理和技術迭代的專業領域。正如傳奇量化基金Renaissance Technologies的創始人詹姆斯·西蒙斯所言:「我們尋找那些微小的、可預測的異常,並通過大量的交易將其聚合起來。」配對交易正是這種哲學的絕佳體現。祝你踏上這段迷人的量化探索之旅。

分享此文章

相關文章

波動率目標策略:量化交易中的動態風險調節器——從理論到實戰的深度解析

波動率目標策略:量化交易中的動態風險調節器——從理論到實戰的深度解析

在瞬息萬變的金融市場中,如何系統性地管理風險是長期獲利的關鍵。波動率目標策略(Volatility Targeting)正是這樣一種強大的風險管理框架,它動態調整投資組合的風險敞口,旨在實現穩定的風險水平。本文將深入探討其背後的數學原理,剖析2008年金融危機與2020年疫情崩盤中的經典案例,並提供實用的Python實作範例。我們將揭示如何將這一對沖基金常用的技術應用於個人投資組合,在追求報酬的同時,有效馴服市場的狂野波動。

季節性交易策略的量化解剖:揭開月份效應與節假日效應的統計真相與實戰陷阱

季節性交易策略的量化解剖:揭開月份效應與節假日效應的統計真相與實戰陷阱

在華爾街超過十五年的量化生涯中,我見證了無數策略的興衰,而季節性策略以其看似簡單的邏輯和頑強的生命力,始終是量化工具箱中一個引人入勝的角落。本文將以資深量化交易員的視角,深度剖析「月份效應」(如一月效應、Sell in May)與「節假日效應」(如聖誕行情、感恩節前後)背後的統計證據、經濟學解釋與微結構成因。我們將超越坊間傳聞,運用嚴謹的回測框架、Python實戰代碼,並結合真實市場案例(如2008年金融危機對季節模式的扭曲),揭示如何將這些「日曆異象」轉化為具有風險調整後超額收益的系統性策略,同時毫不避諱地討論其數據探勘風險、結構性衰減以及嚴格的風控要求。

時間序列分析的量化交易實戰:從ARIMA預測到GARCH波動率建模的完整指南

時間序列分析的量化交易實戰:從ARIMA預測到GARCH波動率建模的完整指南

在量化交易的領域中,價格與波動率不僅是數字,更是蘊含市場情緒與風險的複雜時間序列。本文將帶您深入探討從經典的ARIMA模型到捕捉波動叢聚的GARCH家族模型。我們將拆解背後的數學原理,分享華爾街實戰中的應用案例,並提供Python實作範例。您將學到如何建立一個結合均值與波動率預測的交易策略框架,同時理解這些強大工具的局限性與風險。這不僅是一篇技術指南,更是一位資深量化交易員的經驗結晶。

交易成本建模:量化策略的隱形殺手與致勝關鍵——從理論模型到實戰調優的深度解析

交易成本建模:量化策略的隱形殺手與致勝關鍵——從理論模型到實戰調優的深度解析

在量化交易的競技場中,阿爾法(Alpha)的發掘固然激動人心,但交易成本的精確建模與管理,往往是區分紙上富貴與實際盈利的關鍵分野。本文將深入剖析交易成本的核心構成——佣金、買賣價差與市場衝擊成本,並揭示後者如何隨訂單規模呈非線性劇增。我們將探討經典的Almgren-Chriss最優執行模型,並透過2010年「閃電崩盤」及統計套利策略的實戰案例,展示成本建模失誤的毀滅性後果。最後,提供結合TWAP/VWAP、預測模型與實時監控的實用框架,並附上Python實作範例,助您將理論轉化為守護策略夏普率的堅實盾牌。