隐含波动率冲到极端的那天,是卖期权的最好时机吗?
数据:六只有上市期权的 exchange-traded fund(ETF,交易所交易基金):50ETF、300ETF、500ETF、创业板ETF、科创50ETF、深100ETF。每一个随后 30 天已经结束的交易日,2015-05 至 2026-08:2,742 个日期上的 7,631 个样本。预测检验:135 个日期上的 387 个样本,大约每 30 天一个。来源:新浪日线收盘价和 QVIX 隐含波动率指数,均通过 AKShare 获取;平值隐含波动率由 QVIX 加上每只 ETF 一个固定差值估算,差值用本站的期权链数据测得。
只有事后看才是。 在一次隐含波动率极端行情的峰值当天卖出期权,赚得最多。但当天没有人知道那就是峰值。按当时能知道的信息,在隐含波动率仍在创新高时卖出,是这段样本里最差的时机;等它停止上涨约两周后再卖,是最好的时机,但优势不足以证明。
- +13.1 对 +4.0 个波动率点:在 11 次极端行情的峰值当天卖出,对比 20 个交易日后再卖。峰值只有事后才知道。
- +2.9 对 +4.4:在隐含波动率第一次越过“当天就能知道的极端线”那天卖出,对比 10 天后再卖(5 次行情,全部在 2024 年及以后)。最大亏损 −38 点正出现在当天。
- −1.3 点:隐含波动率处于高位、并且创出 60 日新高的日子的平均值,尾部最差。峰值后第 10–19 天则是 +4.3。
- 13.2 倍对 7 倍预算:亏了就加倍(1 倍、2 倍、4 倍)在极端行情里赢了,但在更大范围的测试中,最差的起点需要第一轮保证金的 13.2 倍,最终亏掉 3.7 倍。
- 0.95 × 平值隐含波动率:对下个月已实现波动率更好的预测,本站将用它取代“隐含波动率 − 1 点”。
- 不设“刚刚飙升”惩罚:事先定好的检验(2015–2020 年拟合,2021–2026 年检验)不支持它。
问题是什么
期权卖方赚到的溢价,是 implied volatility(IV,隐含波动率,即今天期权价格里包含的波动率)减去随后 30 个自然日的 realised volatility(RV,已实现波动率),单位是 vol point(波动率点,1 点 = 1 % 年化波动率)。波动率溢价研究发现,这个溢价平均来看小而为正;文献综述解释了它从哪里来。
A 股的隐含波动率有上限:涨跌停(±10 %,创业板ETF 和科创50ETF 为 ±20 %)限制了 ETF 的移动速度,已实现波动率不会像其他市场那样失控。那么当隐含波动率飙升时,它冲到极端的那天是不是最好的卖出日?还是等几周更好?高隐含波动率能多赚单位风险的收益,还是只多赚波动率点?
设定。 这里的隐含波动率用每只 ETF 公开的 QVIX 指数(类似 VIX 的 30 天隐含波动率),再减去每只 ETF 一个固定差值(0.5–2.2 点),换算成 at-the-money(ATM,平值)隐含波动率的估计值,也就是本站从期权链读取的那个隐含波动率。极端指 QVIX 进入它自身历史的最高 2 %;相隔不到 20 个交易日的读数算同一次行情,几只 ETF 的峰值相距 20 个交易日以内时只算一次(那是同一个市场事件)。这样得到 11 次独立的极端行情:2015-06-29、2015-08-26、2020-02-03、2020-03-17、2020-07-06、2022-10-24、2024-02-05、2024-10-08、2025-04-07、2026-03-23 和 2026-07-30。
分组、阈值、训练期与检验期以及候选惩罚项,都在计算任何结果之前写定。看到结果之后才加入的内容,出现时都有标注。
QVIX 从未到过 100:50ETF 的最高值是 63.8(2015-08-26),只有科创50ETF 接近过(97.4,2024-10-08)。“50ETF 隐含波动率 100”是盘中或单个期权的数字,不是 30 天指数。
事后信息的阶梯
同一个问题,用越来越少的事后信息来问。每一行是一种认定“极端那天”的方法;各列是当天卖出、或 5、10、20 个交易日后卖出的平均溢价(波动率点,平值隐含波动率)。“等待更好”统计晚卖赚得更多的行情次数。
| 卖出日 | 行情数 | 当天 | +5 | +10 | +20 | 等待更好(+5 / +10 / +20) |
|---|---|---|---|---|---|---|
| 行情峰值(只有事后才知道) | 11 | +13.1 | +7.1 | +6.3 | +4.0 | 11 次中 4 / 3 / 2 |
| 第一次越过全部历史的最高 2 % 线 | 11 | +9.2 | +8.0 | +6.0 | +4.6 | 11 次中 4 / 5 / 5 |
| 第一次越过当天就能知道的最高 2 % 线 | 5(2024 年起) | +2.9 | +3.2 | +4.4 | +3.7 | 5 次中 2 / 2 / 2 |
| 隐含波动率处于高位(分位数 ≥ 0.70)且创 60 日新高的任一天 | 122 个日期上的 250 天 | −1.3 | — | — | — | — |
- 第 1 行需要未来信息。 峰值当天,你并不知道明天隐含波动率不会更高。
- 第 2 行仍然需要:最高 2 % 线用了全部历史,包括之后的年份。
- 第 3 行才是卖方当时能交易的:这条线是截至当天所有读数的最高 2 %。只有 5 次行情符合,全部在 2024 年及以后(每个序列先要积累约一年的读数,而 50ETF 的线被 2015 年抬得很高)。这里当天卖出没有任何优势,最差结果是 −37.8 点,前两行分别只有 −6.2 和 −9.5。
- 第 4 行看的是每一个交易日,不只是极端行情:隐含波动率处于高位、刚创出 60 日新高的日子,平均为 −1.3 点,最差 5 % 的平均是 −55.9。

