2、波动率度量:历史波动率、隐含波动率、实时波动率估算方法及在ETF做市中的应用

做市这行,说白了就是跟波动率打交道。

你报的价差、你留的敞口、你赚的钱,本质上都是在赌波动率。我刚开始做ETF做市那会儿,总觉得盯住盘口就够了。后来亏了几笔大的,才明白——不懂波动率,就像瞎子摸象

这一章,我把三种波动率的度量方法掰开揉碎了讲。历史波动率、隐含波动率、实时波动率,各有各的用处。你想想看,做市商每天面对几百只ETF,哪能每只都靠直觉?

核心观点:波动率是做市定价的锚。没有这个锚,你的报价就是随波逐流。

2.1 历史波动率:看过去,知未来?

历史波动率,就是过去一段时间价格波动的标准差。听起来简单,但怎么算、用多长窗口,这里面门道不少。

计算方法:

  1. 取过去N天的收盘价,计算每日对数收益率:r_t = ln(P_t / P_{t-1})
  2. 计算这些收益率的样本标准差
  3. 年化:乘以 sqrt(252)(交易日数量)
# 一个简单的历史波动率计算
import numpy as np

def historical_vol(prices, window=20):
    log_returns = np.log(prices[1:] / prices[:-1])
    vol = np.std(log_returns[-window:]) * np.sqrt(252)
    return vol

我个人习惯用20个交易日(约一个月)作为默认窗口。为什么?因为太短了噪声大,太长了反应迟钝。我在项目中遇到过一只流动性极差的ETF,用5日窗口算出来的波动率忽高忽低,根本没法用。后来改成20日,稳定多了。

实战技巧:做市时,我会同时看20日和60日两个窗口。20日反映近期情绪,60日反映中期趋势。两者差距过大时,往往意味着市场在变盘。

在ETF做市中的应用:

  • 初始报价参考:新上市ETF没有隐含波动率数据,历史波动率就是你的定价基准
  • 价差校准:波动率越高,价差应该越宽。我一般用历史波动率乘以一个系数(比如0.5~1.0)来设定最小价差
  • 风险预警:当实时波动率突然超过历史波动率2倍以上,我会立刻收紧敞口

注意:历史波动率是后视镜。它告诉你过去发生了什么,但未来可能完全不同。尤其遇到财报季、政策发布日,历史数据基本没用。

2.2 隐含波动率:市场在说什么?

隐含波动率,是从期权价格反推出来的波动率。它反映的是市场对未来波动的预期。

说白了,隐含波动率就是市场情绪的体温计。我记得有一次,某只ETF的隐含波动率突然飙升到历史波动率的3倍,我当时觉得太夸张了,没当回事。结果第二天大盘暴跌3%,我亏惨了。从那以后,我再也不敢轻视隐含波动率了。

如何获取:

  • 对于有期权上市的ETF,可以直接从期权链数据中提取
  • 对于没有期权的ETF,可以用相关性高的指数期权来近似
  • 我常用的是VIX指数(标普500波动率指数)作为大盘情绪的参考

在ETF做市中的应用:

  • 定价锚定:隐含波动率是做市报价的核心参考。如果我的报价隐含波动率远低于市场隐含波动率,就会被套利者吃掉
  • 波动率曲面:不同行权价、不同到期日的隐含波动率不同。做市时要考虑整个曲面,不能只看平值期权
  • 事件驱动:财报、利率决议前,隐含波动率通常会上升。这时候我会主动扩大价差,保护自己
波动率类型 数据来源 反应速度 做市用途
历史波动率 历史价格 滞后 基准参考、价差下限
隐含波动率 期权价格 实时 定价锚、风险预警
实时波动率 高频数据 即时 动态调整、止损触发

2.3 实时波动率估算:高频世界里的生存法则

做市商是高频玩家。你不可能等收盘了再算波动率,那时候黄花菜都凉了。

实时波动率,就是用分钟级甚至秒级数据来估算当前波动水平。我常用的方法有两种:

方法一:已实现波动率(Realized Volatility)

用高频收益率平方和来估算。比如每5分钟采样一次,一天有78个样本点:

def realized_vol(price_series, freq='5min'):
    # 假设price_series是5分钟频率的价格序列
    returns = np.diff(np.log(price_series))
    rv = np.sqrt(np.sum(returns**2) * 252 * 78)  # 年化
    return rv

方法二:Parkinson波动率

利用最高价和最低价来估算,比只用收盘价更高效:

def parkinson_vol(high, low, window=20):
    # 使用日内高低价
    ratio = np.log(high / low)
    estimator = np.mean(ratio**2) / (4 * np.log(2))
    vol = np.sqrt(estimator * 252)
    return vol

我个人更偏爱Parkinson方法。为什么?因为它只用两根K线就能给出不错的估计,反应速度比已实现波动率快。我在做市系统里同时跑这两种方法,取两者的加权平均作为最终参考。

避坑指南:我曾经犯过一个错误——直接用1分钟数据算实时波动率,结果噪声大到没法用。后来我改成5分钟采样,效果好了很多。记住:频率越高,噪声越大。找到那个平衡点很重要。

2.4 三种波动率的融合应用

单独看任何一种波动率都有局限。真正的高手,是把它们结合起来用。

我自己的做市系统里,有一个简单的融合模型:

  1. 基准层:用20日历史波动率作为长期基准
  2. 调整层:用隐含波动率与历史波动率的比值作为情绪因子
  3. 动态层:用实时波动率做最后微调

举个例子:某ETF的历史波动率是20%,隐含波动率是25%,实时波动率突然跳到30%。这时候我会:

  • 扩大买卖价差(从0.05%调到0.08%)
  • 降低最大持仓量(从10万份降到5万份)
  • 提高撤单频率(从500ms降到200ms)

你想想看,如果只看历史波动率,你会觉得市场正常。但隐含波动率和实时波动率都在报警,说明有问题。三者的背离,就是最好的交易信号。

我的经验法则:

  • 隐含波动率 > 历史波动率 × 1.5:市场恐慌,做市要保守
  • 实时波动率 > 历史波动率 × 2:立即降低风险敞口
  • 三者趋于一致:市场正常,可以正常做市

2.5 知识体系总览

下面这张图,是我自己梳理的波动率度量框架。每次做市前,我都会过一遍这个逻辑:

ETF做市波动率度量框架 历史波动率 隐含波动率 实时波动率 20日/60日窗口 对数收益率标准差 期权价格反推 波动率曲面 已实现波动率 Parkinson估计 三因子融合模型 报价决策:价差 / 敞口 / 频率

嗯,这张图基本概括了本章的核心逻辑。从三种波动率的独立计算,到融合决策,最后输出报价参数。每一步都有数据支撑,不是拍脑袋。

最后说一句:波动率度量不是目的,目的是赚钱。别沉迷于计算精度,够用就好。我见过太多人把时间花在优化波动率模型上,结果忽略了市场本身的流动性变化。记住:在流动性枯竭的时候,再精确的波动率也没用

专注资料整理