3、波动率环境识别

做市这行,说白了就是跟波动率打交道。你连对手的脾气都摸不清,怎么赚钱?

我个人习惯,每天开盘前先花五分钟看看波动率环境。这五分钟,能帮我省下后面五小时的麻烦。今天我们就聊聊怎么识别波动率环境——低波动、高波动、突变,还有那个让人头疼的聚类效应。

3.1 低波动率环境特征

低波动率环境,我称之为「温水煮青蛙」阶段。市场看起来风平浪静,但往往是大行情的前夜。

具体特征有哪些?

  • 日内振幅收窄:比如BTC,平时日内波动3%-5%,现在连续几天只有1%以内
  • 订单簿深度增加:买卖盘口挂单量变大,价差收窄。做市商都在抢着吃这口饭
  • 成交量萎缩:没人交易了,流动性都躲起来了
  • 隐含波动率低于历史波动率:期权市场在告诉你,大家预期未来会更平静

核心指标:我一般用20日滚动波动率,如果低于历史30%分位数,就标记为低波动环境。

我在项目中遇到过一件事。有一次ETH连续三天波动率不到0.5%,我的做市策略还在按正常参数跑。结果第四天一根大阳线,库存直接亏了2%。嗯,从那以后我加了个低波动预警模块。

避坑指南:低波动率环境下,千万别盲目扩大做市规模。你以为风险小了,其实风险在积累。我曾经吃过这个亏,现在每次低波动都会主动缩窄报价宽度,降低库存敞口。

3.2 高波动率环境特征

高波动率环境,就是市场在「发疯」。这时候做市商最容易亏钱,但也最有机会赚钱。

特征很明显:

  • 日内振幅剧烈:动不动5%以上,甚至10%
  • 订单簿变薄:流动性提供者纷纷撤单,价差拉大
  • 成交量暴增:恐慌盘和抄底盘同时涌入
  • 隐含波动率飙升:期权价格贵得离谱
指标 低波动 高波动
20日滚动波动率 < 30%分位数 > 70%分位数
日内振幅 < 1% > 5%
订单簿深度
价差

你想想看,高波动率的时候,你的做市策略该怎么调?我建议把报价宽度放大到平时的1.5-2倍,同时降低每个价位的挂单量。说白了,就是别跟市场硬刚。

警告:高波动率环境下,不要使用固定参数的做市策略。我见过太多团队,参数没调,结果一次黑天鹅事件直接爆仓。记住,波动率越高,你的风控阈值应该越紧。

3.3 波动率突变(Jump)的识别

波动率突变,就是市场突然「变脸」。前一秒还风平浪静,下一秒就狂风暴雨。

怎么识别?我常用的方法:

  1. 价格跳跃检测:连续两个tick的价格变化超过3个标准差
  2. 成交量异常:突然出现平时10倍以上的成交量
  3. 订单簿失衡:买卖盘口深度比例突然失衡,比如买盘深度是卖盘的5倍
  4. 波动率指数突破:比如DVOL(比特币波动率指数)突然突破前期高点
# 一个简单的跳跃检测函数
def detect_jump(price_series, window=20, threshold=3):
    returns = np.diff(price_series) / price_series[:-1]
    rolling_mean = np.mean(returns[-window:])
    rolling_std = np.std(returns[-window:])
    
    latest_return = returns[-1]
    z_score = (latest_return - rolling_mean) / rolling_std
    
    if abs(z_score) > threshold:
        return True, z_score
    return False, z_score

这个代码我用了好几年,简单但有效。不过要注意,阈值设得太低会频繁误报,设得太高又会漏报。我个人习惯设3倍标准差,但如果你做的是高频做市,可以降到2.5倍。

经验之谈:波动率突变往往伴随着流动性枯竭。我曾经在2021年5月19日那天,看到BTC价格在10分钟内跌了15%,订单簿几乎空了。这时候做市商最该做的是——暂停做市,等市场稳定再说。

3.4 波动率聚类效应

波动率聚类,说白了就是「祸不单行」。高波动率之后往往跟着高波动率,低波动率之后往往跟着低波动率。

为什么会这样?因为市场参与者的情绪会传染。恐慌引发更多恐慌,贪婪引发更多贪婪。

我一般用GARCH模型来捕捉这个效应:

from arch import arch_model

def fit_garch(returns):
    model = arch_model(returns * 100, vol='Garch', p=1, q=1)
    result = model.fit(disp='off')
    return result

# 使用示例
result = fit_garch(btc_returns)
print(result.summary())

GARCH模型的参数p和q,我一般设1,1就够用了。设多了反而过拟合,你想想看,做市策略又不是搞学术研究,够用就行。

核心逻辑:波动率聚类意味着,如果你今天看到高波动率,明天大概率也是高波动率。做市策略应该根据这个规律动态调整参数,而不是假设波动率会回归均值。

我记得有一次,BTC连续五天高波动率,我的策略在第三天就自动把报价宽度调到了最大。结果第四天波动率更高,但因为提前调整了,反而赚了钱。这就是利用聚类效应的好处。

知识体系总览

下面这张图,是我自己梳理的波动率环境识别框架。每次做策略调整前,我都会过一遍这个流程:

波动率环境识别框架 波动率环境识别 低波动率环境 高波动率环境 波动率突变 波动率聚类效应 特征: · 日内振幅收窄 · 订单簿深度增加 · 成交量萎缩 特征: · 日内振幅剧烈 · 订单簿变薄 · 成交量暴增 检测方法: · 价格跳跃检测 · 成交量异常 · 订单簿失衡 模型: · GARCH(1,1) · 滚动波动率 · 波动率指数 核心原则: 识别环境 → 调整参数 → 控制风险 → 动态迭代

这张图我每次做策略评审都会拿出来看一遍。四个维度缺一不可,少一个都可能出问题。

最后提醒一句:波动率环境识别不是一次性工作,而是持续的过程。我每天收盘后都会重新计算一遍这些指标,看看有没有变化。做市这行,最怕的就是「我以为」。

专注资料整理