配對交易 Pairs Trading 實戰:用 Python 重建 Edward Thorp 的統計套利策略
第 18 課・共 18 課
目錄
Edward Thorp 是統計套利的先驅:他發明二十一點算牌術、與信息論之父 Claude Shannon 合作研製首部可穿戴電腦擊敗輪盤,其後把同一套數學思維帶進金融市場,以配對交易 Pairs Trading 建立起規模達八億美元的基金王國。本課筆記整理自 Algo-trading with Saleh 的教學影片,講者 Saleh 用 Python 與 Jesse 框架由零重建這套市場中性策略,並公開他自己實盤運行後的改良心得——包括回測由「看似完美」到「計入手續費後慘不忍睹」、再逐步修復的完整過程。
學習重點
- 配對交易的本質:同時做多一隻、做空另一隻相關資產,賺取價差收斂,不賭市場單邊方向,屬市場中性策略。
- 選對標的靠協整而非相關:相關只代表同向移動,協整(Cointegration)才保證價差有回歸均值的性質。
- 進出場用 Z 分數或布林帶:價差偏離均值若干個標準差時開倉,回歸均值時平倉;講者實測布林帶版本效果更佳。
- 成本決定生死:同一策略不計手續費時最大回撤僅 -5%,計入手續費與滑點後可變成 -95%,濾掉「不值得做」的交易是關鍵改良。
- 講者親認回測期有被揀選:2025 年上半年表現亮麗,拉長至 2024 年則明顯失色——樣本外驗證永遠不可省。
詳細筆記
Thorp 與市場中性的概念
講者開首介紹 Edward Thorp 的背景:這位數學家先後在賭場與金融市場證明「或然率優勢可以系統化變現」。他稱配對交易為統計套利(Statistical Arbitrage),核心是一種市場中性結構——任何時刻都同時持有一個多頭與一個空頭倉位,市場整體升跌與盈虧無直接關係,利潤來自兩隻資產之間相對強弱的收斂。想深入了解 Thorp 其人,講者推薦其自傳《A Man for All Markets》。
研究環境與數據準備
講者在 Jupyter Notebook 內做前期研究,配合 Jesse 這個 Python 加密貨幣交易框架:Notebook 須放在 Jesse 項目根目錄,才能使用其 research 模組匯入數據。幾個關鍵設定:
- 交易所:Binance 永續合約。原因很實際——配對交易需要同時做多與做空,現貨市場無法做空,必須用永續合約。
- 標的與時段:示範用 ETH 與 ETC,2025 年 1 月 1 日至 9 月 1 日,15 分鐘圖。講者提醒時間框架越短,交易機會越多,但手續費開支亦越大,兩者要權衡。
- 價格轉回報:ETH 價格以千美元計、ETC 以十美元計,量綱不同無法直接相減,所以先用 Jesse 的
prices_to_returns工具函數把兩條價格序列轉成回報序列,令兩者處於同一尺度。
把兩條回報序列畫在同一圖上,可見它們大致同向移動(相關),但並非完全同步:某些時段 ETC 跑贏 ETH,某些時段相反。若在 ETC 相對偏強時做空 ETC、做多 ETH,待兩者關係回復時平倉,便能賺取這段背馳——這就是配對交易的利潤來源,也是「不需要預測市場方向」的真正含義。
用 Z 分數量度背馳
肉眼看到的「背馳」要變成程式訊號,需要一個量度工具:Z 分數 Z-Score。做法分兩步:先計算價差序列(兩條回報序列相減),再把價差標準化——減去序列均值、除以序列標準差。Z 分數的答案代表「當前價差偏離均值多少個標準差」。
講者在圖上畫出 +1.2 與 -1.2 兩條門檻線:Z 分數升穿上軌,做空第一隻資產、做多第二隻;跌穿下軌則反向操作;回到均值(零線)平倉。門檻越低交易越頻密,屬需要測試的參數。