在隐含波动率极端时卖出:峰值当天(0)或之后卖出赚到的溢价,11 次独立行情。第 0 天只有事后才知道。
按距峰值的天数。 在隐含波动率处于高位(过去一年分位数 ≥ 0.70)的每个交易日,按距过去 60 个交易日隐含波动率最高点的交易日数统计溢价。95 % 置信区间来自 block bootstrap(分块自助法):整段 3 个月的日期一起重抽样,因为相互重叠的 30 天窗口和同涨同跌的六只 ETF 会让普通误差线窄得多。
| 距峰值天数 | 0 | 1–2 | 3–5 | 6–9 | 10–19 | 20–39 | 40–59 |
|---|---|---|---|---|---|---|---|
| 平均,波动率点 | −1.3 | +0.4 | +1.1 | +1.4 | +4.3 | +2.5 | +1.8 |
| 95 % 区间 | −7.1 … +4.9 | −3.0 … +5.6 | −2.2 … +5.4 | −2.6 … +5.5 | +1.7 … +6.0 | −2.2 … +6.3 | −3.6 … +6.1 |
| 平均 ÷ 标准差 | −0.07 | +0.04 | +0.10 | +0.10 | +0.47 | +0.22 | +0.21 |
| 最差 5 % 的平均 | −55.9 | −23.5 | −24.5 | −45.2 | −18.3 | −26.5 | −19.1 |
10–19 天这一档是七档之一,是看完全部结果后才注意到的。应该把这一行当作形状来读(峰值当天最差,隐含波动率回落后更好),而不是一个可以直接交易的数字。

