22. 波动率曲面日历套利:不同到期日合约的价差
日历套利,说白了就是利用同一标的、不同到期日的期权合约之间的价差来赚钱。很多人一听到「日历」两个字,就以为是简单的近月卖、远月买,或者反过来。嗯,实际做起来远没那么简单。
我个人习惯把日历套利分成两类:一种是纯波动率视角的,另一种是曲面结构视角的。今天咱们重点聊后者——如何利用波动率曲面的形态变化来做日历价差。
什么是日历套利?
先快速过一下基础。日历套利,也叫时间价差套利,就是同时买入和卖出同一行权价、不同到期日的期权。
- 买入日历套利:买远月、卖近月。赌的是远月波动率上升,或者近月波动率下降。
- 卖出日历套利:卖远月、买近月。赌的是远月波动率下降,或者近月波动率上升。
但这里有个坑——很多人以为日历套利就是纯赚时间价值衰减。其实不是。真正驱动日历价差变动的,是波动率曲面的期限结构变化。
核心观点:日历套利的本质,是对波动率曲面期限结构斜率的定向交易。
波动率曲面的期限结构
我们平时看到的波动率曲面,横轴是行权价,纵轴是到期时间。沿着到期时间方向切一刀,就得到一条曲线——这叫「期限结构」。
正常情况下,远月波动率比近月高,因为不确定性更大。但市场情绪变化时,这个结构会扭曲。比如:
- 近月有重大事件(财报、议息),近月IV会飙升,导致期限结构倒挂
- 远月出现系统性风险预期,远月IV会跳升,期限结构变陡
我曾在2020年3月遇到过这种情况。当时美股波动率曲面完全扭曲,近月IV冲到80%以上,远月反而只有40%多。这种极端结构下,日历套利的机会就来了。
日历价差的定价逻辑
日历价差的理论价格,取决于两个合约的隐含波动率之差。用公式表示:
日历价差 = 远月期权价格 - 近月期权价格
理论上,如果两个合约的IV相同,日历价差 ≈ 时间价值差
实际上,两个合约的IV往往不同,价差 = 时间价值差 + 波动率差的影响
所以,做日历套利时,你真正在赌的是:两个到期日的波动率之差会怎么变化。
实战技巧:我建议用「波动率差」而不是「价格差」来监控日历套利头寸。因为价格受标的价格影响太大,而波动率差更纯粹地反映了曲面结构的变化。
曲面形态与日历套利策略
不同的曲面形态,对应不同的日历套利策略。我总结了几种典型场景:
| 曲面形态 | 期限结构特征 | 推荐策略 | 逻辑 |
|---|---|---|---|
| 正常向上倾斜 | 远月IV > 近月IV | 卖出日历套利 | 赌期限结构变平,远月IV相对下降 |
| 倒挂(近高远低) | 近月IV > 远月IV | 买入日历套利 | 赌期限结构恢复正常,远月IV相对上升 |
| 平坦 | 近月IV ≈ 远月IV | 观望或小仓位 | 没有明显的曲面结构机会 |
| 凸起(中间高) | 中间到期IV最高 | 蝶式日历组合 | 赌中间到期IV回归 |
你看,不同形态下,策略方向完全不同。如果不管曲面结构,闭着眼睛做日历套利,很容易亏钱。
一个实战案例
讲个我自己的经历。去年某次美联储议息会议前,标普500期权的期限结构出现了明显的倒挂。近月(议息当周)IV高达35%,远月(一个月后)只有22%。
我当时判断:议息结果出来后,近月IV会大幅回落,远月IV变化不大。所以做了买入日历套利——买入远月平值call,卖出近月平值call。
结果呢?议息结果符合预期,近月IV从35%跌到18%,远月IV只跌了2个点。这个头寸赚了将近3倍的收益。
注意:日历套利不是无风险的。最大的风险在于标的价格大幅偏离行权价。如果标的价格跑到行权价很远的地方,两个合约都会变成深度实值或虚值,价差会急剧缩小。我曾经吃过这个亏,一次没设止损,回吐了所有利润。
如何用曲面数据做日历套利?
实际操作中,我一般按以下步骤来:
- 获取曲面数据:至少需要近月和远月两个到期日的完整波动率曲面
- 计算期限结构斜率:用远月IV减去近月IV,得到每个行权价上的斜率
- 识别异常点:找到斜率明显偏离历史均值的行权价区间
- 构建头寸:在异常点附近选择行权价,做日历套利
- 动态调整:随着时间推移,近月变成当周,波动率行为会变化,需要重新评估
这里有个小技巧:我习惯用「波动率差的分位数」来判断是否该出手。如果当前波动率差处于历史90%分位数以上,说明结构极度扭曲,反转概率大。
代码示例:计算日历价差
下面是一个简单的Python示例,计算不同到期日的日历价差:
import numpy as np
from scipy.stats import norm
def black_scholes_price(S, K, T, r, sigma, option_type='call'):
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
if option_type == 'call':
price = S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
else:
price = K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1)
return price
def calendar_spread(S, K, T_near, T_far, r, sigma_near, sigma_far):
"""计算日历价差"""
price_near = black_scholes_price(S, K, T_near, r, sigma_near)
price_far = black_scholes_price(S, K, T_far, r, sigma_far)
return price_far - price_near
# 示例:标普500平值日历价差
S = 4500
K = 4500
T_near = 7/365 # 近月7天到期
T_far = 37/365 # 远月37天到期
r = 0.05
sigma_near = 0.35 # 近月IV 35%
sigma_far = 0.22 # 远月IV 22%
spread = calendar_spread(S, K, T_near, T_far, r, sigma_near, sigma_far)
print(f"日历价差: {spread:.2f}")
这个代码很简单,但实际交易中,你需要考虑更多因素——比如股息、利率曲线、以及两个合约的流动性差异。
曲面结构图:日历套利的核心逻辑
下面这张图展示了波动率曲面的期限结构,以及日历套利的切入点:
这张图清晰地展示了:当期限结构倒挂时(红线),我们做买入日历套利,赌它回归正常;当期限结构正常向上时(蓝虚线),我们做卖出日历套利,赌它保持稳定或变平。
避坑指南
最后,分享几个我踩过的坑:
- 别忽略流动性:远月合约流动性往往很差,买卖价差可能吃掉你所有利润。我建议只做近月和次近月,最多做到第三个月。
- 注意行权价选择:平值附近的日历价差对波动率变化最敏感,但gamma风险也最大。虚值合约的日历价差更稳定,但收益也小。
- 别死扛:日历套利看起来是「有限风险」,但如果你做反了方向,亏损可能超过你的预期。我曾经有一次没及时止损,亏了本金的15%。
- 关注事件风险:近月如果有财报、议息、非农等事件,IV会提前飙升。事件落地后IV会暴跌,这是做日历套利的好时机,但也要小心事件结果超预期。
嗯,关于波动率曲面日历套利,今天就聊到这儿。核心就一句话:别只看价格,要看曲面结构。理解了期限结构的形态和变化规律,你才能真正用好日历套利这个工具。
我的习惯:每天开盘前,我会先看一眼波动率曲面的期限结构图。如果发现某个行权价附近的斜率异常,就标记下来,作为当天的潜在交易机会。这个习惯帮我抓住了不少结构性机会。