波动率度量:三种核心指标的实战对比

做利率债做市,波动率就是我们的「心跳」。心跳太快或太慢,都意味着市场在发生某种变化。今天我来聊聊三种最常用的波动率度量方式:历史波动率、隐含波动率、已实现波动率。这三兄弟各有各的脾气,搞懂了它们,你就能更好地把握市场节奏。

核心观点:没有一种波动率是「万能钥匙」。历史波动率看过去,隐含波动率看预期,已实现波动率看当下。做市商需要三管齐下。

1. 历史波动率:后视镜里的风景

历史波动率,说白了就是「过去N天价格波动的标准差」。它是最直观、最容易计算的指标。我个人习惯用20个交易日作为窗口期,因为一个月大概有20个交易日,这个周期能较好地反映中期波动特征。

计算公式其实很简单:

# 计算对数收益率
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

嗯,这里要注意一个细节:为什么要乘以根号252?因为我们要把日波动率年化。252是一年的交易日数。我在项目中遇到过有人直接用日波动率去对比年化隐含波动率,结果对不上,白白浪费了半天排查时间。

我的经验:历史波动率适合做「基准线」。当市场突然出现异常波动时,我会先看历史波动率是否突破了2倍标准差。如果突破了,说明这次波动不是「常规操作」,需要警惕。

2. 隐含波动率:市场情绪的体温计

隐含波动率是从期权价格反推出来的。它反映的是市场对未来波动的一致预期。你想想看,如果大家都在抢着买期权,期权价格就会上涨,隐含波动率自然就高了。

计算隐含波动率需要用到数值方法,比如牛顿迭代法:

from scipy.stats import norm
from scipy.optimize import brentq

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)
    
    try:
        iv = brentq(lambda s: bs_price(s) - option_price, 0.001, 2.0)
        return iv
    except:
        return np.nan

我曾经在国债期货期权上吃过亏。当时隐含波动率突然飙升到历史高位的1.5倍,我以为是市场恐慌,赶紧做空了波动率。结果第二天央行意外降息,波动率继续飙升,我被打脸了。后来我学乖了:隐含波动率飙升时,先别急着下结论,要结合宏观事件来判断。

避坑指南:隐含波动率在流动性差的合约上容易失真。我曾经在某个远月合约上看到隐含波动率异常低,以为是机会,结果发现是买卖价差太大导致的假象。记住:流动性是第一位的。

3. 已实现波动率:最真实的「当下」

已实现波动率是用高频数据算出来的。比如用5分钟级别的收益率数据,计算一天的波动率。它比历史波动率更「新鲜」,能捕捉到日内波动的细节。

计算方式如下:

def realized_volatility(prices, freq='5min'):
    # 假设prices是5分钟级别的价格序列
    log_returns = np.log(prices / prices.shift(1))
    rv = np.sqrt(np.sum(log_returns**2))
    # 年化处理
    rv_annual = rv * np.sqrt(252 * (6.5*60/5))  # 6.5小时交易时间
    return rv_annual

为什么用5分钟?太短了会有微观结构噪声,太长了又丢失信息。我个人习惯用5分钟作为基准,但在关键数据公布前后,会切换到1分钟级别来捕捉瞬时波动。

实战技巧:做市时,我会同时监控已实现波动率和隐含波动率的差值。如果已实现波动率持续高于隐含波动率,说明市场实际波动比预期大,这时候做市商需要扩大买卖价差来保护自己。

4. 三种波动率的对比:谁更靠谱?

我整理了一个对比表,方便你快速理解:

指标 数据来源 时间视角 优点 缺点
历史波动率 历史价格 过去 计算简单,稳定 滞后,无法反映突变
隐含波动率 期权价格 未来 前瞻性强 受流动性影响大
已实现波动率 高频价格 当下 实时性强 对数据频率敏感

你可能会问:那到底该用哪个?我的答案是:全都要。做市商不是分析师,不能只盯着一个指标。我自己的做法是:

  • 日常做市:以已实现波动率为基准,动态调整价差
  • 风险监控:用历史波动率设定阈值,超过2倍标准差就预警
  • 策略调整:参考隐含波动率,判断市场情绪是否过热或过冷

5. 知识体系框架

下面这张图是我自己梳理的波动率度量体系,你可以把它当作一个「作战地图」:

波动率度量知识体系 波动率度量 历史波动率 隐含波动率 已实现波动率 窗口期选择(20日/60日) 年化处理(√252) 异常值检测(2σ阈值) 牛顿迭代法求解 BS模型反推 流动性风险识别 高频数据(5min/1min) 平方和法计算 微观结构噪声处理 三者结合使用:历史做基准,隐含看预期,已实现抓当下 做市商的核心竞争力:在三种波动率之间找到套利空间

最后说一句:波动率度量不是目的,而是手段。我见过太多人沉迷于计算各种波动率,却忘了做市的本质是管理风险。记住:波动率是工具,不是信仰。用得好,它是你的护身符;用得不好,它就是你的催命符。

专注资料整理