在隐含波动率处于高位时卖出,按距 60 日峰值的交易日数。左:溢价(波动率点)。右:不对冲的卖出跨式,占所收权利金的 %。
2015 年:陷阱
2015-06-29,在 6 月见顶后的暴跌中,50ETF 的 QVIX 升到约 60,看上去就是极端。那天卖出,随后 30 天亏 6 点;一个月后(20 个交易日)再卖,亏 26 点。真正的顶部在 2015-08-26(QVIX 64),那时卖出赚了 +22 点。
极端只有事后看才像极端。当隐含波动率处于高位且仍在上升时,下一次冲击可能把它推得更高,而卖波动率的头寸正好承受这一击。
亏了就加倍?
这个问题是在知道上面的结果之后提出的:在极端那天卖出,如果亏了就把仓位加倍,最多三轮:第一轮用 1 倍资金,然后 2 倍、4 倍,一共是第一轮资金的 7 倍。这就是 martingale(马丁格尔策略,每次亏损后加倍下注)。这样还能赢吗?
在这些极端行情里它赢了,但 5 次或 11 次行情看不出它会怎样输。更大范围的测试显示了输法:6 % 的起点突破了 7 倍的预算,最差的一个需要第一轮保证金的 13.2 倍,最终亏掉第一轮保证金的 3.7 倍。
规则,在计算这些结果之前写定:
- 第一轮在第一次收盘高于“最高 2 %”极端线的那天,卖出一份平值跨式(同一行权价的一个看涨和一个看跌),30 天到期。
- 当整个头寸的亏损达到已收权利金的 50 %,并且距上一次卖出至少 3 个交易日时加仓,按当天的隐含波动率卖出,每轮各自 30 天到期。每轮按交易所保证金定规模:第二轮是第一轮保证金的 2 倍,第三轮是 4 倍。
- 每天收盘时,用 Black–Scholes 按当天的平值隐含波动率给未到期的各轮估值,并按上海证券交易所(SSE)卖出期权的保证金公式重算保证金。
- 对照组:只卖一次(1 倍);在马丁格尔的加仓日期等量卖出(1-1-1);分批入场(第一天三分之一,隐含波动率比高点低 10 % 时三分之一,高点已过去 10 个交易日时再三分之一)。
“3 次加仓”按字面理解是 1 + 2 + 4 + 8 = 15 倍。在这些行情里第四轮从未触发,所以 15 倍与 7 倍的结果相同。
在极端行情里。 盈亏以第一轮权利金的倍数计;“每元保证金”是总盈亏除以投入过的全部保证金。
| 极端线 | 行情次数 | 马丁格尔 7 倍:合计 / 盈利次数 / 最差 | 只卖一次 | 等量 1-1-1 | 分批 | 每元保证金:马丁格尔 / 只卖一次 | 峰值保证金,第一轮的倍数 |
|---|---|---|---|---|---|---|---|
| 当天就能知道 | 5(2024 年起) | +2.1 / 5 次中 4 次 / −0.09 | −0.34 | +0.10 | −0.28 | +5.6 % / −1.1 % | 5.8 |
| 全部历史(事后) | 11 | +9.6 / 11 次中 10 次 / −0.09 | +1.0 | +5.0 | +2.1 | +9.4 % / +3.2 % | 7.04 |
- 为什么赢了: 加仓是在大波动之后触发的。加仓时的隐含波动率更高(2024 年 9 月:从 41 点升到 57 点),而飙升之后价格通常会回来。这和上面峰值后第 10–19 天那一档是同一个“峰值之后再卖”的效应,加倍只是把大部分资金放在了那里。
- 结果取决于触发条件。 如果改为隐含波动率上升 5 点就加仓,而不是亏损后加仓,用当天就能知道的极端线时,马丁格尔亏掉 3.2 份权利金(最差的一次行情 −4.8)。
更大范围的测试。 风险在尾部,而这些行情没有触及尾部。所以把同样的头寸从每一个“隐含波动率处于高位(分位数 ≥ 0.70)并且创出 60 日新高”的日子开始:122 个日期上的 250 个 ETF 日。一次飙升会产生好几个相互重叠的起点,所以这是描述,不是证明。
| 策略 | 平均,第一轮权利金的倍数 | 盈利占比 | 最差 | 峰值保证金,第一轮的倍数 | 超出预算(7 倍或 15 倍)的起点 |
|---|---|---|---|---|---|
| 马丁格尔 1-2-4(7 倍) | +0.20 | 80 % | −20.4 | 13.2 | 6.0 % |
| 马丁格尔 1-2-4-8(15 倍) | +0.50 | 82 % | −18.0 | 15.2 | 0.8 % |
| 只卖一次 | −0.06 | 60 % | −5.6 | 3.5 | — |
| 等量 1-1-1 | −0.05 | 70 % | −14.4 | 7.4 | — |
| 分批 ⅓-⅓-⅓ | −0.05 | 58 % | −4.1 | 2.4 | — |
- 最差的起点: 创业板ETF,2024-09-11 卖出,09-26 和 10-08 加仓,正好撞上 2024-09-30 前后的大涨。它亏掉第一轮权利金的 20 倍,即第一轮保证金的 3.7 倍。一次这样的亏损抵掉 25 次平均盈利。
- 10-08 那天,这个头寸需要第一轮保证金的 13.2 倍。光是两轮未到期的仓位就要约 9 倍,所以按 7 倍准备资金的账户,在能下 4 倍那一轮之前就会被追加保证金。

