返回交易笔记
TR Day 68

VIX Term Structure 套利原理

VIX 指数 vs VIX 期货的本质区别 / term structure 形态 / VXX 衰减的数学来源 / 历史上 vol arb 是怎么把人打爆的

2026-07-16
Phase 3: 实盘+规模化+迁移
VIXTermStructureContangoBackwardationVXXUVXYVolArbitrageVolmageddon

日期: 2026-07-16 方向: Phase 3 / VIX Term Structure 阶段: Phase 3: 实盘+规模化+迁移 标签: #VIX #TermStructure #Contango #Backwardation #VXX #UVXY #VolArbitrage #Volmageddon


今日目标

类型内容
学习VIX 指数 vs VIX 期货的本质区别 / term structure 形态 / VXX 衰减的数学来源 / 历史上 vol arb 是怎么把人打爆的
实操拉 VIX、VIX3M 历史数据 + 算 term structure slope + 标 contango/backwardation regime + 简化版「contango steep 时 short VXX」回测
产出TR-DAY68 笔记 + vix_term_backtest.py + 「为什么 <$5k 个人不该实操这个」决策记录

一、为什么 Day 68 要花一整天讲 VIX term structure

Phase 3 Week 10 的主题是高阶期权策略,路线图原本是 Calendar / Diagonal / LEAPS,但跳到这些之前必须先讲 VIX term structure——原因有三:

  1. Calendar spread 的本质就是 term structure trade:一手卖近月、一手买远月,赚的是「近月 vega 衰减比远月快」 + 「IV 期限结构平稳期 mean revert」。不理解 VIX term structure,calendar 就是盲跑。
  2. 市场 vol regime 是所有期权策略的元变量:CSP 在 VIX = 12 和 VIX = 35 时是两种完全不同的交易,不是「同一个策略不同 premium」。
  3. Volmageddon 2018 / COVID 2020 / Russia 2022 三次事件几乎是同一个 pattern:contango decay 策略 → 长期赚小钱 → 一次性吐回三年利润 + 触发杠杆爆仓。这是个人量化必须知道的「不该做的事」。

一句话:Day 68 不是教你做 vol arb,是教你识别 vol arb 的诱惑形态,看懂为什么业内大佬做得、你不该做


二、VIX 体系全景

2.1 VIX 是什么、不是什么

VIX 是 CBOE 用 SPX 期权链算出来的未来 30 日 SPX 隐含波动率的年化估计。它不是历史波动率,不是 SPY 的 IV,是从 SPX option chain 用 model-free 公式(无需 BSM 假设)反推的 forward-looking 30D variance 的平方根。

简化公式(实际细节复杂得多):

σ²_VIX = (2/T) · Σ [ΔK_i / K_i²] · e^(rT) · Q(K_i)  -  (1/T) · (F/K_0 - 1)²

其中:
  T       = 到期时间(年化)
  K_i     = 行权价网格
  ΔK_i    = 行权价间距
  Q(K_i)  = 对应 OTM 期权的 mid price
  F       = forward index level
  K_0     = 第一个 ≤ F 的行权价

VIX = 100 · sqrt(σ²_VIX)

关键性质

  • VIX 是计算值,不是资产,不能直接交易(你不能 buy 100 shares of VIX)
  • 用的是 OTM put + OTM call 的全谱信息,所以 VIX 既反映「下跌恐慌」也反映「上涨追涨」——但实际 OTM put 权重远高,所以经验上 VIX ≈ 下跌恐慌指数
  • VIX 报价是年化 IV × 100,VIX = 15 意思是市场预期未来 30 天 SPX 年化波动率 15%(即日波动 ~0.94%)

2.2 VIX 家族:不同 expiry 的 forward IV

指标含义用途
VIX9D未来 9 日 SPX IV短期事件(FOMC / NFP / 大型财报周)敏感
VIX未来 30 日 SPX IV主指标
VIX3M (VXV)未来 90 日 SPX IV中期 vol 预期
VIX6M未来 180 日 SPX IV长期 vol 预期
VIX1Y未来 1 年 SPX IV极长期 vol,市场已经不太敏感

把这五个点画到 x = expiry / y = IV 的图上,就是 VIX term structure

2.3 Term structure 的两种形态

Contango(远期高于近期)——市场平稳期的常态,约 80% 时间

