13、波动率曲面动态:曲面随时间的变化、曲面随标的价格的变化、动态对冲策略
波动率曲面不是刻在石头上的。它每天都在变,甚至每分每秒都在变。我刚开始做期权交易那会儿,总觉得把曲面拟合出来就完事了,结果第二天开盘一看,整个曲面都歪了。嗯,这玩意儿你得把它当成一个活物来理解。
13.1 曲面随时间的变化:Theta 衰减与期限结构
时间往前走,曲面会怎么变?说白了,就是两个方向:
- 整体水平下降——越临近到期,隐含波动率通常越低(尤其是平值附近)
- 期限结构变陡或变平——短期波动率对事件更敏感,长期波动率相对稳定
我个人习惯把时间维度拆成三块来看:
- 近月合约:波动率变化最剧烈,受消息面影响大。我在项目中遇到过,财报前一天的曲面近端能直接跳升5个vega。
- 次月合约:相对平滑,但会跟随近月趋势走。
- 远月合约:波动率变化缓慢,更多反映市场对长期不确定性的定价。
关键观察:曲面随时间推移,近端和远端的价差会扩大或收窄。如果近端波动率飙升而远端不动,说明市场认为这是个短期事件。如果远端也跟着动,那可能是系统性风险来了。
13.2 曲面随标的价格的变化:Skew 的粘性与动态
标的价格一涨一跌,曲面形状也会跟着变。这里有个核心概念叫粘性 strike 和 粘性 delta。
- 粘性 strike:标的价格变了,但同一行权价的波动率不变。比如50ETF从3.0涨到3.2,原来3.0的波动率还是那个数。这种情况多见于短期、事件驱动行情。
- 粘性 delta:标的价格变了,但同一delta的波动率不变。比如50ETF从3.0涨到3.2,原来0.5 delta的波动率还是那个数。这种情况多见于长期、平稳市场。
你想想看,实际市场里往往是两者混合。我建议用下面这个公式来量化曲面对标的价格的敏感度:
# 计算曲面随标的价格变化的敏感度
def compute_skew_sensitivity(surface, spot_price, delta=0.25):
"""
计算给定delta处的波动率对标的价格的敏感度
返回:每变动1%标的价格,波动率变化多少基点
"""
# 获取当前delta对应的波动率
vol_current = surface.get_vol_by_delta(delta)
# 模拟标的价格变动1%
spot_up = spot_price * 1.01
vol_up = surface.get_vol_by_delta(delta, spot=spot_up)
# 计算敏感度(基点/百分比)
sensitivity = (vol_up - vol_current) * 10000 # 转为基点
return sensitivity
实战技巧:我一般会同时计算0.25 delta和0.50 delta处的敏感度。如果两者差异很大,说明曲面形状在剧烈变化,这时候做动态对冲要格外小心。
13.3 动态对冲策略:从静态到动态的进化
静态对冲是「一次建仓,到期平仓」。动态对冲是「边走边调」。为什么需要动态?因为曲面在变,delta在变,你的风险敞口也在变。
我记得有一次做跨式策略,建仓时delta中性,结果第二天标的大涨,曲面Skew也变了,delta直接偏了0.3。如果不动态调整,那亏损就大了。
13.3.1 动态对冲的核心流程
- 计算当前希腊字母:delta、gamma、vega、theta
- 设定对冲阈值:比如delta偏离超过0.1就调整
- 选择对冲工具:用标的资产对冲delta,用期权对冲vega
- 执行调整:买卖标的或期权,恢复中性
- 记录成本:每次调整都有交易成本,要算进去
13.3.2 一个简单的动态对冲示例
class DynamicHedger:
def __init__(self, surface, spot, portfolio):
self.surface = surface
self.spot = spot
self.portfolio = portfolio
self.delta_threshold = 0.1 # delta偏离阈值
self.hedge_history = []
def check_and_hedge(self, new_spot, new_surface):
# 更新曲面和标的价格
self.spot = new_spot
self.surface = new_surface
# 重新计算组合delta
total_delta = self.portfolio.calc_delta(self.surface, self.spot)
# 判断是否需要调整
if abs(total_delta) > self.delta_threshold:
hedge_qty = -total_delta # 反向对冲
self.portfolio.add_hedge(hedge_qty)
self.hedge_history.append({
'spot': self.spot,
'delta_before': total_delta,
'hedge_qty': hedge_qty,
'cost': hedge_qty * self.spot * 0.0001 # 假设交易成本0.01%
})
print(f"对冲调整:delta={total_delta:.3f},买入{hedge_qty:.0f}份标的")
else:
print(f"无需调整,当前delta={total_delta:.3f}")
注意:动态对冲不是越频繁越好。我见过有人每5分钟调一次,结果交易成本把利润全吃掉了。阈值设定要结合你的gamma大小和交易成本来权衡。
13.4 曲面动态的三维可视化
为了更直观地理解曲面动态,我画了一张图。这张图展示了曲面在时间和标的价格两个维度上的变化:
从这张图里你能看到三个关键现象:
- 整体下移:时间衰减让所有行权价的波动率都下降(红色线在蓝色线下方)
- Skew左移:标的价格上涨后,虚值看跌期权的波动率相对上升(绿色线在左侧更高)
- 形状变化:近端(左侧)变化幅度大于远端(右侧)
13.5 实战中的动态对冲策略选择
不同的市场环境,适合不同的动态对冲策略。我根据自己的经验,整理了一个对照表:
| 市场环境 | 曲面特征 | 推荐对冲策略 | 注意事项 |
|---|---|---|---|
| 平稳市场 | 曲面变化缓慢,Skew稳定 | 低频对冲(每日一次) | 降低交易成本,关注theta收益 |
| 事件驱动 | 曲面近端剧烈波动,Skew变陡 | 高频对冲(每15分钟) | 优先对冲vega风险,delta次之 |
| 趋势行情 | 曲面整体平移,Skew单边倾斜 | 动态调整delta阈值 | 我曾经在趋势行情中把阈值从0.1调到0.2,减少了不必要的调整 |
| 波动率飙升 | 曲面整体上移,近端飙升 | 减少对冲频率,等待波动率回落 | 高频对冲在这种环境下会放大亏损 |
我的经验:动态对冲不是数学题,是艺术。我一般会先跑一遍历史回测,看看在不同市场环境下哪种阈值表现最好。别迷信理论公式,实盘数据才是最好的老师。
13.6 避坑指南
最后分享几个我踩过的坑:
- 别忽略交易成本:我曾经在回测里没算交易成本,结果实盘亏了。每次调整都要扣手续费,积少成多。
- 别在流动性差的时候调仓:尾盘或者节假日前后,买卖价差会拉大,这时候调整不划算。
- 别只盯着delta:曲面动态会影响vega和gamma,尤其是跨式策略,vega风险可能比delta还大。
- 别过度优化:我见过有人用机器学习预测曲面动态,结果过拟合得一塌糊涂。简单模型+合理阈值,往往比复杂模型更靠谱。
嗯,曲面动态这块内容就这些。记住一句话:曲面是活的,你的对冲策略也得是活的。
公众号:蓝海资料掘金营,微信deep3321