亏了就加倍:从每一个隐含波动率处于高位并创 60 日新高的日子开始(250 个起点)。左:每个起点的盈亏。右:马丁格尔需要的保证金与 7 倍预算的对比。
结论:亏了就加倍并不会创造优势。 它把一点小优势变成很多次小赚,加上偶尔一次超出预算的大亏。如果确实要在亏损后加仓,每次加仓的规模应按它在最坏时点可能需要的保证金来定(在这次测试中,单独一轮就达到过自身初始保证金的 3.5 倍),而不是简单加倍。
本节的注意事项:
- 只是个案。 5 次(当天就能知道的极端线)和 11 次(事后)行情;更大范围的测试是 122 个日期上 250 个相互重叠的起点。没有给出置信区间。
- 估值没有考虑偏斜。 未到期的各轮按当天的平值隐含波动率估值。在下跌中,看跌期权会被估得过低,所以亏损、加仓时点和峰值保证金都是下限。
- 只看收盘,不计成本。 保证金只在收盘时检查(盘中追加保证金会来得更早);不计买卖价差和手续费。没有模拟追加保证金:超出预算的头寸在这里继续持有,所以真实亏损更大(会在最差的时点被强制平仓)。
- 保证金按单腿计算。 没有用交易所对卖出跨式两条腿的保证金优惠,所以突破预算的情况略有高估。
高隐含波动率能多赚单位风险的收益,还是只多赚波动率点?
研究把每个交易日分进事先定好的组:高位(分位数 ≥ 0.70)再分为刚飙升(60 日隐含波动率峰值在最近 5 个交易日内,或 5 日涨幅处在过去一年涨幅的最高 10 %)和已回落(峰值在 10 个或更多交易日之前);中位;以及低位(分位数 ≤ 0.20)。“平均 ÷ 标准差”是平均溢价除以它的波动,即单位风险的溢价。
| 组 | 样本 / 日期 | 平均,波动率点 | 平均 ÷ 标准差 | 标准差 | 最差 5 % 的平均 |
|---|---|---|---|---|---|
| 高位、刚飙升 | 1,025 / 447 | +0.2(−3.0 … +4.2) | +0.02 | 14.0 | −39.0 |
| 高位、已回落 | 1,326 / 666 | +3.0(−0.3 … +5.8) | +0.34 | 8.7 | −18.5 |
| 全部高位 | 2,567 / 1,063 | +1.8(−1.0 … +4.7) | +0.16 | 11.5 | −29.6 |
| 中位 | 3,503 / 1,477 | +0.1(−3.0 … +2.1) | +0.01 | 11.5 | −36.8 |
| 低位 | 1,561 / 922 | +0.7(−1.0 … +2.1) | +0.10 | 6.6 | −20.4 |
括号内是 95 % 区间,来自 3 个月分块自助法。
- 多赚波动率点:是的,多一点。 全部高位减中位 = +1.7 点(−1.3 … +4.9)。
- 多赚单位风险的收益:没有证据。 平均 ÷ 标准差是 0.16 对 0.01,但差值 +0.15 的区间是 −0.20 … +0.42。高隐含波动率的结果也波动得更厉害。
- 多出来的部分全在“已回落”的日子里。 刚飙升减已回落 = −2.7 点(−5.5 … +1.0);92 % 的自助抽样结果中刚飙升低于已回落。这个排序并不稳固:在 21 个平移过的日期网格上,已回落有 20 个胜过中位,刚飙升只有 12 个;在波动率溢价研究的网格(每 30 天一个样本)上,两者的排序甚至反过来。
- 不对冲的卖出跨式看起来不一样:高隐含波动率之后它赚到权利金的 +16 %,中位组是 −14 %。这个差距来自价格路径,不是波动率溢价:高隐含波动率之后,30 天的价格变动只有已实现波动率所对应幅度的 0.64–0.79 倍(价格回摆),平静的月份之后则是 1.22–1.33 倍(价格单边走)。本站的优势模型是对冲后结构的波动率溢价,所以以波动率点计的那几行才是相关的。