IV
 ↑
 |              ●  VIX6M
 |          ●      VIX3M
 |       ●         VIX
 |    ●            VIX9D
 |  ←———————→  expiry

直觉解释:30 天内市场觉得「应该没事」,但 6 个月这么长,谁知道会发生什么——所以远期 IV 自然要 price in 一个 risk premium。

Backwardation(近期高于远期)——危机期,约 20% 时间

IV
 ↑
 |  ●              VIX9D    ← 短期恐慌
 |    ●            VIX
 |       ●         VIX3M
 |          ●      VIX6M
 |              ●  VIX1Y
 |  ←———————→  expiry

直觉解释:「下周就要爆了」的恐慌定价压过了「长期 mean revert」的预期——历史上每次 backwardation 都意味着真实的 stress(2008、2011、2015、2018-02、2020-03、2022-02)。

2.4 Term structure slope 的定义

最常用的两个 slope 指标:

Slope_1 = (VIX3M - VIX) / VIX        ← 经典 contango ratio
Slope_2 = VIX3M / VIX                 ← VIX3M/VIX ratio(很多研究用这个)

Contango       : Slope_2 > 1.05  (中度 contango)
Strong Contango: Slope_2 > 1.15  (陡 contango,VXX decay 最猛)
Flat           : 0.95 < Slope_2 < 1.05
Backwardation  : Slope_2 < 0.95  (真实 stress 信号)

PM 视角:把 Slope_2 看作「市场情绪 regime indicator」比看 VIX 绝对值更有用——VIX = 18 在 contango 和 backwardation 下含义完全相反。


三、VIX 期货 vs VIX 指数:为什么 VXX 注定要衰减

3.1 VIX 期货存在的原因

VIX 不能直接交易(它是 model-free 算出的指标),但 CBOE 在 2004 年推出了 VIX futures,月度到期,结算价 = 到期日早晨的 special opening quotation(SOQ)。

VIX 期货的关键性质:

  • 每个合约对应一个未来到期月份(M1, M2, M3, …, M9)
  • 价格反映「市场对该月到期时 VIX spot 的预期」
  • 到期时收敛到 VIX spot(基差消失)

3.2 期货价格曲线 ≈ Term structure

VIX 期货按到期月份排列的价格曲线,形态和 VIX term structure 基本一致:

  • Contango 时:M1 < M2 < M3 < … < M7
  • Backwardation 时:M1 > M2 > M3 > … > M7

3.3 VXX 是什么

VXX = iPath Series B S&P 500 VIX Short-Term Futures ETN,跟踪 rolling M1+M2 VIX 期货组合,权重每天动态调整:

设当前距 M1 到期 d 天,M1 整个 cycle 长度 D 天
权重(M1) = d / D       (越接近到期 weight 越低)
权重(M2) = (D - d) / D

每天 VXX 卖一点 M1、买一点 M2,保持组合恒定到期日 ≈ 1 个月

3.4 关键:Contango 下 VXX 必然衰减

直觉:你每天卖低价的 M1、买高价的 M2,长期看就是高买低卖的 reverse arbitrage。

数学化:

设 contango ratio    r = F(M2) / F(M1) > 1
持有期 holding 1 day, roll yield ≈ -(r - 1) / D

举例:
  F(M1) = 18, F(M2) = 19  →  r = 1.0556
  D = 30
  Daily roll cost ≈ -0.185%
  Annualized      ≈ -38% (假设 contango 永恒)

真实历史数据:2010-2017(一段超长平稳期),VXX 年化 -53%,复利下来从 split-adjusted $7,000 跌到 $30 量级。这就是 contango decay。

用一句金融业行话:VXX 是一个 structurally short volatility 的产品,长期持有等于在 burning money。

3.5 VXX vs UVXY vs SVXY

产品杠杆方向典型用途风险
VXX1xLong VIX futures短期对冲 / 投机 vol spike长期衰减
UVXY1.5x(曾经 2x)Long VIX futures杠杆对冲衰减更猛
SVXY-0.5x(曾经 -1x)Short VIX futures收 contango decayTail risk 巨大
XIV-1xShort VIX futures收 contango decay已退市(2018-02 一夜 -90%)

四、经典 contango 套利 trade

4.1 策略的逻辑

核心命题:80% 时间 contango,VXX 每天衰减 → 短 VXX 长期赚钱。

