波动率信号:历史波动率、已实现波动率、波动率聚类

波动率,说白了就是价格波动的剧烈程度。做高频交易的人,没人敢忽视它。

我刚开始做量化那会儿,总觉得预测方向才是王道。直到有一次,我在股指期货上吃了个大亏——方向看对了,但波动率突然飙升,止损被连续打穿,仓位直接爆了。嗯,从那以后,我把波动率信号放在了策略的第一优先级。

今天咱们聊聊三种最常用的波动率信号:历史波动率已实现波动率,以及波动率聚类现象。这三兄弟,各有各的脾气。

1. 历史波动率:最朴素的参考线

历史波动率(Historical Volatility, HV)就是过去一段时间的价格波动程度。计算方式很简单:取过去N天的收益率,算标准差,再年化一下。

公式长这样:

HV = std(ln(P_t / P_{t-1})) * sqrt(252)

为什么乘以sqrt(252)?因为一年大概有252个交易日。把日波动率放大到年化尺度,方便不同品种之间对比。

我个人习惯用20日HV作为基准线。为什么是20?因为一个月大概有20个交易日,这个周期能过滤掉一些短期噪音,又不至于太滞后。

核心要点:历史波动率是「回头看」的指标。它告诉你过去发生了什么,但不保证未来会重复。

代码实现很简单:

import numpy as np
import pandas as pd

def historical_volatility(price_series, window=20):
    log_returns = np.log(price_series / price_series.shift(1))
    hv = log_returns.rolling(window).std() * np.sqrt(252)
    return hv

我在项目中遇到过一个问题:用日线算HV,在高频策略里根本不够用。你想想看,一分钟级别的交易,用日线波动率去判断,就像用年历去定闹钟——完全对不上节奏。

2. 已实现波动率:高频数据的王牌

已实现波动率(Realized Volatility, RV)才是高频交易的主角。它不依赖收盘价,而是利用日内所有价格数据来计算。

公式:

RV = sum(r_i^2)

其中 r_i 是每个采样间隔内的收益率。采样频率越高,RV越精确。

举个例子:如果你用1分钟K线,一天有240根(假设6.5小时交易时间)。每根K线算一个收益率,平方后求和,就是当天的已实现波动率。

我的经验:采样频率不是越高越好。用tick级别的数据算RV,微观结构噪声会严重干扰结果。我个人建议用1分钟或5分钟频率,性价比最高。

代码实现:

def realized_volatility(price_series, freq='1T'):
    # 重采样到指定频率
    resampled = price_series.resample(freq).last()
    log_returns = np.log(resampled / resampled.shift(1))
    # 每日RV = 日内所有收益率平方和
    daily_rv = log_returns.pow(2).resample('D').sum()
    return np.sqrt(daily_rv)

已实现波动率比历史波动率灵敏得多。市场一有风吹草动,RV立刻就能反映出来。我曾在一次闪电崩盘事件中,亲眼看着RV在3秒内翻了10倍——这种速度,历史波动率根本追不上。

3. 波动率聚类:波动率会「抱团」

波动率聚类(Volatility Clustering)是一个很有意思的现象:大的波动后面往往跟着大的波动,小的波动后面跟着小的波动。

为什么会这样?因为市场信息是成批到达的。一条重大新闻出来,市场需要时间消化,这个过程中波动率会持续偏高。等消息消化完了,波动率才会慢慢降下来。

我最早接触这个概念是在读Robert Engle的论文,他因为这个拿了诺贝尔奖。当时觉得这理论挺抽象,直到自己在实盘中看到——嗯,确实如此。

避坑指南:我曾经犯过一个错误:看到波动率连续几天偏低,就以为市场「安全」了,加了大仓位。结果第二天一个黑天鹅事件,波动率瞬间爆表。波动率聚类不代表波动率不会突变——它只是说波动率有记忆性,但记忆是会断片的。

波动率聚类的量化方法有很多,最经典的是GARCH模型:

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

GARCH(1,1)是最常用的配置。p=1表示依赖上一期的波动率,q=1表示依赖上一期的收益率冲击。说白了,就是「昨天的波动 + 昨天的意外」共同决定今天的波动。

4. 三种信号怎么用?

我一般这样搭配:

信号类型 用途 时间尺度
历史波动率 判断当前波动处于历史什么分位 日线/周线
已实现波动率 实时监控波动变化,触发风控 分钟级
波动率聚类 预测未来短期波动趋势 小时级/日级

举个例子:当HV处于历史低位,RV突然飙升,同时GARCH模型预测未来波动率会持续偏高——这就是一个典型的「波动率爆发」信号。这时候我会减仓,或者改用更宽的止损。

一句话总结:历史波动率告诉你「过去有多浪」,已实现波动率告诉你「现在有多浪」,波动率聚类告诉你「接下来还会不会浪」。

5. 知识体系图

下面这张图展示了三种波动率信号的关系和应用链路:

波动率信号知识体系 历史波动率 (HV) 已实现波动率 (RV) 波动率聚类 20日标准差年化 日内收益率平方和 GARCH模型 应用:波动率择时 · 动态止损 · 仓位管理 时间尺度:HV(日线)→ RV(分钟级)→ 聚类(小时/日级) 三者结合使用,效果远好于单一指标

你看这张图,三个信号从不同维度描述波动率。HV告诉你历史位置,RV告诉你实时状态,聚类告诉你未来趋势。三者结合,才能构建一个完整的波动率信号体系。

最后说一句:波动率信号不是万能的。它不能预测方向,也不能保证盈利。但它能帮你控制风险——而控制风险,才是量化交易活下去的根本。