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倍的收益。

注意:日历套利不是无风险的。最大的风险在于标的价格大幅偏离行权价。如果标的价格跑到行权价很远的地方,两个合约都会变成深度实值或虚值,价差会急剧缩小。我曾经吃过这个亏,一次没设止损,回吐了所有利润。

如何用曲面数据做日历套利?

实际操作中,我一般按以下步骤来:

  1. 获取曲面数据:至少需要近月和远月两个到期日的完整波动率曲面
  2. 计算期限结构斜率:用远月IV减去近月IV,得到每个行权价上的斜率
  3. 识别异常点:找到斜率明显偏离历史均值的行权价区间
  4. 构建头寸:在异常点附近选择行权价,做日历套利
  5. 动态调整:随着时间推移,近月变成当周,波动率行为会变化,需要重新评估

这里有个小技巧:我习惯用「波动率差的分位数」来判断是否该出手。如果当前波动率差处于历史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会暴跌,这是做日历套利的好时机,但也要小心事件结果超预期。

嗯,关于波动率曲面日历套利,今天就聊到这儿。核心就一句话:别只看价格,要看曲面结构。理解了期限结构的形态和变化规律,你才能真正用好日历套利这个工具。

我的习惯:每天开盘前,我会先看一眼波动率曲面的期限结构图。如果发现某个行权价附近的斜率异常,就标记下来,作为当天的潜在交易机会。这个习惯帮我抓住了不少结构性机会。