跳到正文

Black-Scholes 推导:从复制组合到闭式

通过复制组合论证完整推导 Black-Scholes 公式。从随机微分方程到边界条件再到 d1、d2 闭式。

第 9 篇 · 共 12 篇 约 13 分钟

如果你打开过任何一本衍生品教材,首先看到的几乎肯定是 Black-Scholes 公式。它被印在杯子上、绣在量化的夹克上,被 1973 年以来的每一篇期权科普引用。这些科普大多把它当经文对待。这篇文章把它当推导看待, 两个家伙几周内想出来的东西,因为它本来就是。

Fischer Black 和 Myron Scholes 在 1973 年发表他们的模型,同年 Robert Merton 做了扩展(Hull, 2018, 第 15 章)。论文十五页,没有凭空拽出 PDE。他们从”你可以用基础资产和无风险债券的动态组合复制期权收益”这个观察拽出 PDE。从那之后就是代数。

设置

让 StS_t 是无红利股票在时刻 tt 的价格,V(S,t)V(S, t) 是在时刻 TT 支付收益的衍生品价格。假设:

  1. 股票走几何布朗运动:
dSt=μSt dt+σSt dWtdS_t = \mu S_t \, dt + \sigma S_t \, dW_t

其中 μ\mu 是漂移,σ\sigma 是波动率,WtW_t 是物理测度下的标准布朗运动。

  1. 有常数无风险利率 rr,可借可贷。
  2. 连续交易。无买卖价差。无交易成本。可以做空。
  3. 股票没有红利。

后三个假设是模型为了把数学变干净而出卖灵魂的地方。丢任何一个,闭式就消失(Hull, 2018, 第 15.1 节)。

我们要的是 V(S,t)V(S, t)。我们不关心 μ\mu, 而我们不需要它正是整个把戏所在。

复制组合

构造一个组合 Π\Pi,由一个空头衍生品和 Δ\Delta 份基础股票组成:

Π=V−ΔS\Pi = V - \Delta S

卖出衍生品的现金为头寸融资。在无穷小时间 dtdt 内,组合变化:

dΠ=dV−Δ dSd\Pi = dV - \Delta \, dS

由 Itô 引理(Luenberger, 2013, 第 12 章),V(S,t)V(S, t) 有随机微分:

dV=(∂V∂t+μS∂V∂S+12σ2S2∂2V∂S2)dt+σS∂V∂S dWtdV = \left(\frac{\partial V}{\partial t} + \mu S \frac{\partial V}{\partial S} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2}\right) dt + \sigma S \frac{\partial V}{\partial S} \, dW_t

减去 Δ dS\Delta \, dS:

dΠ=(∂V∂t+μS∂V∂S+12σ2S2∂2V∂S2−μΔS)dt+(σS∂V∂S−σΔS)dWtd\Pi = \left(\frac{\partial V}{\partial t} + \mu S \frac{\partial V}{\partial S} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} - \mu \Delta S\right) dt + \left(\sigma S \frac{\partial V}{\partial S} - \sigma \Delta S\right) dW_t

现在选:

Δ=∂V∂S\Delta = \frac{\partial V}{\partial S}

dWtdW_t 系数消失。扩散风险没了。在 dtdt 内,组合是确定性的:

dΠ=(∂V∂t+12σ2S2∂2V∂S2)dtd\Pi = \left(\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2}\right) dt

因为组合现在无风险,它必须赚无风险利率(否则套利)。如果赚多了你会无限借;赚少了你会做空它:

dΠ=rΠ dt=r(V−∂V∂SS)dtd\Pi = r\Pi \, dt = r\left(V - \frac{\partial V}{\partial S} S\right) dt

等式两边:

∂V∂t+12σ2S2∂2V∂S2+rS∂V∂S−rV=0\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} + rS \frac{\partial V}{\partial S} - rV = 0

这就是 Black-Scholes PDE。注意三件事。

第一,μ\mu 没了。漂移不进期权价格。这是模型的整个点睛之处,也是风险中性定价的基础。市场预期股票一年涨 20% 还是跌 5% 都没关系, 期权价值一样。

