第二十章:高阶策略:波动率锥、波动率期限结构套利
各位,欢迎来到高阶策略部分。
前面我们聊了很多曲面上的静态特征,比如微笑、偏斜。但交易员真正赚钱的地方,往往在曲面的动态变化上。今天要讲的波动率锥和期限结构套利,就是捕捉这种动态变化的利器。
我个人习惯把波动率锥看作一把“尺子”。没有这把尺子,你很难判断当前隐含波动率到底是贵了还是便宜了。说白了,就是给波动率定价。
1. 波动率锥:给波动率“称重”
什么是波动率锥?
很简单。把不同期限的历史波动率统计出来,画出分位数线(比如10%、25%、50%、75%、90%)。再把当前市场的隐含波动率点上去。两者一对比,高下立判。
核心逻辑:
- 如果隐含波动率落在锥体上方(高于90%分位)→ 期权被高估,适合做空波动率。
- 如果落在锥体下方(低于10%分位)→ 期权被低估,适合做多波动率。
- 落在中间区域 → 相对合理,但可以结合期限结构做相对价值交易。
嗯,这里要注意一点。历史波动率的分位数不是一成不变的。我建议至少用过去1年、3年、5年的数据分别计算,然后取一个加权平均。为什么?因为市场结构会变。2018年的波动率特征和2023年完全不同。
我曾经在2020年3月市场暴跌时,看到隐含波动率瞬间冲破了99%分位。当时很多人慌了,觉得波动率还会更高。但我看了波动率锥,发现短期(1周)的锥顶已经被击穿,而长期(1年)的锥顶还有空间。这说明什么?短期恐慌过度了,但长期不确定性还在。于是我做了一个日历价差:卖出短期期权,买入长期期权。结果?短期波动率很快回落,长期波动率维持高位,这笔交易赚得很舒服。
2. 波动率期限结构:捕捉“形状”的套利机会
波动率期限结构,就是不同到期日的隐含波动率连成的曲线。正常情况下,它应该是向上倾斜的(远期不确定性更大)。但市场经常出现扭曲。
常见的期限结构形态:
- 正向(Contango):远月波动率 > 近月波动率。这是常态。
- 反向(Backwardation):近月波动率 > 远月波动率。通常出现在危机时刻。
- 驼峰(Humped):中间期限波动率最高。这往往意味着某个特定事件(比如财报、大选)的预期。
套利怎么做?核心是相对价值。不是赌波动率的绝对方向,而是赌期限结构会回归正常形态。
一个经典策略:
当近月波动率远高于远月(反向结构)时,做空近月波动率,做多远月波动率。这叫“波动率期限结构套利”。
注意:这不是无风险套利。你需要对冲Delta和Vega的暴露。通常用Delta中性组合,并控制Vega的净敞口。
举个例子。假设标普500指数在某个事件后,近月(1个月)IV飙到35%,远月(6个月)IV只有22%。正常情况两者差距应该在5-8个点。现在差了13个点。我判断近月恐慌过度,远月相对合理。于是:
- 卖出近月平值跨式(Short Straddle)
- 买入远月平值跨式(Long Straddle)
- 调整头寸比例,使得整体Vega中性(即波动率变化1%,组合盈亏平衡)
结果?只要近月IV回落,远月IV不跌,组合就能盈利。即使近月IV继续涨,只要远月IV涨得更多,也能赚钱。这就是相对价值套利的魅力。
3. 实战中的避坑指南
策略听起来简单,但坑不少。我踩过几个,分享给你们:
我曾经犯过的错:
- 忽略流动性:远月期权流动性差,买卖价差大。你看到的IV可能是“纸面价格”,实际成交要打折扣。我建议只做近3个月到期的合约,流动性相对好。
- 忽略股息和利率:期限结构套利涉及不同到期日,股息和利率的差异会影响期权定价。尤其是股指期权,股息率的变化会扭曲期限结构。记得用远期价格来校准。
- 忽略尾部风险:反向期限结构往往出现在市场恐慌时。如果你做空近月波动率,一旦黑天鹅事件发生,近月IV可能继续飙升,导致巨大亏损。我建议设置严格的止损线,或者用价差结构(比如Put Spread)来限制风险。
4. 代码示例:计算波动率锥
下面是一个简单的Python代码,用来计算并绘制波动率锥。你可以直接拿去用。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 假设你有一个DataFrame,包含不同期限的历史波动率数据
# 列名:'1W', '1M', '3M', '6M', '1Y'
# 每一行代表一个交易日的历史波动率
def calculate_volatility_cone(df, quantiles=[0.1, 0.25, 0.5, 0.75, 0.9]):
"""
计算波动率锥的分位数
"""
cone = {}
for col in df.columns:
cone[col] = df[col].quantile(quantiles).values
return pd.DataFrame(cone, index=quantiles)
# 示例数据
np.random.seed(42)
dates = pd.date_range('2020-01-01', '2023-12-31', freq='D')
data = {
'1W': np.random.lognormal(mean=0.02, sigma=0.3, size=len(dates)) * 0.15,
'1M': np.random.lognormal(mean=0.02, sigma=0.25, size=len(dates)) * 0.18,
'3M': np.random.lognormal(mean=0.02, sigma=0.2, size=len(dates)) * 0.20,
'6M': np.random.lognormal(mean=0.02, sigma=0.15, size=len(dates)) * 0.22,
'1Y': np.random.lognormal(mean=0.02, sigma=0.1, size=len(dates)) * 0.25,
}
df = pd.DataFrame(data, index=dates)
# 计算锥
cone_df = calculate_volatility_cone(df)
# 当前隐含波动率(示例)
current_iv = {'1W': 0.32, '1M': 0.28, '3M': 0.25, '6M': 0.23, '1Y': 0.22}
# 绘图
plt.figure(figsize=(10, 6))
for q in cone_df.index:
plt.plot(cone_df.columns, cone_df.loc[q], label=f'{int(q*100)}%', marker='o')
plt.plot(list(current_iv.keys()), list(current_iv.values()), 'r--', label='Current IV', linewidth=2)
plt.xlabel('Tenor')
plt.ylabel('Volatility')
plt.title('Volatility Cone')
plt.legend()
plt.grid(True)
plt.show()
这段代码会画出5条分位数线,以及当前隐含波动率的连线。一眼就能看出当前IV在锥体中的位置。
5. 知识体系图
下面我用一张SVG图来总结本章的核心逻辑。你可以把它当作一个思维导图。
这张图把本章的三个核心模块串起来了。波动率锥是“定价工具”,期限结构套利是“交易策略”,风险管理是“安全带”。三者缺一不可。
6. 最后说两句
波动率锥和期限结构套利,说白了就是利用市场对波动率的错误定价。但你要记住,市场错误定价是有原因的——可能是流动性不足,可能是事件冲击,也可能是市场情绪。你赚的钱,本质上是在承担别人不愿意承担的风险。
我个人的经验是:不要试图预测波动率的绝对方向,而是专注于相对价值。当你看到期限结构扭曲时,先问自己三个问题:
- 这个扭曲有基本面支撑吗?(比如财报、宏观事件)
- 我的头寸能承受多大的偏离?
- 如果错了,我该怎么退出?
想清楚这三个问题,再动手。嗯,今天就到这里。