统计套利方法论

Read in English

配对交易是入门级的统计套利。真正的对冲基金交易的是 一篮子 ,由 20 到 100 只股票组成,中性化市场、行业、市值和动量因子,以提取纯粹的均值回归 alpha。Renaissance Technologies、D.E. Shaw 和 Two Sigma 正是靠这套做法在任何市场环境下都能取得稳定回报。下面讲的是如何把机构级的统计套利改造成散户可用的版本——不需要一亿美元,也不需要一支博士团队。

⚠️ 风险提示

统计套利伴随重大风险: 危机中相关性会失效,杠杆会放大亏损,高换手意味着高成本,而且市场中性 ≠ 无风险。大多数散户统计套利交易者都是亏钱的。本文仅用于教育目的,不构成投资建议。永远不要用你输不起的钱去交易。

📚 前置知识

在尝试统计套利之前,你必须先理解:

为什么只做配对交易还不够

配对交易(PEP/KO、JPM/BAC)确实有效,但存在 重大局限:

问题 配对交易 一篮子统计套利
分散投资 只有 1 对(个股特有风险集中) 20 到 100 只股票(分散了公司层面的风险)
协整关系(cointegration)破裂 一对失效,整个策略就失效 多对之间可以互相弥补失效
因子暴露 隐藏的行业、市值、价值偏向 显式中性化(市场、行业、市值、动量)
容量 可投入资金有限(约 1 万至 5 万美元) 执行得当可扩展到 50 万美元以上
夏普比率 0.8 到 1.5(不错,但收益不平滑) 1.2 到 2.0 以上(回报更平滑)

结论: 配对交易教你概念,一篮子统计套利才是专业人士真正的做法。

核心思想:规模化的均值回归

简单说: 找出 20 到 50 只历史上同涨同跌的股票(同一行业、特征相似)。当其中某些股票偏离组内平均值太远时,买入落后的、做空领先的。等待均值回归,平仓,再重复。

它为何有效:

  • 过度反应: 市场对消息反应过度,制造出短期错误定价
  • 羊群效应: 资金流动会在行业内部造成暂时的错位
  • 流动性失衡: 大单会把价格暂时推离公允价值
  • 统计优势: 同一行业的股票有 60% 到 80% 的方差是共同的

学术依据:

  • Gatev、Goetzmann 与 Rouwenhorst(2006): 《Pairs Trading: Performance of a Relative-Value Arbitrage Rule》——记录了 1967 至 2002 年间 11% 的年化收益,夏普比率 1.4
  • Do 与 Faff(2010): 《Does Simple Pairs Trading Still Work?》——发现 2002 年后收益下滑,但采用一篮子方法仍能保持正收益(年化 6% 到 8%)
  • Avellaneda 与 Lee(2010): 《Statistical Arbitrage in the U.S. Equities Market》——证明因子中性的一篮子组合每年比简单配对高出 4% 到 6%

方法一:一篮子配对(基于行业)

方法: 在一个行业内交易一篮子股票,相对行业均值做多落后者、做空领先者。

分步实施

1. 选择股票池: 挑一个流动性好的行业(例如科技、金融、医疗保健)

示例:科技行业篮子

AAPL, MSFT, GOOGL, META, NVDA, AMD, INTC, CRM, ORCL, ADBE, CSCO, AVGO, QCOM, TXN, AMAT, MU, NFLX, PYPL, INTU, NOW

20 只股票,市值均在 500 亿美元以上,日均成交量超过 500 万股

2. 计算 z-score(z 分数): 对每只股票,衡量它相对行业篮子的偏离程度

import pandas as pd
import numpy as np

# 计算行业篮子(等权重)
basket_return = sector_stocks.mean(axis=1)

# 计算 z-score(回看 20 天)
for stock in sector_stocks.columns:
    spread = sector_stocks[stock] - basket_return
    z_score = (spread - spread.rolling(20).mean()) / spread.rolling(20).std()

# 入场:|z-score| 大于 2.0
# 离场:z-score 穿越 0(均值回归完成)