按隐含波动率分组的随后 30 天,每个交易日,带 95 % 分块自助法区间。橙色行:隐含波动率高位;蓝色行:中位和低位。
预测:用 0.95 × 隐含波动率取代“隐含波动率 − 1 点”
波动率预测研究保留了对下个月已实现波动率的简单预测 平值隐含波动率 − 1 点。这项研究检验了它的形式。1 点的常数溢价在隐含波动率 12 % 和 60 % 时一样大;隐含波动率的倍数则随隐含波动率增大。
在波动率溢价研究的网格上做样本外检验(每只 ETF 大约每 30 天一个样本;每次预测只用已经结束的窗口拟合):共 363 个预测。RMSE 是 root mean square error(均方根误差),单位波动率点;log-RMSE 是对 log(RV ÷ 预测) 算的同一指标;QLIKE 是对方差算的一种损失,会重罚预测偏低。Diebold–Mariano(DM)t 逐日比较每种形式与“隐含波动率 − c”的误差:t > 0 表示该形式更好,通常要到 2 左右才算显著。
| 下个月已实现波动率的预测 | 拟合值(全部数据) | 偏差 | RMSE | log-RMSE | QLIKE | DM t(RMSE / log / QLIKE) |
|---|---|---|---|---|---|---|
| 隐含波动率 − c(现在的形式) | c = 1.08 点 | +0.32 | 9.68 | 0.389 | 0.455 | — |
| k × 隐含波动率,k = 已实现波动率均值 ÷ 隐含波动率均值 | k = 0.950 | +0.30 | 9.60 | 0.381 | 0.413 | +2.34 / +1.62 / +1.53 |
| k × 隐含波动率,最小二乘 | k = 0.925 | +0.74 | 9.56 | 0.377 | 0.418 | +1.87 / +1.78 / +1.49 |
- k × 隐含波动率在每种损失上都胜过“隐含波动率 − c”。 只有平方误差的 t 超过 2。在 21 个平移日期网格中的 21 个上,它的 log-RMSE 也更低(RMSE 更低的有 14 个)。
- k 很稳定:2020 年之前 0.954,2021 年起 0.950。分 ETF 看,从 0.92(500ETF)到 1.02(创业板ETF,按平值口径看不到溢价)。
- 为什么用“已实现波动率均值 ÷ 隐含波动率均值”而不是最小二乘: 最小二乘更看重高隐含波动率的月份,平均会把已实现波动率预测低 0.7 点,在 Kelly 仓位计算里会高估卖方的期望收益。这个版本是看到结果后才加入的;平均来看它没有偏差。
- 拟合的直线 a + b·隐含波动率(b ≈ 0.78)RMSE 更低,但在 log 和 QLIKE 上更差,斜率也不稳定(300ETF 上只有 0.43)。它意味着隐含波动率约 17 % 时没有溢价、更低时溢价为负,而低位组实际赚到 +0.7 点,67 % 的日子为正。
本站将采用它: 预测从平值隐含波动率 − 1 点改为 0.95 × 平值隐含波动率,即溢价为隐含波动率的 5 %:
| 平值隐含波动率 | 12 % | 15 % | 20 % | 30 % | 40 % | 60 % |
|---|---|---|---|---|---|---|
| 现在的溢价(隐含波动率 − 1 点) | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| 0.95 × 隐含波动率下的溢价 | 0.6 | 0.75 | 1.0 | 1.5 | 2.0 | 3.0 |
在样本的平均隐含波动率(约 20 %)附近两者一致。评分仍然要除以风险,所以高隐含波动率的交易按波动率点得到更多优势,但比值并不更好,这正是数据显示的情况。

