如果你打开过任何一本衍生品教材,首先看到的几乎肯定是 Black-Scholes 公式。它被印在杯子上、绣在量化的夹克上,被 1973 年以来的每一篇期权科普引用。这些科普大多把它当经文对待。这篇文章把它当推导看待, 两个家伙几周内想出来的东西,因为它本来就是。
Fischer Black 和 Myron Scholes 在 1973 年发表他们的模型,同年 Robert Merton 做了扩展(Hull, 2018, 第 15 章)。论文十五页,没有凭空拽出 PDE。他们从”你可以用基础资产和无风险债券的动态组合复制期权收益”这个观察拽出 PDE。从那之后就是代数。
设置
让 St 是无红利股票在时刻 t 的价格,V(S,t) 是在时刻 T 支付收益的衍生品价格。假设:
- 股票走几何布朗运动:
dSt=μStdt+σStdWt
其中 μ 是漂移,σ 是波动率,Wt 是物理测度下的标准布朗运动。
- 有常数无风险利率 r,可借可贷。
- 连续交易。无买卖价差。无交易成本。可以做空。
- 股票没有红利。
后三个假设是模型为了把数学变干净而出卖灵魂的地方。丢任何一个,闭式就消失(Hull, 2018, 第 15.1 节)。
我们要的是 V(S,t)。我们不关心 μ, 而我们不需要它正是整个把戏所在。
复制组合
构造一个组合 Π,由一个空头衍生品和 Δ 份基础股票组成:
Π=V−ΔS
卖出衍生品的现金为头寸融资。在无穷小时间 dt 内,组合变化:
dΠ=dV−ΔdS
由 Itô 引理(Luenberger, 2013, 第 12 章),V(S,t) 有随机微分:
dV=(∂t∂V+μS∂S∂V+21σ2S2∂S2∂2V)dt+σS∂S∂VdWt
减去 ΔdS:
dΠ=(∂t∂V+μS∂S∂V+21σ2S2∂S2∂2V−μΔS)dt+(σS∂S∂V−σΔS)dWt
现在选:
Δ=∂S∂V
dWt 系数消失。扩散风险没了。在 dt 内,组合是确定性的:
dΠ=(∂t∂V+21σ2S2∂S2∂2V)dt
因为组合现在无风险,它必须赚无风险利率(否则套利)。如果赚多了你会无限借;赚少了你会做空它:
dΠ=rΠdt=r(V−∂S∂VS)dt
等式两边:
∂t∂V+21σ2S2∂S2∂2V+rS∂S∂V−rV=0
这就是 Black-Scholes PDE。注意三件事。
第一,μ 没了。漂移不进期权价格。这是模型的整个点睛之处,也是风险中性定价的基础。市场预期股票一年涨 20% 还是跌 5% 都没关系, 期权价值一样。
第二,PDE 只有一个状态变量(S)和三个参数(r,σ,T)。你改变市场对漂移的看法都没关系。波动率是你唯一需要敲定的非线性输入。
第三,这是反向时间的反向热方程。它是抛物的, 如果你正向跑, 爆炸不稳定。我们反向解,从 T 时刻的收益往现在推。
边界条件
对支付 max(ST−K,0) 的欧式看涨,在 t=T 处的终值条件:
V(S,T)=max(S−K,0)
两个空间边界。当 S→0,看涨变成没价值:
V(0,t)=0
当 S→∞,看涨表现得像股票减去折现的行使价:
S→∞limV(S,t)=S−Ke−r(T−t)
这是行权基本确定的深度实值情形。对看跌,边界翻转(Wilmott, 2007, 第 1 卷,第 5 章)。
变量替换
要解 PDE,你可以扔个有限差分求解器上去。Black 和 Scholes 选了暴力解析解的路,我们至今受益。他们用的替换:
S=Kex,t=T−τ/21σ2
把 PDE 变成标准热方程。更现代教材(Hull, 2018, 第 15.4 节)更常见的做法是先做:
τ=T−t,V=e−rτU
代入,折现因子的 r 依赖项抵消,U 满足:
∂τ∂U=21σ2S2∂S2∂2U+rS∂S∂U
U 的终值条件跟 V 一样。
现在设 x=ln(S/K),即 S=Kex。PDE 变成:
∂τ∂U=21σ2∂x2∂2U+(r−21σ2)∂x∂U
这是带 x 方向恒定漂移的热方程。它有已知的格林函数, 高斯核, 把这个核和终值收益卷积得到解。
特征函数论证
x 上的 PDE 在你倾斜 r−21σ2 之后关于 x→−x 对称。诀窍是加个速度 −r+21σ2 来去掉漂移,这意味着在移动坐标系里看 x+(r−21σ2)τ。
定义 y=x+(r−21σ2)τ,则 y 里的 ∂/∂τ 变成:
∂τ∂U−(r−21σ2)∂y∂U=21σ2∂y2∂2U
链式法则的额外项抵消了变换后 PDE 里的一阶 y 导数,我们剩下标准热方程:
∂τ∂U=21σ2∂y2∂2U
从终值条件 f(y) 开始的解是高斯卷积:
U(y,τ)=σ2πτ1∫−∞∞f(y′)exp(−2σ2τ(y−y′)2)dy′
对看涨,f(y)=max(Key′−K,0)=Kmax(ey′−1,0),在 y′<0 时为零,y′≥0 时为 K(ey′−1)。代入并磨代数(真的就是磨)给出(Hull, 2018, 公式 15.20):
V(S,t)=SN(d1)−Ke−r(T−t)N(d2)
其中
d1=σT−tln(S/K)+(r+21σ2)(T−t)
d2=d1−σT−t=σT−tln(S/K)+(r−21σ2)(T−t)
N(⋅) 是标准正态 CDF。
就这样。每个定价屏幕前端的那个东西,Merton 和 Scholes 因此得诺贝尔奖(Black 在授奖前已去世)的东西,你期权账户账单存在的原因。
看跌通过看跌-看涨平价
对同一标的同一行使价的欧式看跌:
P=Ke−r(T−t)N(−d2)−SN(−d1)
你可以直接推导,或者通过看跌-看涨平价免费拿:
C−P=S−Ke−r(T−t)
这对欧式期权恒成立,因为你能通过买入看涨、卖出看跌来复制一个远期(Hull, 2018, 第 11 章)。
公式实际在说什么
看看涨价格 C=SN(d1)−Ke−r(T−t)N(d2)。
第一项是在风险中性下、条件于 ST>K 时 ST 的期望值。第二项是你付的行使价,也是风险中性。直观上,看涨是概率加权的股票减去概率加权的行使价, 这恰好是风险中性测度下收益的折现期望:
C=e−r(T−t)EQ[max(ST−K,0)]
N(d1) 和 N(d2) 是风险中性世界的概率。N(d2) 是看涨最终实值的概率。N(d1) 是期权的 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=100,K=100,r=0.05,σ=0.20,T=1。你应该得到 C≈10.45。对应 delta 是 N(d1)≈0.64。如果你的对冲账上空头 10,450 份看涨合约,你做多 6,400 股。跟那个比率的偏差会立刻表现为跟股票 1 比 1 缩放的 P&L 变化,意味着你少对冲或多对冲了。
推导在哪里失效
只要你能无摩擦地连续复制,PDE 就成立。当你违反这些假设之一时,闭式就不再精确成立:
- 离散交易。间隔对冲留下残差方差。Hull 称之为”波动率拖累”, 你的实现方差略小于股票的路径方差,但你的对冲 P&L 是方差乘以时间间隔。
- 交易成本。每次再平衡都花钱;最优对冲现在要在跟踪误差和成本之间权衡(Luenberger, 2013, 第 14 章)。
- 跳跃。当股票可以跳空时,你的对冲在两次交易之间失效。Merton (1976) 的跳跃扩散处理这个。
- 随机波动率。当 σ 自身随机时,你不能再完全对冲, 波动率成为第二个风险源。
每个都是独立研究论文,其中大多数在量化面试大纲上。
用另外两种方式读公式
一旦你有了闭式,三种等价的解读方式解锁很多直觉。
跨式分解
同一行使价上加看跌加看涨恢复著名的 straddle 定价公式(对 ATM 行使价 K=S0,或更干净地,K=S0erT 调整 carry):
C+P≈S0⋅(2N(d1/2)−1)⋅2πσ2T/S02⋅S0
等等,这不太对。用看跌-看涨平价的 ATM straddle 正确公式:
C+P=2S0N(d1/2)−2Ke−rTN(−d1/2)
对 K=F0=S0erT,这化简为 2S0e−rT(2N(σT/2)−1),对小 σT 大约是 S0σ2T/π。这就是著名公式:ATM straddle 价格大约等于 0.4⋅S0⋅σT。对 S&P 在 4500,σ=0.20,T=1/12,那是 4500⋅0.20⋅2/12π⋅0.4≈83 美元,跟你在屏幕上看到的 1 个月 ATM straddle 价格吻合。
对冲收益视角
考虑一个做多看涨、做空 Δ 股的交易员。按 Black-Scholes,Δ=N(d1)。头寸有”修正收益”, 小段时间内持对冲头寸的瞬时 P&L。这个修正收益是风险账显示的内容。[t,t+dt] 上这个修正收益的期望:
Π(t+dt)−Π(t)=r(Π(t))dt−BS 敏感度项
对期权全生命周期积分给出对冲的成本,等于期权费。有时叫”Black-Scholes 收益图”,用来想期权费从哪里来很有用, 大部分期权费在期权生命早期 gamma 最高时收取。
分布视角
价格,再次:
C=e−r(T−t)∫K∞(ST−K)p(ST)dST
其中 p(ST) 是均值 lnS0+(r−21σ2)(T−t)、方差 σ2(T−t) 的对数正态密度。算积分:
C=S0N(d1)−Ke−r(T−t)N(d2)
验证 Black-Scholes。但更广的点是:价格只依赖于 ST 的分布,不依赖于动态。这就是为什么风险中性定价有效, 期权价格总结市场认为未来即期分布是什么。原则上你可以反过来:观察到的期权价格隐含一个风险中性分布(Breeden-Litzenberger, 1978),那个分布跟你的模型隐含分布反向交易。
更深一点看折现期望
风险中性定价公式:
C=e−rTEQ[max(ST−K,0)]
不只是写 Black-Scholes 的另一种方式。它是操作版本:如果你能在风险中性测度下算期望收益,你就能给任何欧式期权定价(Hull, 2018, 第 15.6 节;Wilmott, 2007, 第 1 卷,第 7 章)。
风险中性测度 Q 由 Radon-Nikodym 导数定义:
dPdQ=EP[e−rTST/S0]e−rTST/S0=exp(−σ(μ−r)WT−21σ2(μ−r)2T)
其中 WT 是物理布朗运动。在 Q 下,股票漂移变成 r 而不是 μ。这是 Girsanov 定理:换成计价单位测度,施加到股票上。
实际上这意味着两件事。第一,当你在风险中性测度下做蒙特卡洛(用 r 作为漂移),你直接得到期权价格。你不需要知道 μ。第二,当你用历史股票收益校准来估计 μ 时,这对期权定价无关, 你只需要历史 σ 和当前 r 期限结构。
但要注意:μ 对对冲有效性很重要。当你构造 delta 对冲时,你的实现 P&L 依赖于实现股票收益跟隐含 r 的对比。所以历史 μ 进入回测但不进入价格。
常见数值陷阱
实现 Black-Scholes 时,有三件事出错比应该的要多。
d1 和 d2 需要小心地以浮点数计算。对 S=K 恰好相等的情况,ln(S/K) 的浮点舍入产生 −0.0 会破坏某些软件。防御性代码:
d1 = math.log(S / K) + (r + 0.5 * sigma * sigma) * T
d1 /= sigma * math.sqrt(T)
函数开头显式 max(S, 1e-12) 避免 ln(0) 崩溃。如果你关心 K 的单调性,用 math.log(S / K) 而不是 math.log(S) - math.log(K)。
接近到期。当 T→0,公式逼近 max(S−Ke−rT,0),但浮点除法可能产生无意义的值。大部分生产代码用 T<某个阈值(1e-6) 守护,返回内在价值。
深度虚值看跌或看涨。对深度虚值期权,N(d1) 和 N(d2) 很小。它们的差可能损失 6-7 位精度。用对数空间实现:
logN(−d)≈−d2/2−log(d2π) 对大 d
scipy 之类的标准库内部处理这个,但如果你从头写自己的正态 CDF,跟 scipy 检查尾部行为。
有用的交叉验证:看跌-看涨平价
对同一标的同 K 同 T 的欧式期权:
C−P=S−Ke−rT
右边不依赖波动率。这是个非平凡事实。如果你的代码产生依赖 σ 的 C−P,哪里出错了。
对多个行使价同 T,画 C(K)−P(K) 对 K 的图。应该是斜率 −e−rT、截距 S 的线性函数。偏离线性是编码错误的视觉诊断。
一点历史
1900 年,Louis Bachelier 在索邦发表博士论文 Théorie de la Spéculation。它把法国债券市场建模为布朗运动, 比爱因斯坦关于同一主题的著名论文早五年。Bachelier 推导了法国债券”期权”的定价公式。Bachelier 看涨公式是:
C=(S0−K)N(σTS0−K)+σTϕ(σTS0−K)
其中 ϕ(⋅) 是标准正态 PDF。等价地,令 d=(S0−K)/(σT):
C=(S0−K)N(d)+σTϕ(d)
第一项是内在价值加权的实值概率;第二项是扩散项,捕捉从现在到到期之间基础资产的预期额外运动。没有那个扩散项,公式坍缩到到期时的内在价值,产生无意义的东西。每本期权教材都没给 Bachelier 记功。他的老师 Henri Poincaré 有兴趣,但金融界没人接手。
Black 和 Scholes 知道 Bachelier 的工作。他们通过使用对数收益(平稳的而不是水平)并加折现因子改进了它。Merton 的贡献是认识到结果在无套利下推广到更广的收益类。他们三人在 1997 年得诺贝尔奖(Black 在 1995 年去世)。
这个故事值得了解,因为这是定量模型的学术版本晚于市场实践的稀有情形。债券交易员和经纪人在 1973 年之前的几十年里就在股票上跑类期权策略。CBOE 在 1973 年开张,部分原因是公式给经纪人一个一致地报公平价的方式。
你应该能从零推导什么
吸收这篇文章之后,你能:
- 从复制组合论证推导 Black-Scholes PDE。
- 说明热方程变换中的到期时间方向。
- 把 PDE 解跟通过风险中性期望的闭式联系起来。
- 验证看跌-看涨平价和关系 ΔC−ΔP=1。
- 论证公式在无摩擦市场假设下的有效性。
如果你在草纸上做不出至少四件,继续之前你应该重读文章。
为什么这个推导是正确的起点
本模块其他每个模型, 局部波动率、随机波动率、跳跃扩散, 要么是 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 离散化。