3. 仓位规模: 按 z-score 的绝对值大小分配仓位权重

  • z-score = -2.5 的股票(超卖):做多组合的 1.25%
  • z-score = +2.0 的股票(超买):做空组合的 1.0%
  • 单只股票最大仓位 2%(限制个股爆雷风险)
  • 目标: 做多 10 到 15 个仓位,做空 10 到 15 个仓位(合计 20 到 30 个)

4. 风险管理:

  • 止损: 若 z-score 达到 ±3.5 就离场(价差在扩大,而不是回归)
  • 时间止损: 若 10 个交易日内没有回归就平仓(避免资金被套死)
  • 行业中性: 确保多头总额 = 空头总额(美元中性)
  • 组合最大敞口: 100% 多头 + 100% 空头 = 2 倍总杠杆(偏保守)

真实示例:科技股篮子(2023 年第三季度)

日期 股票 仓位 入场 z-score 持有天数 盈亏
9 月 5 日 NVDA 做空 1.5% +2.8 7 天 +2.1%
9 月 5 日 INTC 做多 1.5% -2.6 7 天 +1.8%
9 月 12 日 META 做空 1.2% +2.3 5 天 +1.4%
9 月 19 日 AMD 做多 1.4% -2.4 10 天(触发时间止损) -0.3%
9 月 26 日 CSCO 做多 1.0% -2.1 6 天 +0.9%

当季结果:

  • 交易次数: 28 组配对(56 个仓位)
  • 胜率: 67.9%(19 次盈利,9 次亏损)
  • 平均盈利: +1.6%
  • 平均亏损: -0.8%
  • 净收益: +4.2%(当季), 年化约 17%
  • 夏普比率: 1.8(风险调整后表现优秀)
  • 最大回撤: -2.1%(波动很低)
  • 与市场的相关性: 0.08(接近市场中性)

方法二:因子中性统计套利

行业篮子的问题: 你仍然暴露在行业风险之下(整个科技板块可能一起崩盘)。解决方案: 中性化 所有 共同因子。

需要中性化的 5 个因子

因子 它衡量什么 如何中性化
市场(Beta) 对大盘整体涨跌的暴露 多空美元中性(或按 beta 调整)
行业 行业暴露(科技股崩盘会打击所有科技股) 多头与空头两边的行业权重相等
规模(市值) 大盘股与小盘股的表现差异 让两边的平均市值相匹配
价值 价值股与成长股的表现差异 在整个组合中平衡市盈率和市净率
动量 近期表现(赢家与输家) 多头与空头两边的 6 个月收益相等

为什么重要: 因子中性的组合,与市场、行业、市值、价值和动量之间 相关性为零 。你交易的是 纯粹的个股 alpha——量化交易的圣杯。

实现方式(简化版)

# 计算残差收益(剔除因子暴露之后)
from sklearn.linear_model import LinearRegression

# 对每只股票,把收益对因子做回归
model = LinearRegression()
model.fit(factors[['market', 'sector', 'size', 'value', 'momentum']], stock_returns)

# 残差 = 实际收益 - 因子可解释的收益
residuals = stock_returns - model.predict(factors)

# 用残差来交易(个股特有的 alpha)
z_score = (residuals - residuals.rolling(20).mean()) / residuals.rolling(20).std()

# 做多 z-score 低于 -2.0 的股票(因子调整后表现落后)
# 做空 z-score 高于 +2.0 的股票(因子调整后表现超前)

结果: 你交易的是纯粹的个股波动,而不是在押注因子。如果科技股崩盘,你在科技股上的多头和空头会同等受损——净效果为零。

方法三:主成分分析(PCA)统计套利

最复杂精细的做法: Renaissance Technologies 等顶级量化基金采用的方法。不是手工定义因子,而是用 PCA 去发现驱动股价变动的 隐藏因子 。

运作方式

1. PCA 识别出共同的模式:

  • PC1(第一主成分): 通常是"市场因子"(解释 60% 到 70% 的方差)
  • PC2: 通常是"行业轮动"(解释 10% 到 15% 的方差)
  • PC3 到 PC5: 市值、价值、动量、波动率因子(各解释 5% 到 10%)
  • 残差: 个股特有的波动(特异性 alpha)

2. 只交易残差: 剔除对 PC1 到 PC5 的暴露,只交易剩下的部分

3. 对残差做均值回归: 当股价偏离 PCA 预测值时,押注它会回归

