曲面套利策略三:凸性套利(Convexity Arbitrage)

各位,咱们继续聊曲面套利。前两章讲了日历套利和斜率套利,今天这个更带劲——凸性套利。说白了,就是利用蝶式价差(Butterfly)去抓曲面的曲率错误。

你可能要问:曲率是什么?嗯,你可以把波动率曲面想象成一块布。斜率是布的倾斜程度,曲率就是布的弯曲程度。如果某块地方本该是平滑弯曲的,结果突然鼓了个包或者凹了个坑,那就是曲率错了。凸性套利就是专门抓这种错误的。

1. 凸性套利的底层逻辑

先说说蝶式价差。一个标准的蝶式价差由三腿组成:

  • 买入1份低行权价的期权
  • 卖出2份中间行权价的期权
  • 买入1份高行权价的期权

三份期权的到期日相同,行权价等间距分布。比如50、55、60。这种结构,说白了就是在赌波动率曲面的曲率是否合理。

我个人习惯把蝶式价差看作一个「曲率探测器」。如果中间行权价的隐含波动率被高估了,那卖出2份中间期权就能赚到钱。反过来,如果中间被低估,那就反向操作。

核心逻辑:蝶式价差的盈亏,本质上反映的是波动率曲面在某个行权价附近的弯曲程度是否合理。如果实际曲率与模型曲率不一致,套利机会就出现了。

2. 凸性套利的实战框架

我在项目中遇到过不少凸性套利的机会,总结下来就三步:

  1. 计算理论曲率——用随机波动率模型(比如SVI、SSVI)拟合出曲面,算出每个行权价处的理论曲率。
  2. 对比实际曲率——用市场报价的蝶式价差价格,反推出市场隐含的曲率。
  3. 寻找偏差——当理论曲率和市场曲率偏差超过某个阈值时,开仓。

你想想看,如果市场曲率比理论曲率大很多,说明中间行权价的期权被高估了。这时候卖出蝶式价差(即卖出中间、买入两边)就能获利。

避坑指南:我曾经吃过一次亏,没注意到期日太近的合约。临近到期的期权,蝶式价差对曲率的反应极其敏感,稍微有点偏差就可能被止损打掉。后来我给自己定了个规矩:只做到期日大于30天的合约。

3. 代码实现:凸性套利信号生成

下面是我常用的一个凸性套利检测函数。它计算蝶式价差的隐含曲率,并与模型曲率对比:

import numpy as np
from scipy.interpolate import CubicSpline

def convexity_arb_signal(option_chain, model_vols, threshold=0.02):
    """
    凸性套利信号检测
    :param option_chain: DataFrame, 包含行权价、市场IV、期权价格
    :param model_vols: dict, 模型给出的理论IV
    :param threshold: float, 偏差阈值
    :return: list of signals
    """
    signals = []
    strikes = option_chain['strike'].values
    market_ivs = option_chain['implied_vol'].values
    model_ivs = np.array([model_vols[k] for k in strikes])
    
    # 用三次样条计算曲率
    market_spline = CubicSpline(strikes, market_ivs)
    model_spline = CubicSpline(strikes, model_ivs)
    
    # 二阶导数就是曲率
    market_curvature = market_spline(strikes, 2)
    model_curvature = model_spline(strikes, 2)
    
    # 偏差计算
    curvature_diff = market_curvature - model_curvature
    
    for i, diff in enumerate(curvature_diff):
        if abs(diff) > threshold:
            if diff > 0:
                # 市场曲率偏大 → 卖出蝶式
                signals.append({
                    'strike': strikes[i],
                    'action': 'SELL_BUTTERFLY',
                    'curvature_diff': diff
                })
            else:
                # 市场曲率偏小 → 买入蝶式
                signals.append({
                    'strike': strikes[i],
                    'action': 'BUY_BUTTERFLY',
                    'curvature_diff': diff
                })
    
    return signals

这段代码的核心就两个点:一是用样条插值算曲率,二是对比偏差。实际跑起来你会发现,大部分时间偏差都很小,但偶尔会出现0.05甚至0.1以上的偏差——那就是机会。

4. 凸性套利的风险与注意事项

凸性套利看着很美,但有几个坑你得注意:

  • 流动性风险:蝶式价差涉及三个行权价,如果中间那个流动性差,滑点能吃掉你所有利润。
  • 模型风险:理论曲率依赖于模型。如果模型本身错了,那套利信号就是假的。我一般会用两三个模型交叉验证。
  • 时间衰减:蝶式价差的时间价值衰减是非线性的。临近到期时,gamma会急剧变化,持仓要小心。

警告:凸性套利不是无风险套利。它本质上是在赌曲率会回归均值。如果市场结构发生了根本性变化(比如黑天鹅事件),曲率可能长期偏离,导致亏损。

5. 知识体系图:凸性套利全景

下面这张图帮你理清凸性套利的整体脉络:

凸性套利(Convexity Arbitrage)知识体系 市场数据输入 模型曲率计算 蝶式价差构建 曲率偏差检测 市场曲率 vs 模型曲率 → 偏差计算 → 阈值过滤 偏差 > 阈值 → 开仓信号 偏差 ≤ 阈值 → 等待 执行蝶式价差:买入/卖出 → 持仓管理 → 平仓 注:阈值通常设为0.02-0.05,具体取决于市场波动率水平

这张图把凸性套利的流程串起来了。从数据输入到最终执行,每一步都有讲究。我个人觉得最关键的还是第二步——曲率偏差检测。阈值设得太小,假信号太多;设得太大,又容易错过机会。我一般会根据历史回测来动态调整阈值。

6. 一个真实案例

记得去年有一次,我在做50ETF期权时发现,行权价2.8附近的曲率明显偏大。理论曲率是-0.15,市场曲率是-0.08,差了将近一倍。我判断是市场过度定价了尾部风险,于是卖出了2.75/2.8/2.85的蝶式价差。

持仓了大概两周,曲率慢慢回归,最终盈利了约15%。嗯,这种机会不常有,但抓住了就是稳稳的幸福。

小技巧:凸性套利最好配合波动率期限结构一起看。如果短期曲率偏大但长期正常,那回归的概率更高。如果整个期限结构都扭曲了,那就要小心了。

好了,凸性套利就聊到这儿。记住一句话:蝶式价差是曲率的镜子,镜子里照出的扭曲,就是你的利润来源。

公众号:蓝海资料掘金营,微信deep3321