← 文档库
📄 文档learn/期权研究/2026-07-01-期权定价逻辑-二叉树与BS模型.md
🌱 创建于2026-07-08 02:17
✏️ 修改于2026-07-08 02:17
👁️ 浏览量—
🔗 短链接/~learn/s/286eddb9
🔐 可见性

期权定价逻辑:二叉树与 Black-Scholes 模型

> 2026-07-01 | 期权研究系列

---

零、为什么必须先看懂定价

交易末日期权之前,必须理解期权的价格是怎么来的。否则你看到一张 $0.10 的虚值期权,无法判断它是"便宜"还是"合理"——便宜是因为快要归零了,还是因为波动率被低估了?这需要定价模型来回答。

---

一、二叉树模型(Binomial Tree):从直觉出发

1.1 核心思想

把时间切成离散的小段。在每一小段里,股票价格只有两种可能:

把多段串联起来,就形成了一棵树。

1.2 两步二叉树图示

graph TD S0["S₀
当前股价"] S0 -->|"上涨 ×u"| S1u["S₀·u
↑"] S0 -->|"下跌 ×d"| S1d["S₀·d
↓"] S1u -->|"再涨 ×u"| S2uu["S₀·u²
↑↑"] S1u -->|"再跌 ×d"| S2ud["S₀·ud
↑↓"] S1d -->|"再涨 ×u"| S2du["S₀·du
↓↑"] S1d -->|"再跌 ×d"| S2dd["S₀·d²
↓↓"]

1.3 如何从末节点反推期权价格

期权的价格不是从树根往叶节点推,而是从叶子节点(到期日)倒推回树根(今天)。

第一步:在到期日(最右列),算出每个节点的期权 payoff:

看涨期权 payoff = max(S - K, 0)
看跌期权 payoff = max(K - S, 0)

第二步:从倒数第二步开始,逐层往回折现:

期权价格 = e^(-r·Δt) × [p × 上涨时价值 + (1-p) × 下跌时价值]

其中 p 是风险中性概率(不是真实概率):

p = (e^(r·Δt) - d) / (u - d)

1.4 完整定价流程

flowchart LR A["输入参数
S₀, K, T, r, σ, N"] --> B["计算 u, d, p
u=e^(σ√Δt)
d=1/u
p=(e^(rΔt)-d)/(u-d)"] B --> C["构建价格树
N步→N+1层节点"] C --> D["末层:计算 payoff
Call: max(S-K,0)
Put: max(K-S,0)"] D --> E["逐层回推折现
V=e^(-rΔt)·(p·V_up+(1-p)·V_down)"] E --> F["根节点 V₀
= 期权公允价格"]

1.5 一个具体算例

假设:

graph TD subgraph "第2步:末层 payoff = max(S-K, 0)" N2uu["S = $100×1.1519² = $132.69
Payoff = $32.69
✓ 实值"] N2ud["S = $100×1.1519×0.8681
= $100.00
Payoff = $0.00
— 平值"] N2dd["S = $100×0.8681² = $75.36
Payoff = $0.00
✗ 虚值"] end subgraph "第1步:回推折现" N1u["上涨节点价值
= e^(-0.05×0.5)×[0.578×32.69+0.422×0]
= $18.42"] N1d["下跌节点价值
= e^(-0.05×0.5)×[0.578×0+0.422×0]
= $0.00"] end subgraph "第0步:回推到今天" N0["今日期权公允价
= e^(-0.05×0.5)×[0.578×18.42+0.422×0]
= $10.39"] end N1u --> N2uu N1u --> N2ud N1d --> N2ud N1d --> N2dd N0 --> N1u N0 --> N1d

BS 模型给出的理论价约为 $10.45,两步二叉树给出 $10.39——已经非常接近。步数越多越精确。

---

二、二叉树如何过渡到 Black-Scholes

2.1 核心洞察

二叉树是一根一根离散的柱子拼出来的价格。当你把步数 N 无限增大:

Δt = T/N → 0
步数 N → ∞

二项分布 → 正态分布(中心极限定理) 离散折现 → 连续折现 二叉树价格 → BS 公式

flowchart LR subgraph "N = 2" B2["2步
粗糙近似"] end subgraph "N = 10" B10["10步
开始平滑"] end subgraph "N = 100" B100["100步
接近连续"] end subgraph "N → ∞" BInf["连续极限
= BS 公式"] end B2 -->|"加步数"| B10 -->|"再加"| B100 -->|"取极限"| BInf

2.2 关键对比

维度 二叉树 Black-Scholes
-----------------------------
时间 离散 Δt 连续
价格分布 二项分布 对数正态分布
定价方式 逐层回推折现 闭式公式,一步出结果
优点 直观、可处理美式期权 计算快、可求 Greeks
缺点 步数少时不精确 假设严格、不适用于美式
计算方法 数值(迭代) 解析(公式)
flowchart TD A["二叉树模型
离散时间 · 数值方法"] -->|"N → ∞"| B["Black-Scholes
连续时间 · 解析公式"] C["直觉入口"] --> A B --> D["C = S₀·N(d₁) - K·e^(-rT)·N(d₂)"] A -->|"美式期权
可提前行权"| E["只能用二叉树"] B -->|"欧式期权
不可提前行权"| F["用 BS 更快"]

---

三、Black-Scholes 公式拆解

3.1 公式

看涨期权:

C = S₀ × N(d₁) - K × e^(-rT) × N(d₂)

看跌期权(通过平价关系):

P = K × e^(-rT) × N(-d₂) - S₀ × N(-d₁)

其中:

d₁ = [ln(S₀/K) + (r + σ²/2)T] / (σ√T)
d₂ = d₁ - σ√T

3.2 逐项解读

flowchart TD BS["C = S₀ · N(d₁) - K · e^(-rT) · N(d₂)"] BS --> Term1["S₀ · N(d₁)
『买了多少股票』"] Term1 --> T1a["S₀: 当前股价"] Term1 --> T1b["N(d₁): 对冲比率 Delta
期权到期实值的风险中性概率"] BS --> Term2["K · e^(-rT) · N(d₂)
『借了多少钱』"] Term2 --> T2a["K: 行权价"] Term2 --> T2b["e^(-rT): 把未来K折现到今天"] Term2 --> T2c["N(d₂): 期权被行权的风险中性概率"] BS --> Meaning["BS 的经济含义:
『用借款买股票来复制期权 payoff』"]

BS 公式的本质是"复制":持有一个期权,等价于买入 N(d₁) 股股票,同时借入 K × e^(-rT) × N(d₂) 元。这就是 Delta 对冲的理论基础。

3.3 五个输入参数的影响

参数 符号 对 Call 的影响 对 Put 的影响 直观理解
---------------------------------------------------
标的物价格 S₀ ↑ ↑ ↓ 更有可能超过行权价
行权价 K ↑ ↓ ↑ 需要涨更多才能赚钱
到期时间 T ↑ ↑ ↑(通常) 更多时间=更多可能
无风险利率 r ↑ ↑ ↓ 持有股票的机会成本
波动率 σ ↑ ↑ ↑ 波动大=可能涨得多

3.4 波动率微笑:BS 的局限性

BS 假设波动率 σ 是常数。但现实中,不同行权价的期权反推出的隐含波动率不一样:

flowchart TD Smile["波动率微笑 Volatility Smile"] Smile --> ITM["深度实值期权
IV 偏高
『保险需求推动』"] Smile --> ATM["平值期权
IV 最低
『流动性最好』"] Smile --> OTM["深度虚值期权
IV 偏高
『崩盘保护需求』"] Smile --> Reason["原因:BS 假设
1. 价格连续(实际会跳空)
2. 波动率恒定(实际会变)
3. 对数正态分布(实际肥尾)"]

这就是为什么 0DTE 的研究永远绕不开 Gamma——波动率微笑在末日到期时变得更加极端,做市商必须用 Gamma 来管理这种极端不确定性。

---

四、定价模型与末日期权的联系

现在回到最初的末日期权,有了定价模型再看,一切清晰了:

flowchart LR A["二叉树模型
理解定价逻辑"] --> B["BS 公式
理解 Greeks"] B --> C["Gamma = ∂²C/∂S²
= N'(d₁)/(S₀·σ·√T)"] C --> D["T → 0 时
√T → 0
Gamma → ∞"] D --> E["这就解释了
为什么 0DTE 的
Gamma 如此巨大"] E --> F["Gamma Squeeze
成为 0DTE 交易的
核心驱动力"]

---

五、定价模型的 Python 实现

5.1 二叉树定价

import math

def binomial_tree(S, K, T, r, sigma, N, option_type='call'):
    dt = T / N
    u = math.exp(sigma * math.sqrt(dt))
    d = 1 / u
    p = (math.exp(r * dt) - d) / (u - d)
    discount = math.exp(-r * dt)

    # 末层股价
    prices = [S * (u ** (N - i)) * (d ** i) for i in range(N + 1)]

    # 末层期权 payoff
    if option_type == 'call':
        values = [max(price - K, 0) for price in prices]
    else:
        values = [max(K - price, 0) for price in prices]

    # 逐层回推
    for step in range(N - 1, -1, -1):
        values = [discount * (p * values[i] + (1 - p) * values[i + 1])
                  for i in range(step + 1)]

    return values[0]

5.2 BS 定价

from scipy.stats import norm

def black_scholes(S, K, T, r, sigma, option_type='call'):
    d1 = (math.log(S / K) + (r + sigma**2 / 2) * T) / (sigma * math.sqrt(T))
    d2 = d1 - sigma * math.sqrt(T)

    if option_type == 'call':
        return S * norm.cdf(d1) - K * math.exp(-r * T) * norm.cdf(d2)
    else:
        return K * math.exp(-r * T) * norm.cdf(-d2) - S * norm.cdf(-d1)

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

---

六、总结

学习路径 说明
---------------
二叉树 直觉入口——时间离散化,每步只有涨跌两种可能,从到期日倒推回来
BS 模型 解析形式——二叉树在 N→∞ 时的连续极限,一步出结果
Greeks BS 的衍生品——Delta、Gamma、Theta、Vega 都从 BS 偏导而来
波动率微笑 BS 的局限性——现实世界不是对数正态分布
0DTE 的根源 Gamma ∝ 1/√T,T→0 时 Gamma→∞,解释了极端波动

定价模型是期权交易的"源代码"。看懂它,你才能分辨:这张末日期权的价格是被市场合理定价了,还是出现了可以利用的定价偏差。

▶ 📜 变更历史(1 次提交)

01005c22026-07-08 02:17chore: 更新择时图表缓存、推送消息、数据拉取、推送历史
🍃quant 知识库
by 伊甸园和枫

🔊 播放设置

勾选音源后调节配比,总和自动归一化
已选 0 个 · 合计:0%
合成中...
00:00/00:00
1.0x

分享图片

生成中...