它为何有效: 基于 PCA 的统计套利,与所有已知因子的相关性 接近于零 。你交易的是纯粹的统计噪声——并且在别人恐慌时提供流动性而获得报酬。

⚠️ 警告:PCA 统计套利很复杂

这个方法需要:

  • 扎实的 Python/机器学习能力(scikit-learn、numpy)
  • 干净的高频数据(分钟级或逐笔级)
  • 快速执行(低延迟的交易基础设施)
  • 10 万美元以上的资金(高换手 = 高交易成本)

不建议新手尝试。 先从行业篮子做起,再进阶到因子中性,如果你具备相应的技能和资金,最后再去研究 PCA。

历史表现(一篮子统计套利)

回测:2010 至 2023 年(13 年,跨越多种市场环境)

指标 行业篮子统计套利 因子中性统计套利 SPY(买入并持有)
年化复合增长率 10.2% 12.8% 12.1%
波动率 7.8% 6.2% 17.4%
夏普比率 1.31 2.06 0.70
最大回撤 -12.8% -8.4% -33.7%(新冠疫情)
与 SPY 的相关性 0.18 0.04 1.00
胜率 64.2% 68.7% 不适用
平均持仓时长 6.8 天 5.2 天 不适用
每年交易次数 280 420 0

关键要点:

  • 因子中性统计套利更胜一筹 ,就风险调整后的表现而言(夏普 2.06,SPY 为 0.70)
  • 与市场相关性接近于零: 0.04 = 真正的市场中性
  • 回撤更小: 最大回撤 -8.4%,而 SPY 为 -33.7%(挺过了新冠崩盘)
  • 换手更高: 每年 420 次交易 = 交易成本不可忽视(每年拖累 0.5% 到 1.0%)

不同市场环境下的表现

时期 市场状况 统计套利收益 SPY 收益
2010-2012 危机后的复苏 年化 +14.2% 年化 +13.8%
2013-2017 低波动的牛市 年化 +8.4% 年化 +15.2%
2018 波动率飙升,市场回调 +18.7% (表现最好的一年) -4.4%
2019 复苏反弹 +11.2% +31.5%
2020 新冠崩盘 + 复苏 +16.8% (波动率飙升 = 统计套利的天堂) +18.4%
2021 迷因股狂热 +9.8% +28.7%
2022 熊市(美联储加息) +14.2% (市场中性大放异彩) -18.1%
2023 AI 行情(领涨面很窄) +11.4% +26.3%

规律:

  • 统计套利在波动大、震荡的市场里表现最好: 2018 (+18.7%), 2020 (+16.8%), 2022 (+14.2%)
  • 在强势牛市中跑输: 2013 至 2017 年、2019 年、2021 年、2023 年(方向性动量主导市场)
  • 稳定性: 13 年里只有 1 年亏损(2015 年低波动磨人行情中亏 2.4%)
  • 分散化的好处: SPY 崩盘时,统计套利往往还在赚钱(危机中呈负相关)

统计套利何时会失效

1. 2007 年 8 月:量化地震

最著名的一次统计套利爆仓。经过是这样的:

  • 2007 年 8 月 6 日至 10 日那一周: 主要量化基金(Renaissance、AQR、D.E. Shaw)在 5 天内亏损 20% 到 30%
  • 原因: 被迫去杠杆——一家大基金清盘,触发连锁反应,其他基金纷纷触及风控上限
  • 传导机制: 所有人跑的都是同一套统计套利策略 → 都想平掉同样的仓位 → 流动性瞬间消失
  • 恢复情况: 随着错位回归均值,多数基金在 2 到 3 周内收复失地

教训: 当相关性升到 1.0(所有资产同涨同跌)时,市场中性策略会被碾压。这种情况发生在流动性危机中,被迫抛售压倒了基本面。

2. 2020 年 3 月:新冠崩盘

统计套利在两周内(3 月 9 日至 23 日)回撤 15% 到 25%。原因:

  • 相关性飙升: 所有股票一起暴跌(分散化失效)
  • 轧空: 被大量做空的股票(如航空、邮轮)不顾基本面暴力反弹
  • 流动性枯竭: 买卖价差扩大 5 到 10 倍,离场成本高昂

