/~learn/s/286eddb9
> 2026-07-01 | 期权研究系列
---
交易末日期权之前,必须理解期权的价格是怎么来的。否则你看到一张 $0.10 的虚值期权,无法判断它是"便宜"还是"合理"——便宜是因为快要归零了,还是因为波动率被低估了?这需要定价模型来回答。
---
把时间切成离散的小段。在每一小段里,股票价格只有两种可能:
把多段串联起来,就形成了一棵树。
期权的价格不是从树根往叶节点推,而是从叶子节点(到期日)倒推回树根(今天)。
第一步:在到期日(最右列),算出每个节点的期权 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)
假设:
BS 模型给出的理论价约为 $10.45,两步二叉树给出 $10.39——已经非常接近。步数越多越精确。
---
二叉树是一根一根离散的柱子拼出来的价格。当你把步数 N 无限增大:
Δt = T/N → 0
步数 N → ∞
二项分布 → 正态分布(中心极限定理) 离散折现 → 连续折现 二叉树价格 → BS 公式
| 维度 | 二叉树 | Black-Scholes |
| ------ | -------- | --------------- |
| 时间 | 离散 Δt | 连续 |
| 价格分布 | 二项分布 | 对数正态分布 |
| 定价方式 | 逐层回推折现 | 闭式公式,一步出结果 |
| 优点 | 直观、可处理美式期权 | 计算快、可求 Greeks |
| 缺点 | 步数少时不精确 | 假设严格、不适用于美式 |
| 计算方法 | 数值(迭代) | 解析(公式) |
---
看涨期权:
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
BS 公式的本质是"复制":持有一个期权,等价于买入 N(d₁) 股股票,同时借入 K × e^(-rT) × N(d₂) 元。这就是 Delta 对冲的理论基础。
| 参数 | 符号 | 对 Call 的影响 | 对 Put 的影响 | 直观理解 |
| ------ | ------ | --------------- | --------------- | --------- |
| 标的物价格 | S₀ ↑ | ↑ | ↓ | 更有可能超过行权价 |
| 行权价 | K ↑ | ↓ | ↑ | 需要涨更多才能赚钱 |
| 到期时间 | T ↑ | ↑ | ↑(通常) | 更多时间=更多可能 |
| 无风险利率 | r ↑ | ↑ | ↓ | 持有股票的机会成本 |
| 波动率 | σ ↑ | ↑ | ↑ | 波动大=可能涨得多 |
BS 假设波动率 σ 是常数。但现实中,不同行权价的期权反推出的隐含波动率不一样:
这就是为什么 0DTE 的研究永远绕不开 Gamma——波动率微笑在末日到期时变得更加极端,做市商必须用 Gamma 来管理这种极端不确定性。
---
现在回到最初的末日期权,有了定价模型再看,一切清晰了:
---
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]
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→∞,解释了极端波动 |
定价模型是期权交易的"源代码"。看懂它,你才能分辨:这张末日期权的价格是被市场合理定价了,还是出现了可以利用的定价偏差。