历史数据支撑:

  • 2010-2017 VXX 年化 -53%,short VXX 年化 +50%+
  • Sharpe 看上去能到 1.5-2.0(平稳期)

4.2 几种实现方式

方式操作优点缺点
裸 short VXX 股票Short sell VXX简单unlimited upside loss + borrow fee 高
买 SVXY (-0.5x)Long SVXY不用 margin shortTail risk 同样巨大
VXX put 价差Long put spread on VXX损失有限premium 成本高,吃掉 edge
VIX futures 跨期套利Short M2 / Long M1直接捕捉 contango需要 futures 账户
VIX call 保护 + short VXXTail hedge 版本限制 max loss保护成本侵蚀年化

4.3 这个策略「平稳期」长什么样

2010-01 至 2017-12(96 个月):
  策略:每日 short $10,000 VXX,对冲 borrow,含手续费
  
  平均月收益:+3.8%
  最大单月回撤:-12% (2015-08 中国股灾外溢)
  Sharpe (含 borrow cost):~1.6
  
  累计净值:从 $10,000 → ~$95,000  (9.5x)

这就是诱惑——8 年时间,9.5 倍,Sharpe 1.6,几乎不需要思考。

4.4 然后 Volmageddon 来了


五、2018 Volmageddon:vol arb 是怎么把所有人打爆的

5.1 事件时间线

2018-02-02 (Fri): SPX -2.1%, VIX 13.5 → 17.3
2018-02-05 (Mon): SPX -4.1%, VIX 17.3 → 37.3
                  XIV 收盘价 $99 → $7.35 (盘后)
                  XIV 触发 acceleration event,正式宣布 termination
2018-02-06 (Tue): XIV 最后交易日,~$5 退市
                  SVXY 同期从 $138 → $11,跌 92%
                  VXX 当日 +33%, UVXY 当日 +83%

5.2 为什么会这样

根因:当 VIX 当日 spike,VIX futures 也 spike,M1/M2 期货价上涨。

XIV / SVXY 这类 inverse 产品每天收盘要 rebalance 维持 -1x 杠杆——VIX futures 涨越多,它们就必须买回更多 short 仓位,而这个 forced buying 本身又把 M1/M2 价格推高,形成正反馈

VIX 暴涨
  → VIX futures 暴涨
    → XIV / SVXY NAV 暴跌
      → 这些 ETN 必须 buy-to-cover short futures 仓位
        → buying pressure 进一步推高 VIX futures
          → NAV 再跌
            → 再 cover
              → ...

这个循环在 2018-02-05 收盘前 30 分钟集中爆发,VIX futures 单日交易量是平时的 5-10 倍。

5.3 数学:daily reset 的诅咒

Inverse / leveraged ETN 都有「daily reset」机制:每日收盘 rebalance 维持目标杠杆。这意味着路径依赖——即使 underlying 长期走平,反复震荡的产品会被「volatility drag」吃掉。

设 underlying 日收益 r_t,inverse 产品日收益 -r_t
经过 T 天,underlying 累计收益 ≈ Σr_t(小变动近似)
inverse 累计收益 ≈ Π(1 - r_t) - 1

如果 r 序列 = [+10%, -10%, +10%, -10%, ...]
underlying T=4 后:~0% 累计
inverse 收益:(0.9)(1.1)(0.9)(1.1) - 1 = -3.94%

震荡越剧烈,inverse 吃掉的越多。

VIX spike 时不仅是单日大跌,接下来 10-20 天的剧烈震荡会把 XIV / SVXY 进一步绞杀——即便后来 VIX 回落到 spike 前的水平,inverse 产品的净值也回不来。

5.4 多少钱被烧掉了

  • XIV 整个产品 $2B AUM,2018-02-05 一夜归零
  • SVXY 跌 92%,~$1B 损失
  • 多个短 VXX 散户账户被 margin call 强平
  • 部分专业 vol fund 因为 stop loss 触发损失 30-50%

这不是「策略失效」,是「策略本来就有这个 tail,只是这次 tail 兑现了」


六、其他几次 vol arb blow-up