用全部 387 个样本拟合的三种预测形式。采用的 0.95 × 隐含波动率没有画出:低隐含波动率时它贴近蓝线,高隐含波动率时位于蓝线和橙线之间。
不设“刚刚飙升”惩罚
其他市场的研究发现,刚刚跳升的隐含波动率往往低估随后的已实现波动率,所以预测可以在这些日子加一个惩罚。研究事先定好了六个候选触发条件,都要求隐含波动率分位数 ≥ 0.70:60 日隐含波动率峰值在最近 5、10、15 或 20 个交易日内;5 日涨幅处在最高 10 %;以及隐含波动率高于它过去各月水平的一个缓慢更新的平均值。每个条件都作为一项加进 RV = a + b·IV + c·触发 来拟合。
- 在 2015-05 至 2020-12 上拟合,最好的触发条件是“隐含波动率峰值在最近 5 个交易日内”:c = +3.1 点,即多出的已实现波动率(−3.2 … +6.9)。区间包含零,第一关就没过。
- 在 2021-01 至 2026-08 上检验:c = +2.4(−2.2 … +5.9),符号相同,但加了惩罚的预测输给了不加的预测(DM t −1.59):在那些被标记的日子里,卖方赚得更多而不是更少。
- 反过来拟合(用 2021 年起的数据拟合、用更早的年份检验),胜出的是另一个触发条件,而且符号反转。
- 用全部数据:+2.6 点(−1.3 … +5.3)。
所以预测不加飙升惩罚。两个半段的符号都与文献一致,值得在再积累约两年数据后重新检验。
本站据此做什么
- 不给极端那天加分。 在峰值卖出是事后的结论;按当时能知道的信息,高位且仍在上升的隐含波动率是这段样本里最差的卖出时点。
- 预测改为 0.95 × 平值隐含波动率,各 ETF 共用一个 k,每年重新拟合。
- 不设飙升惩罚:事先定好的检验不支持它。
- 一个实用的读法,而不是检验过的规则: 当隐含波动率处于高位且仍在创新高时,等它停止上涨约两周再说。
局限与注意事项
- 样本小。 历史大约相当于 135 个有效月份;11 次独立极端行情,其中只有 5 次可以用当天就能知道的线来判断,而且全部在 2024 年及以后;11 次里有 5 次只是一两天的飙升。2015–2019 年只有 50ETF,2023 年起六只 ETF 共同经历每一次事件,所以在一次危机中六个序列只算一个观测。没有任何一组在波动率点上的差异在 95 % 水平上显著。
- 平值隐含波动率是估计值。 它是 QVIX 加每只 ETF 一个固定差值,差值在一个平静的年份(2025 年 10 月至 2026 年 9 月)测得。在压力时期,QVIX 与平值隐含波动率的差距会随 skew(波动率偏斜)扩大,所以高位组和极端行情的平值溢价是上限。完整报告里的 QVIX 各行讲的是同一个故事。
- 2024 年之前没有买卖价差数据。 跨式组合用 Black–Scholes 按估计的平值隐含波动率定价,持有到期,不计手续费、保证金或提前平仓。在隐含波动率极端时,真实成交的价差很宽。
- 窗口相互重叠。 每天一个新样本,每个都往后看 30 天;所有区间都对 3 个月的日期分块重抽样,所有 ETF 一起,从不用标准差 ÷ √n。
- 阶梯的前两行含事后信息。 它们用的是全部历史的极端线;当时可知的那一行去掉了这一点,只剩 5 次行情。
- 看到结果之后才加入的: 阶梯里当时可知的那一行、k = 已实现波动率均值 ÷ 隐含波动率均值的形式、10–19 天这一档的突出地位,以及“亏了就加倍”这个问题(它的规则在计算它自己的结果之前写定)。
自己复现
下面的脚本用公开数据重建本页的数字,不需要账号或密钥,只有一个固定输入例外:平值隐含波动率的差值。
数据(免费,通过 AKShare):
| 内容 | AKShare 函数 | 起始 |
|---|---|---|
| ETF 日线收盘价(新浪,不复权) | fund_etf_hist_sina("sh510050") 等 | 各 ETF 上市起 |
| 跟踪指数收盘价,只用来识别份额拆分 | stock_zh_index_daily("sh000016") 等 | — |
| QVIX 日线收盘 | index_option_50etf_qvix()、_300etf_、_500etf_、_cyb_、_kcb_、_100etf_ | 2015-02-09(50ETF)至 2023-06(科创50) |
唯一的固定输入。 平值隐含波动率 = QVIX + 每只 ETF 一个差值:2025-10-01 至 2026-09-29 期间(本站平值隐含波动率 − QVIX)的中位数。本站的平值隐含波动率来自不公开的期权链数据,所以这六个差值直接写在脚本里:50ETF −1.79、300ETF −2.19、500ETF −0.52、创业板ETF −1.14、科创50ETF −2.02、深100ETF −1.43 点。
当时可知的特征(只用当天及之前的读数):
hist = qvix[day - 365 days : day] # 含当天
iv_pct = hist 中(经 2 倍标准差过滤后)<= 当天的比例 # 本站的隐含波动率分位数
last60 = qvix[-60:] # 最近 60 个读数
days_since_peak = max(last60) 的位置,从当天往回数(0 = 当天;相同时取最近的)
溢价,对 t 日卖出:100 * (atm_iv[t] - rv_next_30_days[t]),RV 是 (t, t + 30 个自然日] 内每个交易日收益的收盘到收盘波动率,用 √252 年化。
极端行情: QVIX ≥ 它自身的第 98 百分位(用全部历史;当时可知的那一行用 qvix.expanding(min_periods=250).quantile(0.98));相隔不到 20 个读数的越线算同一次行情;几只 ETF 的峰值相距 20 个交易日以内时算一次独立行情,结果先在它的各只 ETF 间平均。
预测形式,每个日期只用已经结束的窗口拟合:
closed = df["origin"] + pd.Timedelta(days=30) <= t
c = (iv[closed] - rv[closed]).mean() # 隐含波动率 - c
k = rv[closed].sum() / iv[closed].sum() # k x 隐含波动率,k = RV 均值 / IV 均值
forecast_today = max(k * iv_today, 0.01)
置信区间: 按卖出日所在的自然月做 moving-block bootstrap(移动分块自助法),每块 3 个月,2,000 次抽样,种子 11;每个统计量都由按月汇总的和重建,同一个月里的所有 ETF 一起移动。
运行:
pip install -r requirements.txt
python iv_timing.py --cache-dir data # 只下载一次,之后几秒钟
python iv_timing.py --end none # 包含发布之后的数据
这些 CSV 与波动率预测脚本的相同,所以一个 --cache-dir 两个脚本都能用。
本页与脚本对照。 2026 年 10 月 12 日运行,研究保存的数据和重新从 AKShare 下载的数据都试过,截至 2026 年 9 月 30 日(默认的 --end):
| 数字 | 本页 | 脚本 |
|---|---|---|
| 有分组的样本 / 日期 | 7,631 / 2,742 | 7,631 / 2,742 |
| 峰值:当天 / +5 / +10 / +20 | +13.1 / +7.1 / +6.3 / +4.0 | +13.1 / +7.1 / +6.3 / +4.0 |
| 第一次越线 | +9.2 / +8.0 / +6.0 / +4.6 | +9.2 / +8.0 / +6.0 / +4.6 |
| 当天可知的线(当天最差) | +2.9 / +3.2 / +4.4 / +3.7(−37.8) | +2.9 / +3.2 / +4.4 / +3.7(−37.8) |
| 2015-06-29:当天 / +20;2015-08-26:当天 | −6 / −26;+22 | −6.2 / −25.8;+21.7 |
| 距峰值 0 天 / 10–19 天 | −1.3 / +4.3(+1.7 … +6.0) | −1.3 / +4.3(+1.7 … +6.0) |
| 全部高位 / 中位:平均,平均 ÷ 标准差 | +1.8,0.16 / +0.1,0.01 | +1.8,0.16 / +0.1,0.01 |
| 平均 ÷ 标准差的差值 | +0.15(−0.20 … +0.42) | +0.15(−0.20 … +0.42) |
| k = RV 均值 ÷ IV 均值:全部 / 2020 年前 / 2021 年起 | 0.950 / 0.954 / 0.950 | 0.950 / 0.954 / 0.950 |
| 对“隐含波动率 − c”的 DM t;更好的网格数(log) | +2.34;21 个中 21 个 | +2.34;21 个中 21 个 |
| 飙升惩罚:训练 / 检验 c,DM t | +3.1 / +2.4,−1.59 | +3.1 / +2.4,−1.59 |
容差: 每个数字都与显示的最后一位一致。在同样的数据上,可以预期误差在 ±0.1 波动率点以内。数据提供方可能修订旧数据,--end none 会加入发布之后结束的月份;两者都会让每个数字略有变动,全部历史的极端线和行情次数也可能改变。跨式和方差的结果、亏了就加倍的头寸、其他状态变量、带截距或取 log 的预测形式,以及图表,都在完整研究里,不在脚本中。
下载脚本
独立的 Python 脚本,只使用公开数据(AKShare)。先安装 requirements.txt 中的依赖,再运行脚本。