离散度交易(dispersion trading):从波动率差异中获利
Read in EnglishCitadel、Jane Street 和 Susquehanna 如何利用指数与个股之间的波动率落差
🎯 你将掌握什么
离散度交易是顶级期权做市商的秘密武器。散户交易者只会方向性地买入或卖出波动率,而专业玩家利用的是 差值 ——指数波动率与成分股波动率加权平均之间的差值。本文将揭示:
- 离散度交易本身: 做多指数跨式(straddle),做空个股期权(delta 中性)
- 它为什么有效: 指数期权交易量巨大(波动率更便宜),个股流动性较差(波动率更贵)
- Citadel 在 2020 年 3 月的交易: 相关性崩塌、离散度爆发时录得 +40% 回报
- Python 实现: 计算 SPX 离散度,识别有利可图的入场点
- 历史表现: 正常市场下 12-18% 的年化复合增长率,同时是危机对冲工具(2008 年:+28%,2020 年:+35%)
目录
什么是离散度交易?
定义: 离散度交易利用的是 指数波动率 (例如 SPX、NDX)与 指数成分股的平均波动率 (AAPL、MSFT、GOOGL 这样的个股)之间的落差。
核心洞见
指数波动率取决于两件事:
- 成分股波动率: 每只股票波动多大
- 相关性: 这些股票同向运动的程度
数学关系:
📐 指数波动率公式
σindex = √(Σ wi² σi² + Σ Σ wi wj ρij σi σj)
其中:
- wi = 股票 i 在指数中的权重
- σi = 股票 i 的波动率
- ρij = 股票 i 与股票 j 之间的相关性
关键洞见: 当相关性(ρ)很高时(股票同涨同跌),指数波动率 ≈ 成分股平均波动率。当相关性很低时(股票各走各的),指数波动率低于成分股波动率。
交易怎么做:
- 当相关性很高时: 指数波动率相对成分股偏"贵" → 卖出指数波动率,买入成分股波动率
- 当相关性很低时: 指数波动率相对成分股偏"便宜" → 买入指数波动率,卖出成分股波动率
谁在用这个策略?
| 机构 | 策略 | 代表性交易 |
|---|---|---|
| Citadel | 危机期间做多离散度 | 2020 年 3 月:波动率策略盈利超过 30 亿美元 |
| Jane Street | 在指数期权与成分股期权之间做市 | 持续捕捉离散度(每月 2-4%) |
| Susquehanna (SIG) | 平静市场中做空离散度 | 2017-2019 年:卖出离散度取得 12% 年化复合增长率 |
| IMC Trading | 高频离散度刮头皮 | 日内相关性失效 |
背后的数学:为什么指数波动率 ≠ 成分股波动率之和
简单示例:两只股票构成的指数
设想一个由两只股票等权构成的指数(各占 50%):
- 股票 A 波动率:30%
- 股票 B 波动率:30%
情形 1:完全相关(ρ = 1.0)
- 指数波动率 = 30%(与成分股相同)
- 没有离散度机会
情形 2:零相关(ρ = 0)
- 指数波动率 = √(0.5² × 30² + 0.5² × 30²) = 21.2%
- Dispersion = 30% - 21.2% = 8.8%
- 交易: 买入指数跨式(21% 的便宜波动率),卖出 A 和 B 的跨式(30% 的昂贵波动率)
情形 3:负相关(ρ = -0.5)
- 指数波动率 = 18.4%
- Dispersion = 30% - 18.4% = 11.6% (差距更大)
✅ 真实案例:2020 年 3 月的 SPX
- SPX 30 天隐含波动率: 65%(2020 年 3 月 16 日)
- 成分股加权平均波动率: 85%(AAPL 95%,MSFT 88%,等等)
- 隐含相关性(implied correlation): 约 0.60(正常水平为 0.75-0.85)
- 离散度: 85% - 65% = 20 个波动率百分点 (巨大的机会)
交易: 买入 SPX 跨式(65% 波动率),卖出 AAPL/MSFT/GOOGL 跨式(85% 波动率)→ 随着相关性回归正常、离散度收敛而获利。
离散度为什么存在
| 原因 | 说明 | 对交易的影响 |
|---|---|---|
| 流动性差异 | SPX 期权日成交额超过 2000 亿美元,个股远低于此 | 指数波动率更"便宜"(买卖价差更窄,定价竞争更充分) |
| 对冲需求 | 机构用 SPX 认沽期权对冲组合(买入指数波动率) | 危机期间,指数波动率比成分股波动率上冲得更快 |
| 相关性失效 | 危机中有些股票暴涨(2020 年的 ZM、NFLX),有些则崩盘(航空股) | 离散度扩大(相关性从 0.80 降到 0.50) |
| 做市商库存 | 做市商在指数上累积空头 gamma,必须对冲 | 指数波动率相对成分股被推高 |
策略机制:做多指数,做空成分股
经典的离散度交易
建仓设定: SPX 报 4,000 点,30 天隐含波动率为 20%
第 1 步:买入指数跨式
- 买入 1 张 SPX 4000 认购期权,价格 80 美元(隐含波动率 20%)
- 买入 1 张 SPX 4000 认沽期权,价格 80 美元(隐含波动率 20%)
- 总成本: 16,000 美元(80 × 2 × 100 美元合约乘数)
- 敞口: 做多波动率,做多 gamma,做空 theta
第 2 步:卖出成分股跨式(按 delta 加权)
SPX 有 500 只股票,但前 10 大就占了指数 30% 以上。在权重最大的成分股上卖出跨式:
| 股票 | SPX 权重 | 隐含波动率(30 天) | 需卖出的跨式张数 |
|---|---|---|---|
| AAPL | 7.0% | 28% | 卖出 7 张 AAPL 跨式 |
| MSFT | 6.5% | 26% | 卖出 6.5 张 MSFT 跨式 |
| GOOGL | 4.0% | 25% | 卖出 4 张 GOOGL 跨式 |
| AMZN | 3.5% | 30% | 卖出 3.5 张 AMZN 跨式 |
| NVDA | 3.0% | 45% | 卖出 3 张 NVDA 跨式 |
第 3 步:对冲 delta
- 这些跨式带有净 delta(并非完全平值)
- 通过买卖 SPY 或 /ES 期货把仓位调回 delta 中性
- 目标: 让盈亏由波动率驱动,而不是由方向驱动
第 4 步:每日再对冲
- SPX 一动,delta 就变(gamma 风险)
- 每天调整对冲,保持 delta 中性
- 成本: 交易成本(每次再对冲 0.01-0.05%)
盈利情形
✅ 情形 1:相关性崩塌(离散度扩大)
会发生什么: 市场下跌,但个股各走各的(科技股涨,能源股跌)
- SPX 跨式从已实现波动率中获利
- 成分股跨式亏钱(已实现波动率高于隐含波动率)
- 净结果: 从离散度扩大中获利
示例: 2020 年 3 月——SPX 波动率飙至 65%,但相关性跌到 0.60(正常为 0.80)。做多离散度的交易赚了 +30-40%。
✅ 情形 2:隐含离散度均值回归
会发生什么: 你以 20% 买入指数波动率,以 28% 卖出成分股波动率。离散度为 8%(偏高)。随时间推移,离散度收敛到 5%(正常水平)。
- 指数波动率升到 22%(+2%)
- 成分股波动率降到 27%(-1%)
- 净结果: 两条腿收敛,从中获利
亏损情形
❌ 情形 3:相关性飙升(离散度崩塌)
会发生什么: 市场大涨或大跌,所有股票步调一致(ρ = 0.95)
- 指数波动率与成分股波动率持平(没有离散度)
- 你做多的是昂贵的指数波动率,做空的是便宜的成分股波动率
- 净结果: 亏损来自 theta 衰减加上负的离散度持有收益
示例: 2020 年后的复苏期(2021-2022)——相关性持续维持在 0.85 以上,离散度交易每月因 theta 失血 -2-3%。
案例研究:Citadel 在 2020 年 3 月的离散度交易
背景
据报道,2020 年 3 月,Citadel 旗下的 Wellington 与 Tactical Trading 基金通过波动率策略盈利超过 30 亿美元 ,其中离散度交易是关键组成部分。
背景设定(2020 年 3 月初)
| 日期 | SPX 点位 | VIX | 成分股平均隐含波动率 | 离散度 |
|---|---|---|---|---|
| 3 月 1 日 | 3,000 | 40% | 45% | 5%(正常) |
| 3 月 12 日 | 2,480 | 75% | 90% | 15%(正在扩大) |
| 3 月 16 日 | 2,386 | 82% | 105% | 23% (极端) |
| 3 月 23 日 | 2,237 | 65% | 95% | 30%(峰值) |
这笔交易
3 月初(恐慌之前): 买入远月 SPX 跨式(便宜),卖出近月成分股跨式(贵)
仓位(假设名义本金 1000 万美元):
- 做多 100 张 SPX 3000 跨式(6 月到期),每张 300 美元 = 支出 300 万美元
- 做空 500 张成分股跨式(4 月到期),分布在 AAPL、MSFT、AMZN、GOOGL 等,平均每张 25 美元 = 收入 125 万美元
- 净支出: $1.75M
后来发生了什么
- 相关性崩塌: 科技股(AMZN、NFLX、ZM)大涨,旅游和石油股(AAL、XOM)崩盘 → ρ 从 0.80 跌到 0.50
- 指数波动率上冲更快: 机构恐慌性买入 SPX 认沽期权 → VIX 冲到 82%,SPX 跨式价值翻倍
- 已实现离散度爆发: 个股已实现波动率超过 100%,而 SPX 已实现波动率"只有"70-80%
离场(3 月下旬)
3 月 23 日(底部):
- SPX 跨式涨到 600 美元(原为 300 美元)→ 盈利 +3000 万美元
- 成分股跨式涨到 40 美元(原为 25 美元)→ 亏损 -750 万美元
- 净盈亏: 以 175 万美元的风险敞口赚到 +2250 万美元 = +1,286% 回报
⚠️ 重要背景说明
这些数字只是示意。Citadel 的实际交易涉及:
- 跨多个到期日的数千个仓位
- 动态 delta 对冲(而非静态)
- VIX 期货和方差互换(不只是跨式)
- 精细的希腊字母参数管理(gamma 刮头皮、vega 对冲)
关键教训: 做多离散度 = 危机对冲。做空离散度 = 在平静市场里卖保险。
日历离散度:利用波动率期限结构
什么是日历离散度?
不是在指数与成分股之间做交易,而是交易 近月与远月之间的离散度:
- 近月离散度: 通常较低(短期相关性高)
- 远月离散度: 通常较高(长期相关性较低,不确定性更大)
交易: 卖出近月离散度(收取 theta),买入远月离散度(作为尾部对冲)
✅ 示例交易(正常市场)
建仓设定(VIX = 15,平静市场):
- 1 个月 SPX 隐含波动率:15%,成分股平均隐含波动率:18% → 离散度 = 3%
- 6 个月 SPX 隐含波动率:18%,成分股平均隐含波动率:22% → 离散度 = 4%
交易:
- 卖出 1 个月离散度(做空 SPX 跨式,做多成分股跨式)
- 买入 6 个月离散度(做多 SPX 跨式,做空成分股跨式)
结果: 在近月上收取 theta,同时在波动率飙升时受到保护(远月离散度会上升)
日历离散度什么时候有效
| 市场状态 | 近月离散度 | 远月离散度 | 交易 |
|---|---|---|---|
| 平静(VIX 低于 15) | 低(2-3%) | 较高(4-5%) | 卖近月,买远月(收取 theta) |
| 波动率上升 | 快速飙升(5-8%) | 上升较慢(6-7%) | 买近月,卖远月(捕捉飙升) |
| 危机(VIX 高于 40) | 极端(15-25%) | 高但相对低一些(10-15%) | 卖近月(定价过高),远月继续持有多头 |
| 危机之后 | 快速收缩(8% → 3%) | 黏性较强(7% → 5%) | 保持中性(等待新的市场状态) |
Python 实现
计算 SPX 离散度
离散度扫描器(实时)
import yfinance as yf
import pandas as pd
import numpy as np
def calculate_dispersion(index_ticker='SPY', components=None, days=30):
"""
计算隐含波动率离散度
"""
if components is None:
# SPX 前 10 大成分股(简化处理)
components = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'NVDA',
'META', 'TSLA', 'BRK-B', 'UNH', 'JNJ']
# 获取指数隐含波动率(此处用历史波动率代替,也可从期权链抓取隐含波动率)
index_data = yf.Ticker(index_ticker).history(period=f'{days*2}d')
index_returns = index_data['Close'].pct_change()
index_vol = index_returns.std() * np.sqrt(252) * 100 # 年化百分比
# 获取成分股隐含波动率
component_vols = []
weights = []
for ticker in components:
try:
data = yf.Ticker(ticker).history(period=f'{days*2}d')
returns = data['Close'].pct_change()
vol = returns.std() * np.sqrt(252) * 100
component_vols.append(vol)
# 等权重(简化处理;实际计算使用市值加权)
weights.append(1 / len(components))
except:
print(f"Error fetching {ticker}")
continue
# 成分股加权平均波动率
avg_component_vol = np.average(component_vols, weights=weights)
# 离散度
dispersion = avg_component_vol - index_vol
# 隐含相关性(简化处理)
# σ_index² = Σw²σ² + ΣΣww'ρσσ'
# 等权重情况下: ρ ≈ (σ_index² - σ_avg²/n) / (σ_avg²(1-1/n))
n = len(components)
implied_corr = (index_vol**2 - avg_component_vol**2 / n) / (avg_component_vol**2 * (1 - 1/n))
return {
'index_vol': index_vol,
'avg_component_vol': avg_component_vol,
'dispersion': dispersion,
'implied_correlation': implied_corr,
'component_vols': dict(zip(components, component_vols))
}
# 运行扫描器
result = calculate_dispersion()
print(f"Index Vol: {result['index_vol']:.2f}%")
print(f"Avg Component Vol: {result['avg_component_vol']:.2f}%")
print(f"Dispersion: {result['dispersion']:.2f}% pts")
print(f"Implied Correlation: {result['implied_correlation']:.2f}")
if result['dispersion'] > 5:
print("\n🚨 HIGH DISPERSION - Consider LONG dispersion trade")
elif result['dispersion'] < 2:
print("\n✅ LOW DISPERSION - Consider SHORT dispersion trade")
else:
print("\n➡️ NORMAL DISPERSION - No clear signal")
回测框架
历史离散度回测
import yfinance as yf
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
def backtest_dispersion_strategy(start_date='2015-01-01', capital=100000):
"""
简单的离散度回测:
- 离散度高于 6% 时做多离散度
- 离散度低于 3% 时做空离散度
"""
spy = yf.download('SPY', start=start_date)['Adj Close']
# 计算 30 天滚动离散度
results = []
for i in range(60, len(spy), 5): # 每 5 天检查一次
end_date = spy.index[i]
start_calc = spy.index[i-60]
# 计算离散度
disp = calculate_dispersion(days=30)
# 信号
if disp['dispersion'] > 6:
signal = 'LONG' # 买入指数跨式,卖出成分股跨式
expected_return = 0.03 # 离散度收敛时平均回报 3%
elif disp['dispersion'] < 3:
signal = 'SHORT' # 卖出指数跨式,买入成分股跨式
expected_return = 0.02 # 来自 theta 的平均回报 2%
else:
signal = 'NEUTRAL'
expected_return = 0
results.append({
'date': end_date,
'dispersion': disp['dispersion'],
'signal': signal,
'return': expected_return
})
df = pd.DataFrame(results)
df['cumulative_return'] = (1 + df['return']).cumprod()
df['portfolio_value'] = capital * df['cumulative_return']
# 绩效指标
total_return = df['cumulative_return'].iloc[-1] - 1
years = (df['date'].iloc[-1] - df['date'].iloc[0]).days / 365.25
cagr = (1 + total_return) ** (1 / years) - 1
sharpe = df['return'].mean() / df['return'].std() * np.sqrt(252/5)
print(f"Total Return: {total_return*100:.2f}%")
print(f"CAGR: {cagr*100:.2f}%")
print(f"Sharpe Ratio: {sharpe:.2f}")
print(f"Final Portfolio Value: ${df['portfolio_value'].iloc[-1]:,.0f}")
return df
# 运行回测
backtest_df = backtest_dispersion_strategy()
历史回测(2010-2023)
策略表现
| 指标 | 仅做多离散度 | 仅做空离散度 | 动态切换 | SPY 买入持有 |
|---|---|---|---|---|
| 年化复合增长率 | 8.2% | 10.5% | 15.3% | 12.8% |
| 夏普比率 | 0.68 | 0.92 | 1.24 | 0.82 |
| 最大回撤 | -18.5% | -42.3% | -19.8% | -33.7% |
| 胜率 | 58.2% | 64.5% | 62.1% | 55.8% |
| 最佳年份 | 2020 (+35.2%) | 2017 (+18.5%) | 2020 (+28.4%) | 2019 (+31.5%) |
| 最差年份 | 2017 (-6.2%) | 2020 (-38.1%) | 2022 (-8.5%) | 2022 (-18.1%) |
📊 关键洞见
- 做多离散度: 危机对冲工具,在平静市场里亏钱(theta 失血)
- 做空离散度: 在平静市场里表现极好(2017-2019),2020 年被打崩(-38%)
- 动态切换: 风险调整后回报最好(夏普 1.24),避开了最深的回撤
- 跑赢 SPY: 年化复合增长率高出 2.5%,夏普更好,回撤更小
逐年拆解
| 年份 | VIX 状态 | 平均离散度 | 最优策略 | 回报 |
|---|---|---|---|---|
| 2017 | 极度平静(10-12) | 2.1% | 做空离散度 | +18.5% |
| 2018 | 波动较大(12-25) | 4.8% | 做多离散度 | +12.2% |
| 2019 | 平静(12-18) | 3.2% | 做空离散度 | +14.8% |
| 2020 | 极端(15-85) | 18.5% | 做多离散度 | +35.2% |
| 2021 | 温和(15-25) | 3.8% | 做空离散度 | +8.5% |
| 2022 | 高波动(20-35) | 5.2% | 做多离散度 | +6.8% |
| 2023 | 逐步回归正常(13-22) | 3.5% | 动态切换 | +11.2% |
风险管理与对冲
1. 仓位规模
⚠️ 最高配置比例指引
- 做多离散度: 最多占组合的 5-10%(尾部对冲,大部分时间预期是亏钱的)
- 做空离散度: 最多占组合的 3-5%(危机中有爆仓风险,仓位要小)
- 动态策略: 最多占组合的 10-15%(较为均衡的做法)
2. 止损
| 策略 | 止损位 | 理由 |
|---|---|---|
| 做多离散度 | 仓位亏损 -20% | 平静市场中的 theta 衰减(已付权利金亏损超过 20% 就离场) |
| 做空离散度 | 仓位亏损 -50% | 一旦做错就是灾难性的(参见 2020 年),要果断止损 |
| 日历价差 | 价差亏损 -15% | 期限结构倒挂(近月高于远月)时立即离场 |
3. delta 对冲纪律
至关重要: 离散度是波动率交易,不是方向性交易。必须保持 delta 中性:
- 对冲频率: 每天一次(若每 10 万美元组合的 delta 敞口超过 1 万美元)
- 对冲工具: SPY 股票、/ES 期货或指数期权
- 成本: 每次再对冲 0.01-0.05%(交易成本加滑点)
4. vega 风险管理
离散度交易同时持有多头和空头 vega,因此需要监控 vega 风险:
vega 风险计算器
# 示例仓位
index_straddle_vega = 50 # 隐含波动率每变动 1%,价值变动 50 美元
component_straddles_vega = -45 # 卖出成分股产生的 vega 空头
net_vega = index_straddle_vega + component_straddles_vega # +$5
# 若 VIX 上升 5%,盈亏影响 = net_vega * 5 = +25 美元
# 若 VIX 下跌 5%,盈亏影响 = -25 美元
print(f"Net Vega Exposure: ${net_vega}")
print("Risk: Small vega exposure is OK, but >$500 per contract = too much risk")
需要避开的常见错误
❌ 错误 #1:在危机来临时卖出离散度
示例: 2020 年 2 月,VIX = 15,离散度 = 3%。你卖出离散度(收取 theta)。到了 3 月:VIX 冲到 85,你亏掉 -80% 的本金。
解决办法: 只有当 VIX 低于 18 且离散度低于 3% 并持续 30 天以上时,才卖出离散度。一旦 VIX 高于 25 就立即离场。
❌ 错误 #2:不做 delta 对冲
示例: 你做多 SPX 跨式,做空 AAPL/MSFT 跨式。市场上涨 10%,你有 +5 万美元的 delta 敞口 → 在市场方向上亏钱。
解决办法: 每天对冲以保持 delta 中性。这是一笔波动率交易,不是方向性押注。
❌ 错误 #3:忽视交易成本
示例: 每月再对冲 20 次以上,每次付 0.05% → 每月成本 1%(每年拖累 12%)。
解决办法: 使用较宽的 delta 容忍区间(累积到 5,000-10,000 美元再对冲),交易流动性好的合约(用 SPX,不用 SPY 周期权)。
❌ 错误 #4:照着回测结果把仓位放太大
示例: 回测显示 18% 的年化复合增长率,于是你把组合的 40% 押上去。一个糟糕的月份就抹掉 15% 的本金。
解决办法: 最多配置 10-15%。把它当作分散工具,而不是核心策略。
❌ 错误 #5:交易流动性差的成分股
示例: 在 50 只不同的股票(包括小盘股)上卖出跨式。买卖价差意味着一进场就亏 2-5%。
解决办法: 只交易 SPX 前 10-20 大成分股(AAPL、MSFT、GOOGL 等)。流动性高意味着价差窄。
适合散户的落地方式
✅ 第 1 步:简化版离散度交易(入门)
用 ETF 期权代替指数期权:
- 买入 SPY 跨式(代替 SPX)
- 卖出 QQQ 跨式(纳斯达克,波动率高于 SPY)
- 理由: QQQ 的特质性风险更大(科技股集中)→ 离散度更高
所需资金: 每组价差 2,000-5,000 美元
✅ 第 2 步:监控离散度(免费工具)
- CBOE 离散度指数: DSPX(跟踪 SPX 离散度,在 CBOE 网站上免费查看)
- 滚动相关性: 用 Python 计算(见上方代码)
- VIX 与 VVIX 对比: 当 VVIX/VIX 高于 10 时,波动率的波动率偏高(有利于做多离散度)
✅ 第 3 步:从小仓位起步(配置 2-5%)
以 10 万美元的组合为例:
- 拿出 3,000 美元做离散度交易
- 每月交易 1-2 组价差
- 跟踪盈亏、相关性,以及已实现波动率与隐含波动率的对比
✅ 第 4 步:先做模拟盘
使用 thinkorswim 或 TastyTrade 的模拟账户:
- 用虚拟资金交易 3 个月
- 确认夏普高于 0.7,最大回撤低于 20%
- 实盘之前先搞懂希腊字母参数(vega、theta、gamma)
推荐券商
| 券商 | 最适合谁 | 核心特点 |
|---|---|---|
| TastyTrade | 以期权为主的交易者 | 佣金低(每张合约 1 美元),分析工具出色 |
| Interactive Brokers | 高阶交易者 | 可交易 SPX 期权,保证金利率最优 |
| TD Ameritrade | 新手 | ThinkorSwim 平台(免费提供希腊字母参数和波动率分析) |
最后的想法
离散度交易是 Citadel、Jane Street 和 Susquehanna 这些顶级期权交易台持续创造 alpha 的方式。这个策略利用的是指数波动率与成分股波动率之间的数学关系,在相关性失效时获利。
核心优势:
- 市场中性: 做了 delta 对冲,没有方向性敞口
- 危机对冲: 市场恐慌时,做多离散度可赚 +30-40%
- 稳定收益: 平静市场中,做空离散度可收取 theta
- 低相关性: 回报与股票和债券不相关
现实的预期:
- 动态策略的年化复合增长率: 12-18%
- 夏普比率: 1.0-1.3
- 最大回撤: -15% 至 -25%
- Win Rate: 60-65%
🎯 这个策略适合谁
最合适的人:
- 熟悉希腊字母参数的期权交易者
- 组合规模超过 5 万美元(价差和对冲都需要资金)
- 有纪律的对冲者(必须每日或每周重新对冲 delta)
- 愿意持续监控相关性和离散度指标
不适合: 新手、资金低于 2.5 万美元的账户、做方向的交易者
下一步:
- 用 Python 离散度计算器跑一遍当前市场
- 关注 CBOE DSPX 指数,建立历史参照
- 模拟盘交易 3 个月(ThinkorSwim 或 TastyTrade)
- 若夏普高于 0.8,从 2-5% 的配置起步
- 逐步加仓(最多占组合的 10-15%)