时间触发事件VIX 当日变化短 vol 损失
2010-05Flash Crash25.6 → 40.9 (+60%)-30%
2015-08中国股灾 + 人民币贬值13.0 → 28.0 (+115%)-45%
2018-02Volmageddon13.5 → 37.3 (+177%)XIV -90%, SVXY -92%
2020-03COVID14.4 → 82.7 (+474%)-70%+, 多家 vol fund 关闭
2022-02俄乌战争 + 加息预期19.0 → 30.0 (+58%)-25%
2024-08日元 carry unwind16.0 → 38.6 (+141%)-40%

模式高度一致:长期平稳期 contango decay 赚钱 → 一个外生 shock 触发短期 backwardation → forced unwinding → 短 vol 仓位被打爆。


七、为什么 <$5k 个人不应该实操这个

7.1 数学上行不通

Kelly 公式简化版:
  最优仓位 f* = (mean return) / (variance)

短 VXX 历史参数:
  mean monthly return = +3.8%
  monthly stdev       = 8% (平稳期) / 但 tail 是 -90%

含 tail 的真实 mean = 3.8% × 0.95 + (-90%) × 0.05 / 12 ≈ -0.06% 月
                     (假设每 5 年一次 Volmageddon)

真实 Kelly f* ≈ 接近 0 甚至 negative

7.2 杠杆暴露

裸 short VXX:你的 max loss 理论上 unlimited。VXX 在 2020-03 从 $12 涨到 $69,+475%。如果你 short $1,000 不带止损,max loss = $4,750。

7.3 监控成本

要做 vol arb 安全版本必须:

  • 实时监控 VIX、VIX9D、VIX3M、VIX futures M1/M2
  • term structure slope 跌破阈值立刻平仓
  • 准备 OTM VIX call 作为 tail hedge(持续成本 -3% 到 -5% 年化)
  • 每天盯盘至少 1 小时

对一个全职上班的个人 PM,心理 + 时间成本远高于策略 edge

7.4 替代做法(如果一定要碰 vol)

做法仓位风险等级
方法 1:只在 VIX < 15 + Slope_2 > 1.15 时小仓位 short VXX<5% NAV
方法 2:买 OTM SPY put 作为永久 tail hedge(用利润支付)-1%/年
方法 3:不做 vol arb,只用 VIX 作为 regime indicator 切换其他策略0

对 <$5k 账户的明确建议:方法 3。Day 68 的产出是「会看 VIX term structure 切 regime」,不是「会做 vol arb」。


八、代码实现:拉数据 + 标 regime + 简化回测

8.1 拉历史数据(用 yfinance 免费数据源)

# vix_term_data.py
import yfinance as yf
import pandas as pd

# VIX, VIX3M, VXX 历史数据
tickers = ['^VIX', '^VIX3M', 'VXX']
data = {}
for t in tickers:
    df = yf.download(t, start='2010-01-01', end='2026-07-15', progress=False)
    data[t] = df['Close']

vix = data['^VIX'].rename('VIX')
vix3m = data['^VIX3M'].rename('VIX3M')
vxx = data['VXX'].rename('VXX')

df = pd.concat([vix, vix3m, vxx], axis=1).dropna()
df['slope'] = df['VIX3M'] / df['VIX']
df['regime'] = pd.cut(
    df['slope'],
    bins=[-float('inf'), 0.95, 1.05, 1.15, float('inf')],
    labels=['Backwardation', 'Flat', 'Contango', 'Strong_Contango']
)

print(df.tail(20))
print("\nRegime distribution:")
print(df['regime'].value_counts(normalize=True))

预期输出:

Regime distribution:
Contango           0.62
Strong_Contango    0.22
Flat               0.11
Backwardation      0.05

8.2 简化版「Strong contango 时 short VXX」回测

# vix_term_backtest.py
import pandas as pd
import numpy as np

# 接上面的 df
df['vxx_ret'] = df['VXX'].pct_change()

# 策略:前一日 slope > 1.15 时持有 short VXX 仓位
df['signal'] = (df['slope'].shift(1) > 1.15).astype(int)
df['strategy_ret'] = -df['signal'] * df['vxx_ret']  # short VXX

# 加入 borrow cost (年化 4% 折日)
borrow_daily = 0.04 / 252
df['strategy_ret_net'] = df['strategy_ret'] - df['signal'] * borrow_daily

