波动率基础:定义、分类与数学表达
做配对交易这些年,我越来越觉得波动率是个绕不开的核心。说白了,波动率就是资产价格跳动的剧烈程度。你想想看,没有波动率,套利空间从哪来?
我个人习惯把波动率比作市场的「心跳」。心跳太快或太慢,都说明市场不太正常。而我们要做的,就是读懂这个心跳,从中找到交易机会。
波动率的三种面孔
实际工作中,我们主要跟三种波动率打交道。它们各有各的脾气,也各有各的用处。
1. 历史波动率(Historical Volatility, HV)
历史波动率,就是看过去。它衡量的是资产价格在过去一段时间内的实际波动幅度。
计算方式其实不复杂:
# 计算历史波动率的简单示例
import numpy as np
# 假设有每日收盘价
prices = [100, 102, 101, 105, 107, 106, 110]
log_returns = np.diff(np.log(prices)) # 对数收益率
hv = np.std(log_returns) * np.sqrt(252) # 年化
print(f"年化历史波动率: {hv:.4f}")
这里有个细节要注意。我刚开始做量化时,直接用标准差乘上根号252。后来发现,如果数据频率是日线,这样没问题。但如果是分钟线,就得用对应的年化系数。
2. 隐含波动率(Implied Volatility, IV)
隐含波动率就更有意思了。它不是算出来的,而是从期权价格里「反推」出来的。
什么意思呢?市场参与者对未来的预期,都藏在期权价格里。我们用Black-Scholes模型,把期权价格代入,反解出那个让模型价格等于市场价格的波动率——这就是隐含波动率。
# 用scipy求解隐含波动率(示意)
from scipy.optimize import brentq
import numpy as np
def implied_volatility(option_price, S, K, T, r, option_type='call'):
"""求解隐含波动率"""
def bs_price(sigma):
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)
return brentq(lambda s: bs_price(s) - option_price, 0.01, 5.0)
嗯,这里要注意。隐含波动率反映的是市场情绪。我见过很多新手,看到IV很高就觉得期权贵了,想卖。但有时候IV高是有原因的——比如财报前、重大事件前,市场确实预期会有大波动。
3. 已实现波动率(Realized Volatility, RV)
已实现波动率,是高频数据下的「真实」波动。它跟历史波动率的区别在于:
- 历史波动率:通常用日线数据,低频
- 已实现波动率:用分钟级甚至tick级数据,高频
计算方式上,已实现波动率用的是日内高频收益率的平方和:
# 已实现波动率计算
def realized_volatility(high_freq_prices):
"""输入高频价格序列,返回已实现波动率"""
log_returns = np.diff(np.log(high_freq_prices))
rv = np.sqrt(np.sum(log_returns**2))
return rv
说白了,已实现波动率更「精细」。它能捕捉到一天内的剧烈波动,而历史波动率可能被平滑掉了。
波动率的数学表达
搞量化交易,数学表达是基本功。波动率的核心公式其实就几个:
| 类型 | 公式 | 说明 |
|---|---|---|
| 对数收益率 | rt = ln(Pt / Pt-1) | 比简单收益率更符合正态分布假设 |
| 样本标准差 | σ = √( Σ(rt - μ)² / (n-1) ) | 历史波动率的基础 |
| 年化因子 | σ年化 = σ日 × √252 | 日线数据用252个交易日 |
| 已实现波动率 | RV = √( Σ ri² ) | 高频数据,假设均值接近0 |
我个人习惯用对数收益率。为什么?因为对数收益率在时间上可加,而且更接近正态分布。虽然实际数据有厚尾,但至少比简单收益率好处理。
波动率微笑与偏斜
这个现象很有意思。理论上,Black-Scholes模型假设波动率是常数。但实际市场中,不同行权价的期权,隐含波动率是不一样的。
波动率微笑:把不同行权价的IV画出来,形状像个微笑。平值期权IV最低,两边越来越高。
波动率偏斜:在股票市场,通常是虚值看跌期权的IV高于虚值看涨期权。这说明市场更担心大跌,而不是大涨。
核心要点:
- 波动率微笑说明市场不是Black-Scholes假设的那么理想
- 偏斜程度可以衡量市场恐慌情绪
- 在配对交易中,我们关注的是两只股票的波动率差异,而不是绝对水平
我做过一个项目,利用波动率偏斜来优化配对交易的入场时机。当某只股票的偏斜突然变大,说明市场在给它定价风险溢价。这时候,如果配对组合的另一只股票没有相应变化,就出现了套利机会。
你想想看,波动率本身就是一个信息载体。读懂它,就等于读懂了市场的「潜台词」。
这张图把波动率的知识体系串起来了。从中心出发,三条主线分别对应三种波动率。每种波动率又有自己的计算方法和应用场景。最下面那个虚线连接的,就是波动率微笑和偏斜——它是市场实际表现对理论模型的「修正」。
- 用历史波动率做长期基准,判断当前波动率水平
- 用隐含波动率观察市场情绪,寻找极端情况
- 用已实现波动率做实时监控,捕捉短期套利机会
好了,波动率的基础就聊到这。记住一句话:波动率不是风险本身,而是风险的「价格」。理解了这一点,后面的配对交易优化就好办了。