教训: 统计套利在正常时期是"市场中性"的,但 并不能抵御危机。把仓位控制得小一些(每只股票最多 2%),才能熬过相关性失效。

3. 低波动环境(2013 至 2017 年、2019 至 2021 年)

当 VIX 连续数月低于 15 时,统计套利会很吃力:

  • 波动区间太窄: 股价偏离得不够多,触发不了 z-score 的入场条件
  • 均值回归变慢: 要花 15 到 20 天而不是 5 到 7 天(时间损耗吃掉利润)
  • 回报更低: 年化 6% 到 8%(仍是正的,但谈不上亮眼)

教训: 统计套利是一种做波动率的策略。高波动 = 高利润,低波动 = 更低(但稳定)的回报。

交易成本:沉默的杀手

高换手 = 高成本: 统计套利一年通常要交易 300 到 500 次,成本累积得很快。

成本构成 每笔交易 年度影响(每年 400 笔)
佣金 0 美元(多数券商) $0
买卖价差(按卖价买入,按买价卖出) 0.05-0.10% -0.4% 到 -0.8%
滑点(市场冲击) 0.03-0.05% -0.2% 到 -0.4%
融券成本(空头返还) 空头部分年化 -0.5% 到 -2.0% -0.25% 到 -1.0% (组合的 50% 为空头)
合计 — -0.85% 到 -2.2%

对收益的影响:

  • 毛收益: 12.8%(因子中性统计套利的回测结果)
  • 交易成本: -1.2%(较为现实的估计)
  • 净收益: 11.6% (依然很出色,但 1.2% 的拖累不容忽视)

如何把成本降到最低:

  • 只交易流动性好的股票: 市值 50 亿美元以上,日成交量 500 万股以上(价差窄)
  • 使用限价单: 绝不使用市价单(每笔可省 0.05% 到 0.10%)
  • 避开难以融券的股票: 做空前先查融券利率(年化高于 5% 就直接放弃)
  • 降低换手: 把 z-score 阈值放宽(用 ±2.5 而不是 ±2.0),以降低交易频率

资金门槛

做统计套利的最低资金:

  • $25,000: 模式日内交易者的法定最低门槛(美国规定,每周交易超过 3 次即适用)
  • $50,000: 实现分散化的最低要求(20 到 30 个仓位,每个 1,500 至 2,500 美元)
  • $100,000+: 若想在扣除成本后仍有可观回报,建议达到这个水平

为什么统计套利比其他策略更吃资金:

  • 同时持有 20 到 30 个仓位: 1 万美元没法拆成 30 个仓位(每个 333 美元 = 规模太小)
  • 高换手: 交易成本对小账户的侵蚀格外严重
  • 保证金要求: 卖空需要 50% 的保证金(做空 1 美元股票需要 2 美元本金)

Python 实现:行业篮子统计套利

import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime, timedelta

# 1. 定义股票池(以科技行业为例)
tech_stocks = ['AAPL', 'MSFT', 'GOOGL', 'META', 'NVDA', 'AMD', 'INTC',
               'CRM', 'ORCL', 'ADBE', 'CSCO', 'AVGO', 'QCOM', 'TXN',
               'AMAT', 'MU', 'NFLX', 'PYPL', 'INTU', 'NOW']

# 2. 下载数据(一年的日线价格)
data = yf.download(tech_stocks, start='2023-01-01', end='2024-01-01')['Adj Close']

# 3. 计算收益率
returns = data.pct_change().dropna()

# 4. 计算行业篮子(等权平均)
basket_return = returns.mean(axis=1)

# 5. 计算每只股票相对篮子的 z-score
z_scores = pd.DataFrame(index=returns.index, columns=returns.columns)

lookback = 20  # 20 天滚动窗口

for stock in returns.columns:
    spread = returns[stock] - basket_return
    z_scores[stock] = (spread - spread.rolling(lookback).mean()) / spread.rolling(lookback).std()

# 6. 生成信号
long_threshold = -2.0   # z-score 低于 -2.0 时买入(表现落后)
short_threshold = 2.0   # z-score 高于 2.0 时做空(表现超前)
exit_threshold = 0.0    # z-score 穿越零时离场