# 加入 stop loss:单日跌 8% 立刻平仓后续 5 天不再开仓
def apply_stop_loss(returns, stop=-0.08, cooldown=5):
    out = returns.copy()
    skip_until = 0
    for i in range(len(out)):
        if i < skip_until:
            out.iloc[i] = 0
        elif out.iloc[i] < stop:
            skip_until = i + cooldown + 1
    return out

df['strategy_ret_final'] = apply_stop_loss(df['strategy_ret_net'])
df['nav'] = (1 + df['strategy_ret_final']).cumprod()

# 统计
annual_ret = df['strategy_ret_final'].mean() * 252
annual_vol = df['strategy_ret_final'].std() * np.sqrt(252)
sharpe     = annual_ret / annual_vol
max_dd     = (df['nav'] / df['nav'].cummax() - 1).min()

print(f"Annual return: {annual_ret:.2%}")
print(f"Annual vol:    {annual_vol:.2%}")
print(f"Sharpe:        {sharpe:.2f}")
print(f"Max drawdown:  {max_dd:.2%}")

# 分 regime 看
for regime in df['regime'].cat.categories:
    sub = df[df['regime'].shift(1) == regime]
    print(f"  {regime}: n={len(sub)}, mean={sub['strategy_ret_final'].mean()*252:.2%}")

8.3 预期输出(基于 2010-2024 数据)

Annual return:  +24.5%
Annual vol:     +47.2%
Sharpe:         0.52
Max drawdown:   -68%  ← 2020-03 + 2024-08

结论解读

  • Sharpe 0.52 听上去还行,但 47% 的年化 vol 对个人完全无法持有——账户每天波动相当于全年工资
  • Max DD -68% 意味着 $5k 账户瞬间变 $1.6k,而且发生在最恐慌的时刻(你最不想看账户的时候)
  • 即便加了 stop loss,单日 -8% 的硬性触发也会在快速跳空里失效(2020-03 VXX 单日 +24%)

九、Term structure 作为 regime indicator 的正确用法

不去 short vol,而是把 VIX term structure 当作其他策略的开关

Slope_2RegimeCSP(Wheel)Momentum 因子Calendar Spread
> 1.15Strong Contango加仓 OTM CSP标配开 short-near long-far calendar
1.05-1.15Normal Contango标配标配中性
0.95-1.05Flat减仓 50%标配不开新仓
< 0.95Backwardation暂停所有 short premium减仓 50%平掉所有 short vol calendar

核心 insight:vol regime 不是 alpha,是 risk filter。它告诉你「现在该不该做这种类型的交易」,而不是「现在该不该专门交易 vol」。


十、业内大佬都在做什么

10.1 JP Morgan / Marko Kolanovic 风格

Marko Kolanovic(前 JPM 全球市场策略首席,现已离开)是 vol arb 圈最有名的 "carry vs flight to safety" 策略框架:

  • 平稳期:collect carry(短 vol、短信用利差、短 USD 流动性)
  • 危机期:迅速 unwind + 反向 long tail
  • 关键能力:用 cross-asset signal(信用利差、外汇 carry、商品 backwardation)提前 1-2 周识别 regime 切换

普通个人完全做不了,因为:

  • 需要 multi-asset 实时数据(年订阅 $10k+)
  • 需要团队 24h 监控
  • 需要机构级 leverage 才能让 carry edge 有意义

10.2 LJM Preservation & Growth:另一个反面教材

LJM 是一只专门 short vol 的对冲基金,AUM 约 $800M。

2018-02-05  -56% 单日
2018-02-06  +30% 单日(反弹补回一些)
2018-02 月底 NAV -82%
2018-03 关闭清盘

LJM 的策略本质上就是「卖跨式 + 卖 strangle 收 premium」,平稳期 Sharpe 1.5+,一个事件归零

10.3 LongTail Alpha / Mark Spitznagel

反过来的玩法:专门买 tail,长期亏 1-3% 年化,但 vol spike 时 +1000%。Universa Investments(Spitznagel + Taleb)做的就是这个,作为机构客户的 tail hedge 配置。

对个人的启示:如果你真的喜欢 vol,应该考虑做 long tail 而不是 short tail——亏小钱赚大事件,比赚小钱亏大事件好太多。


十一、PM 视角:保险公司隐喻 + 迁移思考

11.1 「保险公司收 premium 直到暴风」

短 vol 策略 = 卖保险:

  • 平稳期:保险公司收 premium,账面利润漂亮
  • 大灾时:理赔金额超过过去十年累计 premium,破产清算