相關不等於協整
兩隻資產同向移動(相關)不足以支持配對交易,還要確認它們協整 Cointegration——即價差序列長期穩定、具回歸均值的性質。講者承認自己把概念大幅簡化,建議讀者自行查閱嚴謹定義;實務上 Jesse 已內建檢定函數,一行代碼便知結果。ETH 與 ETC 通過檢定,適合做配對;若想交易較冷門的組合(例如兩家交易所的平台幣),開倉前必須先做這一步。
前視偏差的警告
講者特別指出:Notebook 示範中用「整段數據的均值」去定門檻,嚴格來說犯了前視偏差 Look-Ahead Bias——回測時偷看了未來數據,結果必然虛高。之所以示範無妨,是因為 Jesse 框架在正式回測時只向策略暴露「到當刻為止」的數據,從機制上杜絕了這個問題。但若讀者自行以其他工具回測,必須改用滾動窗口計算均值與標準差。
策略程式結構(Jesse 框架)
講者的 GitHub 倉庫有兩個策略檔:PairsTrading 負責全部計算與決策,PairsTrading2 負責第二條交易路線,純粹讀取第一個策略寫入 shared_vars 字典的指令(1 = 做多、-1 = 做空、0 = 平倉),結構簡單。
主策略的要點:
- 數據窗口:取兩隻標的各自最近 200 支 K 線的收市價,轉成回報。200 這個回看期是講者的選擇,可自行測試。
- 計算價差與 Z 分數:價差序列要略過首個 NaN 值(
c1[1:] - c2[1:]);真正用作訊號的只有 Z 分數序列的最後一個值。
@property
def spread(self):
return self.c1[1:] - self.c2[1:]
@property
def z_score(self):
spread = self.c1[1:] - self.c2[1:]
z_scores = utils.z_score(spread)
return z_scores[-1]
(以上代碼摘錄自原片教學)
before()方法:Jesse 在每支 K 線收市後最先執行的鉤子,適合放訊號計算。策略在此每 24 小時重新做一次協整檢定,若關係失效便把倉位指令歸零、停止開倉。- 倉位分配:用
calculate_alpha_beta求出對沖比率 beta,再按公式分配保證金——第一倉佔1/(1+beta)、第二倉佔beta/(1+beta),令兩邊風險敞口對稱。講者強調倉位公式對結果影響極大,市面有不同做法,這部分值得深入研究。

殘酷的第一課:手續費
上一輯影片的回測(不計手續費)極之亮麗:超過 7,800 宗交易,最大回撤僅約 -5%。但一旦計入交易所手續費並預留滑點,權益曲線立刻崩壞。本課用 BTC 與 SOL 重做實驗:即使手續費設為零,2025 年上半年的最大回撤已達 -41%;計入貼近市價單實際成本的費率後,同一策略虧掉 95% 本金。講者的結論很直接:原版邏輯在真實成本下不可交易。
四重改良:由虧 95% 到六個月 +18%
講者分享他實盤期間逐步加入的改良,每加一層回測便改善一截:
一、布林帶取代固定門檻。 不再用 Z 分數加 ±1.2 硬門檻,改為對價差序列直接套布林帶(20 期):價差跌穿下軌做多價差、升穿上軌做空價差、回到中軸平倉。效果與 Z 分數類似,但門檻隨近期波動自動調節,交易次數與虧損同步下降。
二、ADX 濾網。 ADX 量度市場波動與趨勢強度。講者設定門檻 30:ADX 低於 30 的平淡市況不開倉,只在波動夠大、市場較可能出現定價失效的時段交易。
三、趨勢濾網(KAMA)。 以 KAMA 均線判斷方向:價格在 KAMA 之上視為升勢,才允許做多第一隻資產;跌勢中才允許做空。令配對的方向與大勢一致,減少逆勢接刀。
四、價值濾網與組合止損。 這是講者認為最關鍵的一層。開倉前先問「這宗交易值不值得做」:價差絕對值必須大於 1.5%(流動性高的幣種;迷因幣波動大,門檻或要上調至 4%),否則預期利潤連手續費都不夠付。平倉邏輯同樣改造:兩個倉位的合計浮盈達 1.5% 即可收割,不必苦候價差完全回歸中軸;合計浮虧達 -5% 則強制平倉——配對策略的止損必須看兩倉合計盈虧,不能用一般單邊止損單。
if self.is_close and self.current_spread < bb.lowerband and self.adx and self.trend == 1 and self.is_worth_opening:
self.shared_vars["s1-position"] = 1
self.shared_vars["s2-position"] = -1
self._set_proper_margin_per_route()
elif self.is_long and self.current_spread > bb.middleband and (self.is_worth_closing or self.time_to_stop):
self.shared_vars["s1-position"] = 0
(以上代碼摘錄自原片教學)

