波动率与价格发现:从定义到实战
波动率这东西,说白了就是市场情绪的体温计。我做了这么多年量化,见过太多人把波动率当成一个简单的统计指标来用,结果吃了大亏。今天咱们就把它掰开揉碎了讲清楚。
一、波动率的定义与度量
先给个最朴素的定义:波动率衡量的是资产价格在单位时间内的波动幅度。你想想看,如果一只股票每天涨跌都在0.5%以内,另一只动不动就上下5%,哪个更让人睡不着觉?
度量方式主要有这么几种:
- 历史波动率(HV):基于过去N天的收益率标准差。我习惯用20个交易日,也就是一个自然月的数据。
- 已实现波动率(RV):用高频数据算出来的,比如5分钟收益率平方和开根号。这个在日内交易里特别有用。
- 隐含波动率(IV):从期权价格反推出来的,代表市场对未来波动的预期。
核心公式:
# 历史波动率计算(对数收益率)
import numpy as np
def historical_volatility(prices, window=20):
log_returns = np.log(prices / prices.shift(1))
hv = log_returns.rolling(window).std() * np.sqrt(252)
return hv
这里有个坑,我踩过。用对数收益率还是简单收益率?在波动率低的时候差别不大,但遇到极端行情,简单收益率算出来的波动率会明显偏大。我个人习惯用对数收益率,更符合正态分布的假设。
二、波动率聚集效应
什么叫波动率聚集?就是大波动后面跟着大波动,小波动后面跟着小波动。这不是玄学,是市场真实的统计规律。
我记得2015年股灾那会儿,每天千股跌停,波动率从20%直接飙到80%以上。你以为第二天会消停?不,继续大波动。这就是典型的波动率聚集。
实战经验: 我在做风险模型时,发现用GARCH(1,1)模型能很好地捕捉这个效应。简单说就是:今天的波动率 = 昨天的波动率 + 昨天的冲击。
# GARCH(1,1) 模型示例
from arch import arch_model
def fit_garch(returns):
model = arch_model(returns, vol='Garch', p=1, q=1)
result = model.fit(disp='off')
return result.conditional_volatility
为什么会这样?因为市场参与者的行为有惯性。恐慌情绪不会瞬间消失,贪婪也不会。你想想看,当所有人都慌着卖的时候,能一下子停下来吗?
三、波动率对价格发现速度的影响
这是本章最核心的部分。波动率到底怎么影响价格发现?我直接说结论:高波动率环境下,价格发现速度会显著加快,但质量会下降。
咱们用数据说话:
| 波动率水平 | 价格发现速度 | 价格发现质量 | 典型场景 |
|---|---|---|---|
| 低波动(<15%) | 慢 | 高 | 震荡市 |
| 中等波动(15%-30%) | 中等 | 中等 | 趋势市 |
| 高波动(>30%) | 快 | 低 | 危机/暴涨 |
我在做高频策略时发现一个规律:当波动率突然放大时,订单簿的深度会急剧下降。什么意思?就是买卖盘口变薄了,价格一跳就是好几个tick。这时候价格发现确实快,但很容易出现过度反应。
避坑指南: 我曾经在波动率飙升时用常规的套利策略,结果连续被打止损。后来才明白,高波动率下,你的订单执行价格和预期价格之间的滑点会成倍放大。这时候应该降低仓位,或者改用限价单。
四、知识体系框架
下面这张图是我自己总结的,把波动率与价格发现的关系理清楚了:
从这张图你能看到,波动率不是孤立存在的。它通过不同的度量方式影响市场行为,而聚集效应又反过来强化了这种影响。说白了,这是一个正反馈循环。
五、实战中的注意事项
最后分享几个我踩过的坑:
- 别迷信单一波动率指标。我见过有人只用HV做风控,结果在期权到期日附近被IV打脸。最好把HV、RV、IV结合起来看。
- 波动率均值回归是存在的,但别指望它马上发生。高波动率可以持续很久,低波动率也可以。我吃过这个亏,以为波动率高了就会降,结果仓位加早了。
- 注意波动率的期限结构。近月合约和远月合约的波动率往往不同,这反映了市场对不同时间维度的预期。
一个小技巧: 我习惯在每天开盘前看三个东西:隔夜波动率变化、当前IV相对于HV的溢价、以及波动率曲线的斜率。这三个指标基本能告诉我今天该用激进策略还是保守策略。
嗯,波动率这块内容其实很深,今天咱们先把基础打牢。记住一句话:波动率不是风险本身,而是风险的影子。你理解了影子,才能抓住实体。