halo 的技术博客

返回

问题:当一半的期权成交在当天到期#

2016 年,SPX 每周只有三个到期日。现在每个交易日都有当日到期的期权(0DTE,zero days to expiration),而且这类合约占 SPX 期权总成交量的比例已长期在 40%~50% 区间。

这不是简单的「换个到期日交易」。0DTE 改变了期权市场对现货市场的反馈结构,原因只有一个:

Gamma 在时间维度上的极端集中。

期权的 Gamma(delta 对标的价格的敏感度)随到期临近向平值处坍缩。一张一个月后到期的期权,Gamma 平摊在很宽的价格区间上;一张 4 小时后到期的期权,Gamma 是一根扎在行权价上的尖刺。做市商持有的每一张期权都需要 delta 对冲,Gamma 越尖,同样的价格变动逼出的对冲交易量越大。

0DTE 的流行等于把整个期权市场的对冲流从「温和的背景噪音」改造成「日内高频的机械洪流」。这篇文章用模拟把这套机制拆开:Gamma 集中到什么程度、对冲流如何改写日内波动结构、以及为什么同一天的市场可以既被压制又被引爆。

Gamma 的时间集中:5.8 倍只是开始#

先看最基础的事实。Black-Scholes 框架下 ATM 期权的 Gamma 近似正比于 1/(SσT)1/(S\sigma\sqrt{T})——剩余期限 TT 进了分母的平方根。

from scipy.stats import norm
import numpy as np

def bs_gamma(S, K, T, sigma, r=0.0):
    d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
    return norm.pdf(d1) / (S * sigma * np.sqrt(T))

# 同一张 ATM 期权,不同剩余期限
for label, T in [("剩4小时", 4/6.5/252), ("1天", 1/252),
                 ("1周", 5/252), ("1月", 21/252)]:
    print(label, round(bs_gamma(100, 100, T, 0.20), 4))
python

模拟结果(σ=20%,S=K=100):

剩余期限ATM Gamma 峰值相对 1 月期
剩 4 小时(0DTE)0.4045.8x
1 天0.3174.6x
1 周0.1422.0x
1 月0.0691.0x

不同期限的 Gamma 剖面

注意两点。第一,5.8 倍只是「早盘还剩 4 小时」时的快照——Gamma 随 T0\sqrt{T}\to 0 发散,到尾盘最后半小时,倍数还要再翻几倍。第二,Gamma 集中的同时宽度变窄:1 月期期权在 90~110 都有可观 Gamma,0DTE 的 Gamma 挤在 ±2 元以内。这意味着 0DTE 的对冲流是局部的、状态依赖的:价格在行权价附近时洪流汹涌,离开两块钱就迅速归零。

对冲流的方向:谁持有 Gamma 决定市场性格#

做市商的规则很机械:客户买期权,做市商就是卖方,持有负 Gamma;客户卖期权,做市商持有正 Gamma。然后 delta 对冲不看基本面,只看价格:

  • 做市商正 Gamma:价格涨 → delta 变正 → 需要卖出标的。价格跌 → 需要买入。对冲流高抛低吸,像阻尼器一样压制波动;
  • 做市商负 Gamma:价格涨 → 需要买入追涨,价格跌 → 需要卖出杀跌。对冲流顺势加压,像放大器。

我们用一个最小模型验证:78 根 5 分钟 bar,基本面冲击相同,对冲流对上一根 bar 的价格变动做滞后反应,价格冲击系数 λ=0.15、对冲强度 0.6,跑 800 条路径:

def simulate(gamma_sign, intensity):
    # gamma_sign=+1: 做市商正gamma(反向对冲) -1: 负gamma(顺向)
    prev_r = 0.0
    for i in range(n_steps):
        r_fund = shock[i]                          # 基本面冲击
        r_hedge = -gamma_sign * lam * intensity * prev_r  # 对冲流
        r = r_fund + r_hedge
        prev_r = r
python
场景5分钟收益自相关日频年化波动
无对冲流-0.01417.4%
正 Gamma(客户净卖 0DTE)-0.09817.0%
负 Gamma(客户净买 0DTE)+0.07419.6%

对冲流方向决定日内波动

关键读法:三组的基本面冲击分布完全相同,唯一区别是对冲流的符号。正 Gamma 日每一步价格变动都被部分「拉回」,产生负自相关,日频波动被压缩;负 Gamma 日每一步被「顺推」,产生正自相关,日频波动放大 15%。