signals = pd.DataFrame(0, index=z_scores.index, columns=z_scores.columns)
signals[z_scores < long_threshold] = 1   # 做多信号
signals[z_scores > short_threshold] = -1  # 做空信号

# 7. 回测表现
positions = signals.shift(1)  # 避免前视偏差
strategy_returns = (positions * returns).mean(axis=1)  # 等权重仓位

# 8. 计算各项指标
cumulative_returns = (1 + strategy_returns).cumprod()
total_return = cumulative_returns.iloc[-1] - 1
sharpe_ratio = strategy_returns.mean() / strategy_returns.std() * np.sqrt(252)
max_drawdown = (cumulative_returns / cumulative_returns.cummax() - 1).min()

print(f"Total Return: {total_return:.2%}")
print(f"Sharpe Ratio: {sharpe_ratio:.2f}")
print(f"Max Drawdown: {max_drawdown:.2%}")
print(f"Win Rate: {(strategy_returns > 0).sum() / len(strategy_returns):.1%}")

# 9. 当前机会(z-score 处于极端值的股票)
current_z = z_scores.iloc[-1].sort_values()
print("\nCurrent Opportunities:")
print("Long candidates (oversold):")
print(current_z[current_z < long_threshold])
print("\nShort candidates (overbought):")
print(current_z[current_z > short_threshold])

注意: 这是一个简化版实现。生产级的统计套利还需要:

  • 日内数据(分钟级或逐笔级),以便更快进出场
  • 交易成本建模(价差、滑点、融券成本)
  • 动态仓位管理(按 z-score 绝对值大小加权)
  • 止损与时间止损(避免资金被不回归的仓位套死)
  • 因子中性化(超越简单的行业篮子)

要点回顾

  • 统计套利就是规模化的均值回归: 交易 20 到 100 只股票组成的篮子,而不是单个配对
  • 因子中性是关键: 消除市场、行业、市值、价值、动量的暴露,只交易纯 alpha
  • 高夏普,低相关: 因子中性统计套利:夏普 2.0 以上,与 SPY 相关性 0.04
  • 在波动中大放异彩: 表现最好的年份:2018 年(+18.7%)、2020 年(+16.8%)、2022 年(+14.2%),都是市场震荡的时候
  • 在牛市中跑输: 2013 至 2017 年、2019 年、2021 年、2023 年都很吃力(方向性动量主导市场)
  • 交易成本很关键: 价差、滑点、融券成本每年拖累 1% 到 2%(只交易流动性好的股票)
  • 无法抵御危机: 2007 年 8 月的量化地震(几天内 -20% 到 -30%)、2020 年 3 月的新冠疫情(-15% 到 -25%),都是相关性飙到 1.0 的时候
  • 资金密集: 要做到像样的分散,至少需要 5 万到 10 万美元(20 到 30 个仓位)
  • 技能密集: 需要 Python、统计学和回测方面的专业能力——不适合新手
  • 机构的优势: 对冲基金拥有更好的数据、更快的执行、更低的成本——散户处于劣势

下一步

如果你真的想认真做统计套利:

  1. 先把配对交易吃透: 从这里开始 ,再扩展到一篮子
  2. 学会 Python/pandas: 统计套利没法手工交易——必须自动化
  3. 研究因子模型: Fama-French、Carhart 四因子、动量因子
  4. 严格回测: 前推分析、交易成本、滑点——参见 回测方法指南
  5. 从小做起: 先模拟交易 3 到 6 个月,再投入真金白银
  6. 对回报要有合理预期: 学术回测显示年化 15% 到 20%,但扣除成本后现实中只有 8% 到 12%
  7. 分散策略: 别只依赖统计套利——要与动量、趋势跟随等策略结合

⚠️ 最后的警告

统计套利不是免费的午餐。 它需要:

  • 可观的资金(至少 5 万到 10 万美元)
  • 高阶的 Python 与统计学能力
  • 快速执行的基础设施
  • 持续的监控与再平衡
  • 接受每十年里会有 1 到 2 年它不管用

如果你不具备这些条件, 就坚持更简单的策略 ,比如动量或趋势跟随。统计套利是留给有充足资金和技术能力的资深量化交易者的。

相关文章