这个隐喻揭示一个机制设计层面的真理:任何「长期赚小钱,偶尔亏大钱」的策略,长期期望值取决于「偶尔有多偶尔」+「大有多大」

  • 真实保险公司:精算师定价 + 再保险 + 监管资本要求三层保护
  • 个人 vol arb:上面三层全都没有

11.2 迁移到金融产品设计

Day 68 让我重新审视过去做过的几个金融产品

  1. 零售消费金融的「秒批」业务:本质也是 short vol——平稳期审批通过率高、坏账低,但宏观下行时(如 2020 Q1)坏账率突然 5-10x,吃掉前几年所有利润。
  2. 保险公司财险定价:飓风险种平时收 premium,一次大飓风就要再保护出 6-7 成赔款——这就是为什么再保险(reinsurance)行业存在。
  3. 银行的存贷利差:表面 stable carry,实际是 short 流动性 vol——2008 Northern Rock / 2023 SVB 都是流动性 vol spike 一夜击穿。

统一规律:所有「赚 carry」的业务都是隐性 short vol,risk-adjusted return 必须按 tail 事件调整,否则就是会计幻觉。

11.3 这一天对个人交易的 take-away

主题take-away
直接的不做 short VXX;学会看 term structure 作为 regime indicator
Calendar 准备Day 69 开始的 calendar spread,本质是「短近月 vega、长远月 vega」,等于在 micro 维度 short term structure。要带着今天学的认知去做
跨策略把 Slope_2 加入所有期权策略的 daily checklist,backwardation 时强制减仓
元认知高 Sharpe + 平稳曲线不等于真实 edge——可能只是 tail risk 还没来

十二、今日 Checklist

  • (0) 读完这篇笔记
  • (1) 下载 VIX、VIX3M、VXX 历史数据:用 yfinance,存到 data/vix_term/
  • (2) 跑 vix_term_backtest.py:确认能复现 Sharpe ~0.5 + max DD -60%+ 的结果
  • (3) 计算当前 Slope_2:今天(2026-07-16)的 VIX/VIX3M 比值是多少?当前处于哪个 regime?
  • (4) 把 Slope_2 加进 Day 61-67 的 Wheel daily checklist:作为「是否新开 CSP 仓位」的 filter
  • (5) 写下三句决策记录:「我不会 short VXX,因为 _________」「我会用 VIX term structure 来 _________」「Day 69 开 calendar 之前我必须先确认 _________」
  • (6) 更新 docs/daily/TR_PROGRESS.md:Day 68 标 ✅
  • (7) 阅读补充材料(可选):
    • VIXCentral.com 看历史 term structure
    • Bill Luby "VIX and More" 博客(VIX 圈最经典的科普)
    • 「Volmageddon」事后报告:CBOE 2018-04 published report

十三、明日预告

Day 69: Calendar Spread — 短近月长远月的 term structure micro 套利

Day 68 讲了宏观层面的 VIX term structure(整个市场的 vol 期限结构),Day 69 讲单只股票层面的 calendar spread:

  • 同一行权价,short 近月、long 远月
  • 赚的是「近月 theta decay 比远月快」 + 「单只股票 IV term structure 平稳期 mean revert」
  • 关键风险:财报前后 IV crush、underlying 单边大幅度运动
  • <$5k 友好:max loss = net debit paid,可控
  • 实操:选 SPY/QQQ/AAPL,30D vs 60D ATM calendar,模拟仓 paper trade 2 周
  • 与 Day 68 的连接:calendar spread 是「在 micro 层面 short term structure」——所以当宏观 VIX 处于 backwardation 时,calendar spread 风险也急剧上升

实际执行记录

启动一项填一项,时间戳 + 卡点。

  • [hh:mm] yfinance 拉数据 — ...
  • [hh:mm] Slope_2 计算 + regime 分布对照预期 — ...
  • [hh:mm] backtest 跑通,Sharpe 和 DD 结果是 ___ / ___
  • [hh:mm] 当前 regime 标记 — 今天 Slope_2 = ___,归类为 ___
  • [hh:mm] 三句决策记录写入 docs/daily/TR_DECISIONS.md
  • 卡点 / 学到的:

总字数:约 6,500 字 今日完成度:理论 ✓ / 实操(你自己执行)/ 笔记 ✓