第二,PDE 只有一个状态变量(SS)和三个参数(r,σ,Tr, \sigma, T)。你改变市场对漂移的看法都没关系。波动率是你唯一需要敲定的非线性输入。

第三,这是反向时间的反向热方程。它是抛物的, 如果你正向跑, 爆炸不稳定。我们反向解,从 TT 时刻的收益往现在推。

边界条件

对支付 max⁡(ST−K,0)\max(S_T - K, 0) 的欧式看涨,在 t=Tt = T 处的终值条件:

V(S,T)=max⁡(S−K,0)V(S, T) = \max(S - K, 0)

两个空间边界。当 S→0S \to 0,看涨变成没价值:

V(0,t)=0V(0, t) = 0

当 S→∞S \to \infty,看涨表现得像股票减去折现的行使价:

lim⁡S→∞V(S,t)=S−Ke−r(T−t)\lim_{S \to \infty} V(S, t) = S - K e^{-r(T-t)}

这是行权基本确定的深度实值情形。对看跌,边界翻转(Wilmott, 2007, 第 1 卷,第 5 章)。

变量替换

要解 PDE,你可以扔个有限差分求解器上去。Black 和 Scholes 选了暴力解析解的路,我们至今受益。他们用的替换:

S=Kex,t=T−τ/12σ2S = K e^x, \quad t = T - \tau / \frac{1}{2}\sigma^2

把 PDE 变成标准热方程。更现代教材(Hull, 2018, 第 15.4 节)更常见的做法是先做:

τ=T−t,V=e−rτU\tau = T - t, \quad V = e^{-r\tau} U

代入,折现因子的 rr 依赖项抵消,UU 满足:

∂U∂τ=12σ2S2∂2U∂S2+rS∂U∂S\frac{\partial U}{\partial \tau} = \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 U}{\partial S^2} + rS \frac{\partial U}{\partial S}

UU 的终值条件跟 VV 一样。

现在设 x=ln⁡(S/K)x = \ln(S/K),即 S=KexS = K e^x。PDE 变成:

∂U∂τ=12σ2∂2U∂x2+(r−12σ2)∂U∂x\frac{\partial U}{\partial \tau} = \frac{1}{2}\sigma^2 \frac{\partial^2 U}{\partial x^2} + \left(r - \frac{1}{2}\sigma^2\right) \frac{\partial U}{\partial x}

这是带 xx 方向恒定漂移的热方程。它有已知的格林函数, 高斯核, 把这个核和终值收益卷积得到解。

特征函数论证

xx 上的 PDE 在你倾斜 r−12σ2r - \frac{1}{2}\sigma^2 之后关于 x→−xx \to -x 对称。诀窍是加个速度 −r+12σ2-r + \frac{1}{2}\sigma^2 来去掉漂移,这意味着在移动坐标系里看 x+(r−12σ2)τx + (r - \frac{1}{2}\sigma^2)\tau。

定义 y=x+(r−12σ2)τy = x + (r - \frac{1}{2}\sigma^2)\tau,则 yy 里的 ∂/∂τ\partial/\partial \tau 变成:

∂U∂τ−(r−12σ2)∂U∂y=12σ2∂2U∂y2\frac{\partial U}{\partial \tau} - (r - \tfrac{1}{2}\sigma^2)\frac{\partial U}{\partial y} = \frac{1}{2}\sigma^2 \frac{\partial^2 U}{\partial y^2}

链式法则的额外项抵消了变换后 PDE 里的一阶 yy 导数,我们剩下标准热方程:

∂U∂τ=12σ2∂2U∂y2\frac{\partial U}{\partial \tau} = \frac{1}{2}\sigma^2 \frac{\partial^2 U}{\partial y^2}

从终值条件 f(y)f(y) 开始的解是高斯卷积:

U(y,τ)=1σ2πτ∫−∞∞f(y′)exp⁡(−(y−y′)22σ2τ)dy′U(y, \tau) = \frac{1}{\sigma \sqrt{2\pi \tau}} \int_{-\infty}^{\infty} f(y') \exp\left(-\frac{(y - y')^2}{2\sigma^2 \tau}\right) dy'

对看涨,f(y)=max⁡(Key′−K,0)=Kmax⁡(ey′−1,0)f(y) = \max(K e^{y'} - K, 0) = K \max(e^{y'} - 1, 0),在 y′<0y' < 0 时为零,y′≥0y' \geq 0 时为 K(ey′−1)K(e^{y'} - 1)。代入并磨代数(真的就是磨)给出(Hull, 2018, 公式 15.20):

V(S,t)=S N(d1)−Ke−r(T−t)N(d2)V(S, t) = S \, N(d_1) - K e^{-r(T-t)} N(d_2)

其中

d1=ln⁡(S/K)+(r+12σ2)(T−t)σT−td_1 = \frac{\ln(S/K) + (r + \tfrac{1}{2}\sigma^2)(T-t)}{\sigma \sqrt{T-t}} d2=d1−σT−t=ln⁡(S/K)+(r−12σ2)(T−t)σT−td_2 = d_1 - \sigma \sqrt{T-t} = \frac{\ln(S/K) + (r - \tfrac{1}{2}\sigma^2)(T-t)}{\sigma \sqrt{T-t}}

N(⋅)N(\cdot) 是标准正态 CDF。

就这样。每个定价屏幕前端的那个东西,Merton 和 Scholes 因此得诺贝尔奖(Black 在授奖前已去世)的东西,你期权账户账单存在的原因。

看跌通过看跌-看涨平价

对同一标的同一行使价的欧式看跌:

P=Ke−r(T−t)N(−d2)−SN(−d1)P = K e^{-r(T-t)} N(-d_2) - S N(-d_1)

你可以直接推导,或者通过看跌-看涨平价免费拿:

C−P=S−Ke−r(T−t)C - P = S - K e^{-r(T-t)}

这对欧式期权恒成立,因为你能通过买入看涨、卖出看跌来复制一个远期(Hull, 2018, 第 11 章)。

公式实际在说什么

看看涨价格 C=SN(d1)−Ke−r(T−t)N(d2)C = S N(d_1) - K e^{-r(T-t)} N(d_2)。

第一项是在风险中性下、条件于 ST>KS_T > K 时 STS_T 的期望值。第二项是你付的行使价,也是风险中性。直观上,看涨是概率加权的股票减去概率加权的行使价, 这恰好是风险中性测度下收益的折现期望:

C=e−r(T−t)EQ[max⁡(ST−K,0)]C = e^{-r(T-t)} \mathbb{E}^{\mathbb{Q}}\left[\max(S_T - K, 0)\right]

N(d1)N(d_1) 和 N(d2)N(d_2) 是风险中性世界的概率。N(d2)N(d_2) 是看涨最终实值的概率。N(d1)N(d_1) 是期权的 delta, 对冲比率。

这是风险中性定价的解读,跟 PDE 论证数学等价。Cox 和 Ross (1976) 以及 Harrison 和 Kreps (1979) 证明了一般结果:在完全市场,任何衍生品价格等于唯一风险中性测度下的折现期望(Wilmott, 2007, 第 1 卷,第 7 章)。

数值 sanity check

一个迷你实现。两个目的:确认数学能编译成代码,提醒你答案总是一个 norm.cdf 之遥。

from math import erf, log, sqrt
from scipy.stats import norm

def bs_call(S, K, r, sigma, T):
    if T <= 0:
        return max(S - K, 0.0)
    d1 = (log(S / K) + (r + 0.5 * sigma**2) * T) / (sigma * sqrt(T))
    d2 = d1 - sigma * sqrt(T)
    return S * norm.cdf(d1) - K * exp(-r * T) * norm.cdf(d2)

试 S=100S = 100,K=100K = 100,r=0.05r = 0.05,σ=0.20\sigma = 0.20,T=1T = 1。你应该得到 C≈10.45C \approx 10.45。对应 delta 是 N(d1)≈0.64N(d_1) \approx 0.64。如果你的对冲账上空头 10,450 份看涨合约,你做多 6,400 股。跟那个比率的偏差会立刻表现为跟股票 1 比 1 缩放的 P&L 变化,意味着你少对冲或多对冲了。

推导在哪里失效

只要你能无摩擦地连续复制,PDE 就成立。当你违反这些假设之一时,闭式就不再精确成立:

  • 离散交易。间隔对冲留下残差方差。Hull 称之为”波动率拖累”, 你的实现方差略小于股票的路径方差,但你的对冲 P&L 是方差乘以时间间隔。
  • 交易成本。每次再平衡都花钱;最优对冲现在要在跟踪误差和成本之间权衡(Luenberger, 2013, 第 14 章)。
  • 跳跃。当股票可以跳空时,你的对冲在两次交易之间失效。Merton (1976) 的跳跃扩散处理这个。
  • 随机波动率。当 σ\sigma 自身随机时,你不能再完全对冲, 波动率成为第二个风险源。

每个都是独立研究论文,其中大多数在量化面试大纲上。

用另外两种方式读公式

一旦你有了闭式,三种等价的解读方式解锁很多直觉。

跨式分解

同一行使价上加看跌加看涨恢复著名的 straddle 定价公式(对 ATM 行使价 K=S0K = S_0,或更干净地,K=S0erTK = S_0 e^{rT} 调整 carry):

C+P≈S0⋅(2N(d1/2)−1)⋅2πσ2T/S02⋅S0C + P \approx S_0 \cdot \left(2 N(d_1/2) - 1\right) \cdot \sqrt{2\pi \sigma^2 T / S_0^2} \cdot S_0

等等,这不太对。用看跌-看涨平价的 ATM straddle 正确公式:

C+P=2S0N(d1/2)−2Ke−rTN(−d1/2)C + P = 2 S_0 N(d_1/2) - 2 K e^{-rT} N(-d_1/2)

对 K=F0=S0erTK = F_0 = S_0 e^{rT},这化简为 2S0e−rT(2N(σT/2)−1)2 S_0 e^{-rT} (2 N(\sigma\sqrt{T}/2) - 1),对小 σT\sigma\sqrt{T} 大约是 S0σ2T/πS_0 \sigma \sqrt{2 T / \pi}。这就是著名公式:ATM straddle 价格大约等于 0.4⋅S0⋅σT0.4 \cdot S_0 \cdot \sigma \sqrt{T}。对 S&P 在 4500,σ=0.20\sigma = 0.20,T=1/12T = 1/12,那是 4500⋅0.20⋅2/12π⋅0.4≈834500 \cdot 0.20 \cdot \sqrt{2/12\pi} \cdot 0.4 \approx 83 美元,跟你在屏幕上看到的 1 个月 ATM straddle 价格吻合。

对冲收益视角

考虑一个做多看涨、做空 Δ\Delta 股的交易员。按 Black-Scholes,Δ=N(d1)\Delta = N(d_1)。头寸有”修正收益”, 小段时间内持对冲头寸的瞬时 P&L。这个修正收益是风险账显示的内容。[t,t+dt][t, t+dt] 上这个修正收益的期望:

Π(t+dt)−Π(t)=r(Π(t))dt−BS 敏感度项\Pi(t + dt) - \Pi(t) = r(\Pi(t)) dt - \text{BS 敏感度项}

对期权全生命周期积分给出对冲的成本,等于期权费。有时叫”Black-Scholes 收益图”,用来想期权费从哪里来很有用, 大部分期权费在期权生命早期 gamma 最高时收取。

分布视角

价格,再次:

C=e−r(T−t)∫K∞(ST−K) p(ST) dSTC = e^{-r(T-t)} \int_K^\infty (S_T - K) \, p(S_T) \, dS_T

其中 p(ST)p(S_T) 是均值 ln⁡S0+(r−12σ2)(T−t)\ln S_0 + (r - \tfrac{1}{2}\sigma^2)(T-t)、方差 σ2(T−t)\sigma^2 (T-t) 的对数正态密度。算积分:

C=S0N(d1)−Ke−r(T−t)N(d2)C = S_0 N(d_1) - K e^{-r(T-t)} N(d_2)

验证 Black-Scholes。但更广的点是:价格只依赖于 STS_T 的分布,不依赖于动态。这就是为什么风险中性定价有效, 期权价格总结市场认为未来即期分布是什么。原则上你可以反过来:观察到的期权价格隐含一个风险中性分布(Breeden-Litzenberger, 1978),那个分布跟你的模型隐含分布反向交易。

更深一点看折现期望

风险中性定价公式:

C=e−rTEQ[max⁡(ST−K,0)]C = e^{-rT} \mathbb{E}^{\mathbb{Q}}[\max(S_T - K, 0)]

不只是写 Black-Scholes 的另一种方式。它是操作版本:如果你能在风险中性测度下算期望收益,你就能给任何欧式期权定价(Hull, 2018, 第 15.6 节;Wilmott, 2007, 第 1 卷,第 7 章)。

风险中性测度 Q\mathbb{Q} 由 Radon-Nikodym 导数定义:

dQdP=e−rTST/S0EP[e−rTST/S0]=exp⁡(−(μ−r)σWT−12(μ−r)2σ2T)\frac{d\mathbb{Q}}{d\mathbb{P}} = \frac{e^{-rT} S_T / S_0}{\mathbb{E}^{\mathbb{P}}[e^{-rT} S_T / S_0]} = \exp\left(-\frac{(\mu - r)}{\sigma} W_T - \frac{1}{2} \frac{(\mu-r)^2}{\sigma^2} T\right)

其中 WTW_T 是物理布朗运动。在 Q\mathbb{Q} 下,股票漂移变成 rr 而不是 μ\mu。这是 Girsanov 定理:换成计价单位测度,施加到股票上。

实际上这意味着两件事。第一,当你在风险中性测度下做蒙特卡洛(用 rr 作为漂移),你直接得到期权价格。你不需要知道 μ\mu。第二,当你用历史股票收益校准来估计 μ\mu 时,这对期权定价无关, 你只需要历史 σ\sigma 和当前 rr 期限结构。

但要注意:μ\mu 对对冲有效性很重要。当你构造 delta 对冲时,你的实现 P&L 依赖于实现股票收益跟隐含 rr 的对比。所以历史 μ\mu 进入回测但不进入价格。

常见数值陷阱

实现 Black-Scholes 时,有三件事出错比应该的要多。

d1 和 d2 需要小心地以浮点数计算。对 S=KS = K 恰好相等的情况,ln⁡(S/K)\ln(S/K) 的浮点舍入产生 −0.0-0.0 会破坏某些软件。防御性代码:

d1 = math.log(S / K) + (r + 0.5 * sigma * sigma) * T
d1 /= sigma * math.sqrt(T)

函数开头显式 max(S, 1e-12) 避免 ln⁡(0)\ln(0) 崩溃。如果你关心 KK 的单调性,用 math.log(S / K) 而不是 math.log(S) - math.log(K)。

接近到期。当 T→0T \to 0,公式逼近 max⁡(S−Ke−rT,0)\max(S - K e^{-rT}, 0),但浮点除法可能产生无意义的值。大部分生产代码用 T<某个阈值(1e-6)T < \text{某个阈值(1e-6)} 守护,返回内在价值。

深度虚值看跌或看涨。对深度虚值期权,N(d1)N(d_1) 和 N(d2)N(d_2) 很小。它们的差可能损失 6-7 位精度。用对数空间实现:

log⁡N(−d)≈−d2/2−log⁡(d2π) 对大 d\log N(-d) \approx -d^2/2 - \log(d\sqrt{2\pi}) \text{ 对大 } d

scipy 之类的标准库内部处理这个,但如果你从头写自己的正态 CDF,跟 scipy 检查尾部行为。

有用的交叉验证:看跌-看涨平价

对同一标的同 KK 同 TT 的欧式期权:

C−P=S−Ke−rTC - P = S - K e^{-rT}

右边不依赖波动率。这是个非平凡事实。如果你的代码产生依赖 σ\sigma 的 C−PC - P,哪里出错了。

对多个行使价同 TT,画 C(K)−P(K)C(K) - P(K) 对 KK 的图。应该是斜率 −e−rT-e^{-rT}、截距 SS 的线性函数。偏离线性是编码错误的视觉诊断。

一点历史

1900 年,Louis Bachelier 在索邦发表博士论文 Théorie de la Spéculation。它把法国债券市场建模为布朗运动, 比爱因斯坦关于同一主题的著名论文早五年。Bachelier 推导了法国债券”期权”的定价公式。Bachelier 看涨公式是:

C=(S0−K) N ⁣(S0−KσT)+σT ϕ ⁣(S0−KσT)C = (S_0 - K)\, N\!\left(\frac{S_0 - K}{\sigma\sqrt{T}}\right) + \sigma\sqrt{T}\,\phi\!\left(\frac{S_0 - K}{\sigma\sqrt{T}}\right)

其中 ϕ(⋅)\phi(\cdot) 是标准正态 PDF。等价地,令 d=(S0−K)/(σT)d = (S_0 - K)/(\sigma\sqrt{T}):

C=(S0−K) N(d)+σT ϕ(d)C = (S_0 - K)\, N(d) + \sigma\sqrt{T}\, \phi(d)

第一项是内在价值加权的实值概率;第二项是扩散项,捕捉从现在到到期之间基础资产的预期额外运动。没有那个扩散项,公式坍缩到到期时的内在价值,产生无意义的东西。每本期权教材都没给 Bachelier 记功。他的老师 Henri Poincaré 有兴趣,但金融界没人接手。

Black 和 Scholes 知道 Bachelier 的工作。他们通过使用对数收益(平稳的而不是水平)并加折现因子改进了它。Merton 的贡献是认识到结果在无套利下推广到更广的收益类。他们三人在 1997 年得诺贝尔奖(Black 在 1995 年去世)。

这个故事值得了解,因为这是定量模型的学术版本晚于市场实践的稀有情形。债券交易员和经纪人在 1973 年之前的几十年里就在股票上跑类期权策略。CBOE 在 1973 年开张,部分原因是公式给经纪人一个一致地报公平价的方式。

你应该能从零推导什么

吸收这篇文章之后,你能:

  1. 从复制组合论证推导 Black-Scholes PDE。
  2. 说明热方程变换中的到期时间方向。
  3. 把 PDE 解跟通过风险中性期望的闭式联系起来。
  4. 验证看跌-看涨平价和关系 ΔC−ΔP=1\Delta_C - \Delta_P = 1。
  5. 论证公式在无摩擦市场假设下的有效性。

如果你在草纸上做不出至少四件,继续之前你应该重读文章。

为什么这个推导是正确的起点

本模块其他每个模型, 局部波动率、随机波动率、跳跃扩散, 要么是 Black-Scholes PDE 的修改,要么是风险中性定价论证的推广。闭式是一整类结果的特例。一旦你有了上面的推导,每个后续推导看起来都像一个主题的变奏。

要内化的是 Black-Scholes 公式不是关于市场的事实。它是三件事的逻辑结果:连续交易、无交易成本、单一风险资产走几何布朗运动。当你听到人们争论公式”是不是真的”,他们通常在争论那些假设是否成立。它们不成立,这就是本模块剩余部分要做的。


阅读清单。 Hull, Options, Futures, and Other Derivatives, 第 10 版,第 13-15 章(2018)。Wilmott, Paul Wilmott on Quantitative Finance, 第 2 版,第 1 卷,第 5-8 章(2007)。Luenberger, Investment Science, 第 2 版,第 12-14 章(2013)。Press et al., Numerical Recipes, 第 3 版,第 20 章(2007)关于把这里跟有限差分联系起来的 PDE 离散化。