对策略的直接含义:同一个市场,隔着做市商敞口的符号,动量策略和均值回归策略的适用性直接互换。正 Gamma 日做日内动量是在跟对冲洪流对着干;负 Gamma 日做均值回归是在接飞刀。

日内结构:尾盘的波动翘尾被 0DTE 改陡#

0DTE 有一个多日期权没有的特征:它的 Gamma 在一天之内完成从平缓到发散的全过程。早盘剩 6 小时,Gamma 还算温和;尾盘剩 30 分钟,ATM Gamma 爆表。这意味着 0DTE 的对冲流强度有一个内生的日内爬坡。

把经典的日内波动 U 形(开盘高、午盘低、尾盘翘)作为基线,叠加随 Gamma 剖面增强的 0DTE 对冲贡献(假设当日为负 Gamma 敞口):

尾盘 30 分钟相对波动强度数值
无 0DTE 对冲流1.36
0DTE 占比 30%1.65
0DTE 占比 50%1.85

0DTE 改造日内波动微笑

这与美股市场近年被反复讨论的现象一致:尾盘半小时的成交与波动占比上升,且大幅日内反转(或加速)更频繁地发生在 14:00 之后——那正是 0DTE Gamma 开始发散、做市商对冲误差容忍度归零的时段。

尾部:负 Gamma 日的大波动概率翻倍#

对风险管理者,最重要的输出是日收益分布的形状。用同一套基本面冲击跑 4000 个交易日,只切换敞口符号:

正 Gamma 日负 Gamma 日
日收益 σ1.03%1.24%
|r|>2% 概率5.22%11.25%

敞口方向改写日收益分布

同样的信息流,负 Gamma 日出现 2% 以上大波动的概率是正 Gamma 日的 2.2 倍。这就是「0DTE 加剧市场脆弱性」的准确表述——它不是每天都在放大波动,而是在客户净买入 0DTE、做市商被迫负 Gamma 的日子里,把本来 1.5% 的下跌加速成 2.5% 的下跌。2024 年 8 月 5 日的日元套息交易平仓日、以及多次 CPI 发布日的 V 形反转,都被广泛归因于这类对冲流的临界放大。

反过来,在平静期客户以卖出 0DTE 收权利金为主,做市商正 Gamma,指数呈现「阴跌不动、波动极低」的钉住状态——这也是 2023-2024 年 VIX 长期低位的结构性解释之一。

怎么用:监测而非预测#

对量化交易者,0DTE 的正确打开方式是把做市商 Gamma 敞口当作 regime 变量

  1. 估计净敞口方向:从期权成交与持仓数据聚合 GEX(Gamma Exposure)剖面,定位 Gamma 翻转点。价格在翻转点上方按正 Gamma 环境处理,下方按负 Gamma 处理;
  2. 日内策略切换:正 Gamma 环境下均值回归胜率提升,负 Gamma 环境下动量与突破策略占优、且需放宽止损(波动被放大是结构性的,不是噪声);
  3. 尾盘风控:0DTE 占比高的日子,避免在最后 30 分钟挂大额市价单——你的对手盘里有一台不看价格、只算 delta 的对冲机器;
  4. 波动交易:负 Gamma 日的已实现波动系统性高于隐含定价时,买入日内跨式的期望改善;正 Gamma 日反之。

诚实边界#

方向不可直接观测。 GEX 计算依赖「客户买 call 卖 put」之类的符号惯例,散户爆买 call 的日子(meme 股、事件日)惯例整体算反。0DTE 恰恰是散户参与度最高的品种,符号误判风险最大。

OI 快照滞后。 0DTE 的持仓在日内从零建立、到收盘归零,隔夜 OI 数据完全失效,日内成交流推断有噪声。

放大是条件性的。 本文模拟中对冲强度、价格冲击系数都是外生常数;真实市场中做市商会调整对冲频率、用期权对冲期权,反馈强度在危机中非线性跳升、在平静期远低于模型。把 0DTE 当作「每天都在制造崩盘」是对机制的误读——它是干柴,不是火柴。

零日期权 0DTE 对市场波动结构的冲击
https://blog.halo26812.eu.org/blog/zero-dte-options-impact
Author halo
Published at 2026年7月29日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