改良過程的數字變化(講者提供的回測結果):交易次數由 286 宗銳減至 28 宗,中間版本勝率僅 28%、最大回撤 -10%,Sharpe ratio 由 -12 逐步改善至 -2;加入最後的平倉與止損邏輯後,2025 年上半年六個月回報 +18%、最大回撤僅 -2%、勝率 87%、Sharpe ratio 2.81——而且是已計手續費的數字。
講者的坦白:運氣與樣本外表現
值得記下的是講者的誠實。他明言回測期有揀選成分:把時段拉長至 2024 年初至 2025 年 11 月,策略在 2024 年(尤其年底)表現明顯失色,2025 年才持續造好。他 2025 年實盤運行確實獲利,但自認有幾分運氣。他亦沒有跑參數最佳化(Jesse 的最佳化模式暫不支援多路線策略),所有改動都基於邏輯推理而非暴力搜參——這反而降低了過度擬合的風險。
實盤最大的教訓是滑點:他實際支付的滑點高於回測假設(他並非在 Binance 交易,流動性較差)。他提醒若用在迷因幣上,波動大、機會多,但市況最波動時正是做市商抽走流動性的時刻,滑點會進一步惡化,回測的費率假設要預得更鬆。最後他建議不要只做一對,同時跑四至十對組合,權益曲線會平滑得多,最大回撤、Calmar 與 Sharpe ratio 都會改善。

🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:
ZA Bank 邀請碼 P20923
—— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。
立即開戶 →
(聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)
MT5 可行性速評
| 項目 | 評估 |
|---|---|
| 邏輯可移植性 | Z 分數、布林帶、ADX、KAMA 均可實現(布林帶/ADX/KAMA 有內建指標函數),但統計計算要自寫:MQL5 無內建協整檢定與 Z 分數函數,均值、標準差、對沖比率 beta 須用迴圈自行計算,或預先在 Python 算好定期匯入。 |
| 平台限制 | 配對交易涉及兩個品種:MT5 的 EA 可用 iClose 等函數讀取多品種數據並分別落盤,但策略測試器對多品種 EA 的回測支援有限(部分版本僅對主圖品種逐 tick 模擬),價差序列與合計盈虧止損都要自行合成與追蹤,工程量大。 |
| 評級 | ⚠️ 需自訂元件——核心統計元件(協整檢定、beta、價差合成)與組合止損均無現成方案,多品種回測可信度亦打折;建議先在 Python 完成研究,MT5 只作執行層。 |
| MQL5 寫法提示 | 見下方示意。 |
// 示意:讀取兩品種收市價並合成對數價差(非完整 EA)
double c1 = iClose("ETHUSD", PERIOD_M15, 1);
double c2 = iClose("ETCUSD", PERIOD_M15, 1);
double spread = MathLog(c1) - MathLog(c2);
// 均值與標準差需自建陣列以迴圈計算,再求 z = (spread - mean) / sd
注意:MT5 回測同樣會過度擬合,tick 數據質素與 spread 模型對結果影響極大,回測曲線亮麗不代表實盤可行。
欣利克的看法
- 相關與協整要分清。 不少人選配對標的時只看走勢圖形是否相似,這只檢驗了相關性。配對交易的立足點是價差會回歸,而只有協整關係才提供這個保證。兩者混淆,是配對交易新手最常見的概念誤區。
- 防坑檢查:原片出乎意料地合格。 本頻道其他影片往往對回測陷阱着墨不多,但本課講者主動交代了四樣關鍵事項:手續費如何令策略由正轉負、實盤滑點高於假設、前視偏差的原理,甚至親口承認回測期有揀選、2024 年樣本外表現不佳。仍缺的一項是參數敏感度分析——1.2、1.5%、-5%、30 這些門檻若輕微改動結果會否劇變,原片沒有展示,讀者自行實驗時應補做。
- 「八億美元」要看時代背景。 Thorp 活躍於二十世紀七十至九十年代,當時市場電腦化程度低、統計套利競爭者稀少,定價失效又大又持久。截至 2026 年中,這類機會被大量量化基金與高頻交易商爭奪,價差收斂更快、更淺,個人投資者能分到的利潤空間與當年不可同日而語。
- 87% 勝率不是「穩賺」的同義詞。 從原片回測明細可見,該版本平均盈利約 118 美元、平均虧損約 222 美元,盈虧比僅 0.53——典型高勝率、低賠率結構。這類策略容錯空間小,少數幾宗大虧足以抹去長期積累,-5% 組合止損的執行紀律正是整套系統的命脈。
- 所有績效數字請加時間濾鏡。 文內 +18%、-2% 回撤等數據全部來自講者對 2025 年上半年特定幣對的回測,屬單一時段結果;2024 年的延伸回測已證明策略並非任何時候都有效。
名詞解釋
- 配對交易 Pairs Trading:同時做多一隻、做空另一隻相關資產,賺取價差收斂的市場中性策略。
- 統計套利 Statistical Arbitrage:以統計模型發掘資產間暫時定價偏差的策略家族,配對交易是其最簡單形式。
- 協整 Cointegration:兩個價格序列的線性組合長期穩定的性質,配對交易選標的時比相關性更嚴謹的檢驗。
- Z 分數 Z-Score:量度數值偏離均值多少個標準差,用作價差進出場訊號。
- 均值回歸 Mean Reversion:價格或價差偏離長期均值後傾向回歸的假設,本策略的核心思想。
- 布林帶 Bollinger Bands:移動平均加減標準差構成的通道,本課用以取代固定 Z 分數門檻。
- 前視偏差 Look-Ahead Bias:回測時誤用未來數據令結果虛高的常見陷阱。
- 回測 Backtesting:以歷史數據檢驗交易規則是否可行的過程。
- 滑點 Slippage:預期成交價與實際成交價的落差,本課實盤最大的額外成本。
- MT5 MetaTrader 5:MetaQuotes 開發的多資產交易平台,支援 EA 自動交易與策略回測。
- MQL5 語言:MT5 平台的程式語言,語法接近 C++,用於編寫 EA 與自訂指標。
- 自動交易程式 Expert Advisor:運行於 MetaTrader 平台、按預設規則全自動交易的程式。
常見問題 FAQ
配對交易是否真的「市場中性、不會蝕錢」?
不是。市場中性只表示盈虧與大市方向脫鈎,並非沒有風險。若兩隻資產的協整關係失效,價差可以持續擴大而不回歸,兩邊倉位同時受壓;加上雙邊手續費與滑點,成本控制不當時虧損可以很快累積。原片不計成本的回測與計入成本後的結果相差近 90 個百分點,正是最佳說明。
為甚麼要用永續合約而不能用現貨做配對交易?
配對交易要求任何時刻都一長一短,而現貨市場沒有做空機制——你只能買入並持有,無法建立空頭倉位。永續合約允許直接開空,才能組成完整的配對。股票市場的對應做法是沽空(借貨賣出),同樣涉及額外成本與規則。
協整檢定通過後,這對資產就可以一直交易下去嗎?
不可以。協整是統計關係,會隨基本面與市場結構改變而失效。原片講者的做法是在策略中每 24 小時重新檢定一次,一旦失效便停止開倉。即使檢定持續通過,亦只代表歷史上價差穩定,不保證未來短期內必然收斂。
為甚麼講者最後建議同時交易多對組合?
單一配對的權益曲線受該組合的獨特事件影響很大,回撤集中。同時運行四至十對相關性低的組合,個別組合的虧損會被其他組合的盈利攤薄,權益曲線更平滑,最大回撤與 Sharpe ratio 等風險指標通常改善——本質上是把同一套統計優勢分散到更多獨立樣本上。
原影片
本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看: