离散度交易(Dispersion Trading)是期权市场里少数有持续结构性优势的策略之一。核心操作很简单:卖指数期权,买成分股期权。赚的不是方向,不是波动率本身,而是指数隐含相关性和成分股实际相关性之间的价差。

这个策略长期有效的原因不是市场犯了错,而是机构资金对指数下行保护有持续的刚性需求,压高了指数期权的隐含波动率,从而推高了隐含相关性。离散度交易者承担相关性突然飙升的尾部风险,换取日常稳定的溢价收入。

离散度交易的核心逻辑

配对交易做的是两只股票之间的价差回归,离散度交易做的是一篮子股票的"散开程度"和指数定价之间的缺口。从交易动机上看,配对交易赌的是"两只股票会回到正常关系",离散度交易赌的是"成分股不会一起动"。

具体操作:卖出标普 500 指数(SPX)的跨式期权(straddle),同时买入 15~30 只权重最大的成分股的跨式期权。指数端收权利金,个股端花权利金。如果成分股各走各的路(低相关性),个股期权的收益覆盖住指数端的亏损,甚至还能赚;如果所有股票同涨同跌(高相关性),指数波动放大,指数端亏损吃掉个股端利润。

说白了,离散度交易就是在做空相关性。

为什么叫"离散度"?因为当成分股走势分散(dispersion 高)时,指数本身的波动反而被对冲掉了:A 涨 3%、B 跌 2%、C 不动,指数可能只动了 0.5%。这时候你卖的指数期权亏不了多少,买的个股期权里至少有几只赚钱。反过来,成分股走势高度一致时,dispersion 低、相关性高,指数波动放大,你卖的指数端就会出问题。

从方差分解理解离散度交易

离散度交易不是拍脑袋赌方向,背后有扎实的数学基础。一个指数的方差可以拆解成两部分:成分股自身的方差,加上成分股之间的协方差。

假设指数由 \(n\) 只成分股组成,第 \(i\) 只的权重是 \(w_i\),波动率是 \(\sigma_i\),股票 \(i\) 和 \(j\) 之间的相关系数是 \(\rho_{ij}\),则指数方差为:

$$\sigma_{\text{index}}^2 = \sum_{i=1}^{n} w_i^2 \sigma_i^2 + \sum_{i \neq j} w_i w_j \rho_{ij} \sigma_i \sigma_j$$

第一项是"成分股各自贡献的方差",第二项是"成分股之间联动贡献的方差"。如果所有股票完全不相关(\(\rho_{ij} = 0\)),第二项消失,指数方差远小于各成分股方差的加权和。

这就解释了一个期权市场里的已知事实:指数期权的隐含波动率,总是低于成分股隐含波动率的加权平均。因为分散化效应(diversification)压低了指数的整体波动。

隐含相关性的计算

如果我们假设所有成分股两两之间的相关性相同(简化为一个统一的 \(\bar{\rho}\)),上面的公式可以简化为:

$$\sigma_{\text{index}}^2 = \bar{\rho} \left(\sum_i w_i \sigma_i\right)^2 + (1 - \bar{\rho}) \sum_i w_i^2 \sigma_i^2$$

反解 \(\bar{\rho}\):

$$\bar{\rho}_{\text{implied}} = \frac{\sigma_{\text{index}}^2 - \sum_i w_i^2 \sigma_i^2}{\left(\sum_i w_i \sigma_i\right)^2 - \sum_i w_i^2 \sigma_i^2}$$

这里 \(\sigma_{\text{index}}\) 用指数期权的隐含波动率,\(\sigma_i\) 用各成分股期权的隐含波动率。把期权市场的价格代入公式,就能算出市场"隐含"的相关性水平。

关键观察:在标普 500 上,隐含相关性长期高于实现相关性,大约高 10~20 个百分点。正常市场环境下隐含相关性在 40%~60% 区间,而实现相关性通常在 25%~40%。这个持续的缺口就是离散度交易者的利润来源。

SPX 隐含相关性 vs 实现相关性

为什么隐含相关性总是偏高

这不是市场定错了价。机构投资者需要保护自己的投资组合,最省成本的做法是买指数看跌期权(SPX Put),而不是给每只持仓股票单独买保险。这种集中的需求把指数期权的隐含波动率往上推,数学上等价于推高了隐含相关性。

换句话说,隐含相关性的溢价是一种风险溢价。离散度交易者赚的钱,本质上是替机构投资者承担了"所有股票同时暴跌"这个尾部场景的风险。跟波动率交易中做空波动率赚的波动率风险溢价(VRP)类似,离散度交易赚的是相关性风险溢价(Correlation Risk Premium)。

策略构建:怎么搭一个离散度交易组合

指数端:卖什么

最常见的选择是卖 SPX ATM 跨式期权(straddle),到期日选 30 天。也可以用宽跨(strangle)降低 Gamma 暴露,或者直接用方差互换(variance swap)。方差互换最干净,因为它直接锁定方差敞口,不需要选行权价,但流动性限于机构市场。

散户实操的话,卖 SPX 月度 straddle 是最直接的选择。

个股端:买什么

不需要买指数里所有 500 只成分股的期权。选权重最大的 15~30 只,覆盖指数 40%~60% 的权重就够了。选股标准:权重大、期权流动性好。排在前面的通常是 AAPL、MSFT、AMZN、NVDA、GOOGL、META 这些。

每只成分股买 ATM straddle,到期日跟指数端一致。

Vega 加权

这一步是离散度交易和随便"卖指数买个股"的区别所在。组合必须在建仓时做到 Vega 中性:你不是在赌波动率方向,你只赌相关性。

Vega 衡量的是期权价格对隐含波动率变动 1 个百分点的敏感度。Vega 中性意味着:如果所有期权的隐含波动率同时上升或下降同样的幅度,组合的盈亏为零。

具体做法:先算出指数端卖出头寸的总 Vega 暴露(比如 -$50,000/vol point),然后把这个 Vega 按权重分配到各成分股上。成分股 \(i\) 需要买入的 straddle 数量:

$$N_i = \frac{w_i \times |\text{Vega}_{\text{index}}|}{\text{Vega}_i^{\text{per straddle}}}$$

其中 \(w_i\) 是成分股在指数中的权重,\(\text{Vega}_i^{\text{per straddle}}\) 是该股票一手 straddle 的 Vega。

Delta 对冲

建仓后,指数端用 SPX 期货对冲 Delta,个股端用各自的股票对冲。对冲频率取决于你对 Gamma 风险的容忍度。机构通常每天对冲一次,有些 desk 甚至做到盘中连续对冲。散户如果用月度期权,隔几天调一次 Delta 也够了。

一个具体数字示例

假设 SPX 30 天 ATM straddle 的隐含波动率是 18%,权重最大的 20 只成分股的加权平均隐含波动率是 25%。代入隐含相关性公式,得到隐含相关性约 0.52。

同一时间段,这 20 只股票的 30 天实现相关性是 0.35。

缺口 = 0.52 - 0.35 = 0.17。这就是你的潜在利润空间。只要实现相关性在持仓期间不飙升到 0.52 以上,这笔交易就能赚钱。

离散度交易 vs 相关性交易

离散度交易经常跟"相关性交易"(Correlation Trading)混用,但两者在执行层面有明确区别。

维度离散度交易相关性交易
交易工具指数期权 + 个股期权相关性互换(Correlation Swap)
暴露相关性 + 部分波动率暴露纯相关性暴露
执行复杂度高,需要管理多腿头寸低,一笔交易
流动性好(标准化期权市场)差(场外衍生品)
适合对象机构 desk、高级散户纯机构
非线性有,straddle 带 Gamma线性 payoff

离散度交易并不能完美隔离相关性暴露。因为你用期权来复制方差头寸,期权本身带有 Gamma、Theta 等额外维度的风险。方差互换能更干净地隔离,但散户基本接触不到。所以实操中,离散度交易赚的钱里,一部分来自相关性溢价,一部分来自波动率溢价。

风险管理:离散度交易的几种死法

相关性飙升

2008 年金融危机和 2020 年 3 月新冠崩盘,SPX 成分股的实现相关性冲到 0.8 以上。所有股票一起跌,个股期权的收益远不够覆盖指数端的巨亏。Quantpedia 的回测数据显示,离散度策略在 2008 年的最大回撤超过 40%。

这是这个策略最根本的风险:你赚的是正常时期的稳定溢价,赔的是危机时期的尾部亏损。跟卖保险一样,95% 的时间在赚小钱,5% 的时间可能一次赔光几年的利润。

流动性风险

个股期权的买卖价差比指数期权宽得多。管理 20 只个股的 straddle 头寸,光滑点(slippage)就能吃掉相当一部分利润。小市值成分股的期权流动性更差,这也是为什么实操中只选前 15~30 只大市值股票。

Gamma 和 Pin 风险

临近到期,Gamma 暴露急剧放大。如果某只成分股正好在行权价附近(pin risk),Delta 对冲变得非常困难。机构 desk 通常在到期前一周开始平仓或展期,避免最后几天的 Gamma 风险。

交易成本

20 只个股 straddle + 1 个指数 straddle + 持续的 Delta 对冲。每次调仓都要付佣金和滑点。这个策略的毛利润本来就不算高(年化收益通常在 8%~15%),交易成本控制不好的话,净收益可能只剩一半。

Python 实战:计算隐含相关性信号

下面用 Python 计算 SPX 成分股的实现相关性,并与 CBOE 隐含相关性指数做对比。这不是一个完整的回测(真正的离散度交易需要期权价格数据,不是免费数据源能搞定的),而是一个信号生成框架,帮你判断"现在做离散度交易的条件好不好"。

import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt

# --- 1. 下载 SPX 权重最大的成分股 ---
# 选 20 只权重最大的成分股(截至 2026 年)
top20 = [
    "AAPL", "MSFT", "NVDA", "AMZN", "GOOGL",
    "META", "BRK-B", "AVGO", "LLY", "JPM",
    "TSLA", "UNH", "V", "XOM", "MA",
    "COST", "PG", "JNJ", "HD", "ABBV"
]

data = yf.download(top20, start="2024-01-01", end="2026-06-30")["Close"]

# --- 2. 计算滚动实现相关性 ---
returns = np.log(data / data.shift(1)).dropna()

def rolling_avg_correlation(returns_df, window=30):
    """计算滚动窗口内所有股票对的平均相关性"""
    result = []
    for i in range(window, len(returns_df)):
        window_ret = returns_df.iloc[i-window:i]
        corr_matrix = window_ret.corr()
        # 取上三角(排除对角线)的平均值
        n = len(corr_matrix)
        mask = np.triu(np.ones((n, n), dtype=bool), k=1)
        avg_corr = corr_matrix.values[mask].mean()
        result.append({
            "date": returns_df.index[i],
            "avg_correlation": avg_corr
        })
    return pd.DataFrame(result).set_index("date")

realized_corr = rolling_avg_correlation(returns, window=30)

# --- 3. 可视化 ---
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(realized_corr.index, realized_corr["avg_correlation"],
        color="#2563eb", linewidth=1.2, label="30-Day Realized Correlation (Top 20)")
ax.axhline(y=realized_corr["avg_correlation"].mean(), color="#9ca3af",
           linestyle="--", linewidth=0.8, label="Mean")
ax.set_ylabel("Average Pairwise Correlation")
ax.set_title("SPX Top-20 Components: 30-Day Rolling Realized Correlation")
ax.legend(loc="upper right")
ax.set_ylim(0, 1)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("realized-correlation-rolling.webp", dpi=150)
plt.show()

# --- 4. 信号逻辑 ---
# 隐含相关性用 CBOE 的 ICJ/JCJ 指数代理(此处用简化假设)
# 实际交易中应从期权链反算隐含相关性
mean_corr = realized_corr["avg_correlation"].mean()
std_corr = realized_corr["avg_correlation"].std()

realized_corr["z_score"] = (
    (realized_corr["avg_correlation"] - mean_corr) / std_corr
)

# 信号:实现相关性低于均值 1 个标准差时,做空相关性的条件好
realized_corr["signal"] = np.where(
    realized_corr["z_score"] < -1, "favorable",
    np.where(realized_corr["z_score"] > 1, "dangerous", "neutral")
)

# 统计各信号的分布
print("\nDispersion trading signal distribution:")
print(realized_corr["signal"].value_counts(normalize=True).round(3))
print(f"\nMean realized correlation: {mean_corr:.3f}")
print(f"Current realized correlation: "
      f"{realized_corr['avg_correlation'].iloc[-1]:.3f}")
print(f"Current Z-score: {realized_corr['z_score'].iloc[-1]:.2f}")

实现相关性滚动走势

这段代码做了三件事:拉数据、算 30 天滚动的平均成对相关性、生成一个简单的 Z-score 信号。当 Z-score 低于 -1(实现相关性远低于均值),说明成分股走势分散,做离散度交易的环境好。Z-score 高于 1 时,相关性偏高,小心尾部风险。

实际交易中,你还需要从期权链数据反算隐含相关性,跟这里的实现相关性做对比。两者的缺口越大,信号越强。CBOE 发布的隐含相关性指数(ICJ、JCJ)可以做粗略参考,但它更新慢、方法简化,专业 desk 都是用实时期权数据自己算。

散户能做离散度交易吗

坦率说,完整版的离散度交易不太适合散户。20 只个股 straddle 加一个指数 straddle,光保证金就要六位数美元。加上每天的 Delta 对冲、到期展期,操作复杂度和交易成本都很高。

但离散度交易的核心信号(隐含相关性 vs 实现相关性的缺口)对散户依然有用。几个简化思路:

缩小规模。不做 20 只,选 5 只权重最大的成分股,SPY 替代 SPX。头寸小了,但核心逻辑一样。精度下降,交易成本也跟着降。

只做信号。不直接执行离散度交易,但用相关性信号来决定是否做空波动率。实现相关性低的时候,做空 SPX 波动率更安全(因为成分股不会同时暴跌)。

用 ETF 替代个股。XLK(科技)、XLF(金融)这些行业 ETF 替代个股,减少腿数。不如个股精确,但操作成本大幅降低。

什么时候不该碰:VIX 在 30 以上,或者隐含相关性已经很高的时候。这种环境下市场在 risk-off 模式,相关性还有进一步飙升的可能,做空相关性等于在暴风雨里卖伞。