期权量化交易系列教程(三):波动率分析与预测——期权量化的核心
摘要: 本文是“从零开始搭建期权量化交易系统”系列的第三篇。上一篇我们学习了期权基础、数据获取和Black-Scholes定价模型。今天,我们将深入期权量化交易最核心的领域——波动率分析。我们将系统梳理历史波动率与隐含波动率的计算方法,理解波动率微笑与波动率曲面的含义,并介绍如何使用GARCH模型预测波动率。通过Python代码实现波动率计算与可视化,为后续的波动率交易策略打下坚实的理论与实践基础。
大家好,我是你们的老朋友。
在前两篇文章中,我们了解了期权的基础知识和定价模型。如果说期权定价有什么最难把握的地方,那一定非波动率莫属。方向可以判断,时间可以计算,但波动率既是市场的“恐惧指数”,又是期权价格的“温度计”。几乎所有的专业期权交易策略,本质都是在交易波动率。
今天这篇文章,我们就来揭开波动率的神秘面纱,并学会用Python去计算、分析和预测它。掌握了波动率,你就掌握了期权量化的钥匙。
一、波动率的种类与计算
波动率在期权世界里有多重身份,理解它们的区别是第一步。
1.1 历史波动率
历史波动率(Historical Volatility, HV)是从标的历史价格数据中计算出的实际波动率。它反映的是过去一段时间价格的真实“颠簸”程度。
计算步骤很简单:
- 计算每日对数收益率或简单收益率。
- 计算这些收益率的标准差。
- 将标准差年化(乘以√252)。
以下是使用akshare获取沪深300ETF数据并计算历史波动率的代码:
import akshare as ak
import pandas as pd
import numpy as np
# 获取沪深300ETF日线数据
etf = ak.fund_etf_hist_em(symbol='510300', period='daily', start_date='20230101', end_date='20241231')
etf['日期'] = pd.to_datetime(etf['日期'])
etf.set_index('日期', inplace=True)
# 计算对数收益率
etf['log_return'] = np.log(etf['收盘'] / etf['收盘'].shift(1))
# 计算30日历史波动率(年化)
etf['hv_30'] = etf['log_return'].rolling(30).std() * np.sqrt(252)
print(etf[['收盘', 'hv_30']].tail())
通过rolling(30).std()我们获得了过去30个交易日的日收益率标准差,乘以√252就得到年化历史波动率。
1.2 隐含波动率
隐含波动率(Implied Volatility, IV)则完全不同。它不是从历史数据算出的,而是从期权的市场价格反推出来的波动率。它代表市场对未来波动率的预期。
当市场恐慌时(如大跌),投资者愿意为期权支付更高的价格,隐含波动率就会飙升。我们可以将市场上的期权价格代入上一篇文章实现的implied_volatility函数来求解IV。这里再次回顾一下实现方式:
from scipy.stats import norm
def black_scholes(S, K, T, r, sigma, option_type='call'):
if T <= 0:
return max(0, S - K) if option_type == 'call' else max(0, K - S)
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':
return S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)
else:
return K * np.exp(-r * T) * norm.cdf(-d2) - S * norm.cdf(-d1)
def implied_volatility(price, S, K, T, r, option_type='call', tol=1e-6, max_iter=100):
lo, hi = 0.001, 5.0
for _ in range(max_iter):
mid = (lo + hi) / 2
bs_price = black_scholes(S, K, T, r, mid, option_type)
if bs_price > price:
hi = mid
else:
lo = mid
if abs(bs_price - price) < tol:
return mid
return (lo + hi) / 2
实际使用时,只需将某期权合约的市场价、标的价格、行权价、剩余时间和无风险利率代入即可得到IV。
1.3 波动率微笑与波动率偏斜
在Black-Scholes模型的假设中,波动率是常数。但在现实市场中,不同行权价的期权合约有着不同的隐含波动率,将行权价与IV画成图,就会得到著名的波动率微笑或波动率偏斜。
- 股票/ETF期权:通常呈现偏斜形态,即低行权价(虚值看跌)的IV明显高于高行权价(虚值看涨)的IV。这是因为市场更担心崩盘风险,愿意为看跌期权支付更高的保险费用。
- 货币期权:有时呈现对称的微笑,因为汇率可能向任一方向大幅波动。
- 商品期权:偏斜方向取决于供需格局。
我们可以用某一天的期权链数据绘制波动率偏斜图,直观感受市场情绪。
二、波动率曲面与套利观察
将不同行权价和不同到期日的隐含波动率放在一起,就构成了波动率曲面。它为交易者提供了全面的定价信息。
波动率曲面通常具有以下特征:
- 到期日效应:临近到期日的期权波动率变化更剧烈。
- 行权价结构:曲面在平值附近可能有“凹陷”或“凸起”。
量化策略可以通过波动率曲面寻找套利机会:
- 垂直套利:当同一到期日不同行权价的IV差偏离正常范围时,可以买入低估合约、卖出高估合约。
- 水平套利(日历价差):当近月与远月IV差过大时,可以做空近月波动率、做多远月波动率。
虽然个人投资者较难直接交易波动率曲面套利,但理解其结构对把握期权定价偏差至关重要。我们可以使用akshare获取多条合约数据后,用matplotlib的三维绘图功能可视化波动率曲面。
三、波动率预测:GARCH模型
历史波动率反映过去,隐含波动率反映当下预期。如果想更进一步,我们需要预测未来波动率。GARCH(广义自回归条件异方差)模型是应用最广泛的波动率预测模型之一。
3.1 GARCH模型原理
金融时间序列常表现出波动聚集现象:高波动之后往往跟着高波动,低波动之后往往跟着低波动。GARCH模型正是为捕捉这种特性而设计的。其基本思想是:当期的波动率可以由过去的波动率和过去的收益率扰动来预测。
一个标准的GARCH(1,1)模型如下:
σ_t² = ω + α * ε_{t-1}² + β * σ_{t-1}²
其中σ_t²是当期方差,ε_{t-1}²是上一期收益率残差的平方,σ_{t-1}²是上一期方差。α + β 越接近1,波动持续性越强。
3.2 Python实现与预测
我们可以使用arch库非常方便地拟合GARCH模型。首先安装:
pip install arch
然后导入并建模:
import pandas as pd
import numpy as np
from arch import arch_model
# 准备收益率数据(去掉空值)
returns = etf['log_return'].dropna() * 100 # 转换为百分比
# 拟合GARCH(1,1)模型
model = arch_model(returns, vol='Garch', p=1, q=1)
fitted = model.fit(disp='off')
print(fitted.summary())
# 预测未来5天的波动率
forecast = fitted.forecast(horizon=5)
predicted_vol = np.sqrt(forecast.variance.iloc[-1, :])
print('未来5天预测日波动率(%):', predicted_vol.values)
将预测得到的日波动率乘以√252,即可转换为年化波动率。预测结果可以用于期权定价、调整仓位大小或设置止损幅度。
3.3 预测波动率 vs 隐含波动率
将GARCH预测的波动率与当前隐含波动率进行比较,是波动率交易的经典思路:
- 如果预测波动率 > 隐含波动率,说明期权可能被低估,适合买入期权(做多波动率)。
- 如果预测波动率 < 隐含波动率,说明期权可能被高估,适合卖出期权(做空波动率)。
当然,模型预测一定有误差,实盘中需要加入安全边际并严格风控。
四、波动率指数简介
提到波动率,就不得不提VIX指数(波动率指数)。它是由期权价格推算出来的、反映市场对未来30天波动预期的指数,通常被称为“恐慌指数”。
- 美国有标普500的VIX指数。
- 中国也有基于上证50ETF期权的上证50ETF波动率指数(简称“中国波指”或“iVX”)。
波动率指数与标的指数通常呈负相关:市场大跌时,恐慌情绪上升,波动率指数飙升。有些交易者直接交易VIX期货或期权来对冲市场风险。
我们可以利用akshare获取波动率指数数据进行分析,比如观察波动率指数的均值回复特性。
五、本篇总结
今天我们深入了期权交易最核心的变量——波动率:
- 历史波动率:基于历史价格计算,反映实际波动。
- 隐含波动率:从期权价格反推,反映市场预期。
- 波动率微笑与曲面:不同行权价和到期日的IV分布,蕴含市场情绪和套利机会。
- GARCH模型:预测未来波动率的有效工具,可用于与IV比较,制定交易策略。
掌握了这些工具,你就有了判断期权“贵不贵”的能力,这是所有波动率交易策略的前提。在下一篇文章中,我们将开始构建具体的期权策略,首先从方向性策略(备兑、保护性看跌、价差策略)入手,用Python进行完整回测。
下一篇预告:期权量化交易系列(四)——经典方向性策略:备兑、保护性看跌与价差策略
你准备好用代码构建自己的期权策略了吗?咱们下篇见!
更多推荐


所有评论(0)