量化交易中文教材

第 13 章 二叉树

第 11 章只用无套利论证就得到了期权价格的界和平价关系,但没能给出期权的确切价格。要定价,必须对股价如何变动做出假设。本章采用最简单的假设:在每个小时间段内,股价要么上涨某个百分比,要么下跌某个百分比。 把这些可能的路径画成图,就是二叉树(binomial tree)。

这个模型看起来过于简单,但它的意义远超其外表:

  1. 它以最透明的方式展示了期权定价的核心逻辑——无套利论证:用股票和期权构造一个无风险组合,无风险组合只能赚无风险利率,由此倒推出期权价格。
  2. 它引出了衍生品定价中最重要的原理——风险中性定价(risk-neutral valuation)。
  3. 它是一种实用的数值方法,广泛用于美式期权等没有解析解的衍生品,至今仍是交易系统中的主力定价工具之一。
  4. 当时间步长趋于零时,二叉树模型与第 15a、15b 章的 Black–Scholes–Merton(BSM)模型等价。本章附录将证明:欧式期权的二叉树价格收敛到 BSM 公式。

本章的构树方法来自 Cox、Ross 和 Rubinstein(1979)的重要论文,通常称为 CRR 二叉树。二叉树的更多数值细节见第 21a 章。

这是本册最需要读者亲手推导和编程的一章。 建议读完 13.1–13.3 节后立刻用纸笔复算一遍例子,读完 13.8 节后自己写一个 CRR 树程序,再对照"量化实战"中的代码。

学习目标

  1. 用无套利论证为单步二叉树中的期权定价,推导 \(\Delta=\frac{f_u-f_d}{S_0u-S_0d}\)、\(f=e^{-r\Delta t}[pf_u+(1-p)f_d]\)、\(p=\frac{e^{r\Delta t}-d}{u-d}\)。
  2. 理解风险中性定价原理:为什么期权价格与股票的真实预期收益无关;区分风险中性概率(Q 测度)与真实世界概率(P 测度)。
  3. 会用多步二叉树倒推为欧式和美式期权定价,并在每个节点判断是否提前行权。
  4. 会计算各节点的 delta,理解动态 delta 对冲。
  5. 掌握 CRR 参数 \(u=e^{\sigma\sqrt{\Delta t}}\)、\(d=1/u\) 的推导,以及如何把二叉树推广到股指、外汇和期货期权(只需改变 \(a\))。
  6. 理解二叉树价格向 BSM 公式收敛的推导思路,知道收敛的振荡特性。

读前导读

这一章在解决什么问题。 CFA 二级的单步二叉树你算过:构造对冲比率 \(h\),求风险中性概率 \(\pi\),折现期望收益。本章从同一个起点出发,走得更远:(1) 把单步推广到多步,并处理美式期权的提前行权;(2) 讲清"风险中性概率"到底是什么、为什么它不等于真实概率却能给出正确价格;(3) 把树的参数 \(u,d\) 和波动率 \(\sigma\) 连起来,这样树就不再是玩具,而是能和市场数据对接的定价工具;(4) 在附录里证明步数无穷多时,树的价格就是 Black–Scholes 公式。这一章是从"CFA 的期权常识"跨到"量化定价"的桥。

一个类比可以帮你定位:二叉树里的 \(p\) 和你在固定收益里用的"远期利率"很像——远期利率不是对未来利率的预测,而是由今天的即期曲线算出的"让无套利成立的数";\(p\) 也不是对股价上涨概率的预测,而是由今天的股价和利率算出的"让无套利成立的权重"。

需要先想起来的数学。

  • 指数与对数。 \(e^{x}\) 和 \(\ln x\) 互为反函数;\(\ln(ab)=\ln a+\ln b\),\(\ln(u^j)=j\ln u\)。CRR 树里 \(u=e^{\sigma\sqrt{\Delta t}}\),所以 \(\ln u=\sigma\sqrt{\Delta t}\),股价走 \(j\) 次上、\(n-j\) 次下后 \(\ln S\) 变化 \((2j-n)\sigma\sqrt{\Delta t}\)。见 第 00 册第 04 章 级数与收敛。
  • \(e^x\) 的泰勒展开与"忽略高阶项"。 \(e^x=1+x+\frac{x^2}{2}+\frac{x^3}{6}+\cdots\)。\(x\) 很小时,后面的项一个比一个小得多。例:\(x=0.01\) 时 \(e^x=1.010050\),取前两项 \(1.01\) 误差只有 \(0.00005\)。13.7 节和附录都靠它化简。记号 \(O(\Delta t^2)\)(读作"大 O")表示"和 \(\Delta t^2\) 同阶或更小的项",\(\Delta t\to0\) 时可以丢掉。见 第 00 册第 02 章 导数与泰勒展开 和 第 07 章 概率中的分析工具。
  • 二项分布。 \(n\) 次独立试验、每次成功概率 \(p\),恰好成功 \(j\) 次的概率是 \(\binom{n}{j}p^j(1-p)^{n-j}\),\(\binom{n}{j}=\frac{n!}{j!(n-j)!}\) 是"从 \(n\) 步中挑出 \(j\) 步上涨"的方法数。均值 \(np\),方差 \(np(1-p)\)。
  • 中心极限定理(正态近似)。 大量独立小随机量之和近似正态。二项分布 \(n\) 很大时近似 \(N(np,np(1-p))\),所以"成功次数 > α"的概率 \(\approx N\big(\frac{np-\alpha}{\sqrt{np(1-p)}}\big)\),\(N(\cdot)\) 是标准正态累积分布函数。
  • 方差公式。 \(\mathrm{Var}(X)=E(X^2)-[E(X)]^2\),以及"加一个常数不改变方差"。CFA 统计里都学过。

怎么读这一章。 13.1–13.6 是核心必读,务必手算 13.1、13.3、13.5 的例子,至少写一次多步树的倒推。13.7 的推导第一次可以只看结论 \(u=e^{\sigma\sqrt{\Delta t}}\),读完本章下面的推导拆解后再回头细看。13.8–13.11 读公式和例子。附录是本章最难的部分,第一次读可以只读"结论"和"两个概率的直观含义",学完第 14、15 章再回来逐步推。量化实战的代码建议真的跑一遍,尤其是 delta 复制那一段。


13.1 单步二叉树与无套利论证

一个数值例子

当前股价 20 美元,已知 3 个月后股价要么是 22 美元,要么是 18 美元。我们要为一份 3 个月期、行权价 21 美元的欧式看涨期权定价。到期时:股价为 22 则期权值 \(22-21=1\);股价为 18 则期权值 0(原书图 13.1)。

思路:只需假设无套利。构造一个由股票和期权组成的组合,使得 3 个月后无论股价涨跌,组合价值都相同。这样的组合没有风险,无风险组合只能赚取无风险利率。由此可以算出组合今天的价值,进而得到期权价格。之所以总能构造出这样的组合,是因为只有两种证券(股票和期权)和两种可能结果。

构造组合:持有 \(\Delta\) 股股票的多头和 1 份看涨期权的空头。

  • 股价涨到 22:组合价值 \(22\Delta-1\);
  • 股价跌到 18:组合价值 \(18\Delta\)。

令两者相等:\(22\Delta-1=18\Delta\),得 \(\Delta=0.25\)。此时两种情形下组合价值都是 \(22\times0.25-1=18\times0.25=4.5\)。

折现:无风险组合必须赚取无风险利率。设无风险利率为 12%(连续复利),组合今天的价值为

\[4.5e^{-0.12\times3/12}=4.367.\]

求期权价格:记期权今天的价格为 \(f\),组合今天的价值又等于 \(20\times0.25-f=5-f\)。所以 \(5-f=4.367\),即

\[f=0.633.\]

为什么一定是 0.633? 若期权价格高于 0.633,建立这个组合的成本低于 4.367,到期确定得到 4.5,收益率高于无风险利率——套利。若期权价格低于 0.633,反向操作(卖空股票、买入期权)就能以低于无风险利率的成本借到钱——同样是套利。实践中,可以理解为卖出 400 份期权、买入 100 股股票。

每卖出 1 份期权就需要买入 \(\Delta\) 股股票才能形成无风险组合。这个 \(\Delta\) 在期权对冲中至关重要(13.6 节和第 19a 章)。

一般化

设股价为 \(S_0\),以股票为标的的期权(或任何收益依赖于股价的衍生品)价格为 \(f\),期限为 \(T\)。在期权寿命内,股价要么上涨到 \(S_0u\)(\(u>1\)),要么下跌到 \(S_0d\)(\(d<1\))。股价上涨时期权收益为 \(f_u\),下跌时为 \(f_d\)(原书图 13.2)。

仍然考虑"多头 \(\Delta\) 股、空头 1 份期权"的组合。令两种情形下组合价值相等:

\[S_0u\Delta-f_u=S_0d\Delta-f_d,\]

得

\[\Delta=\frac{f_u-f_d}{S_0u-S_0d}. \tag{13.1}\]

即 \(\Delta\) 等于在 \(T\) 时刻两个节点之间期权价格的变化与股价变化之比。

组合无风险,无套利要求它今天的成本等于到期价值的现值:

\[S_0\Delta-f=(S_0u\Delta-f_u)e^{-rT}.\]

解出 \(f\):

\[f=S_0\Delta(1-ue^{-rT})+f_ue^{-rT}.\]

代入式 (13.1),并整理:

\[ \begin{aligned} f&=\frac{(f_u-f_d)(1-ue^{-rT})}{u-d}+f_ue^{-rT} =e^{-rT}\left[\frac{(f_u-f_d)(e^{rT}-u)}{u-d}+f_u\right]\\ &=e^{-rT}\left[f_u\frac{e^{rT}-d}{u-d}+f_d\frac{u-e^{rT}}{u-d}\right]. \end{aligned} \]

记

\[p=\frac{e^{rT}-d}{u-d}, \tag{13.3}\]

则 \(1-p=\dfrac{u-e^{rT}}{u-d}\),于是

\[\boxed{f=e^{-rT}[pf_u+(1-p)f_d]} \tag{13.2}\]

推导拆解:从"解出 \(f\)"到 (13.2) 的代数,逐行补全。 ① 由 \(S_0\Delta-f=(S_0u\Delta-f_u)e^{-rT}\) 移项:\(f=S_0\Delta-S_0u\Delta e^{-rT}+f_ue^{-rT}=S_0\Delta(1-ue^{-rT})+f_ue^{-rT}\)。 ② 代入 \(\Delta=\frac{f_u-f_d}{S_0(u-d)}\),\(S_0\) 约掉:\(f=\frac{(f_u-f_d)(1-ue^{-rT})}{u-d}+f_ue^{-rT}\)。 ③ 把 \(e^{-rT}\) 提到最外面:\(1-ue^{-rT}=e^{-rT}(e^{rT}-u)\),得 \(f=e^{-rT}\big[\frac{(f_u-f_d)(e^{rT}-u)}{u-d}+f_u\big]\)。 ④ 按 \(f_u\)、\(f_d\) 合并同类项。\(f_u\) 的系数:\(\frac{e^{rT}-u}{u-d}+1=\frac{e^{rT}-u+u-d}{u-d}=\frac{e^{rT}-d}{u-d}\);\(f_d\) 的系数:\(-\frac{e^{rT}-u}{u-d}=\frac{u-e^{rT}}{u-d}\)。 ⑤ 两个系数相加 \(=\frac{u-d}{u-d}=1\),所以可以记成 \(p\) 和 \(1-p\)。 这里没有任何一步用到"股价上涨的真实概率",\(p\) 是纯粹由 \(u,d,r\) 拼出来的数。

整个推导唯一用到的假设是无套利。 另外,为使 \(0<p<1\),需要 \(d<e^{rT}<u\)——这本身也是无套利条件:若 \(e^{rT}\ge u\),卖空股票、投资无风险资产就稳赚不赔;若 \(e^{rT}\le d\),借钱买股票就稳赚不赔。

验证:数值例中 \(u=1.1\),\(d=0.9\),\(r=0.12\),\(T=0.25\),\(f_u=1\),\(f_d=0\)。

\[p=\frac{e^{0.03}-0.9}{1.1-0.9}=0.6523,\qquad f=e^{-0.03}(0.6523\times1+0.3477\times0)=0.633,\]

与前面的结果一致。

股票的预期收益无关紧要

式 (13.2) 里没有出现股价上涨或下跌的真实概率。无论股价上涨的概率是 0.5 还是 0.9,期权价格都是 0.633。这初看违反直觉:股价上涨的可能性越大,看涨期权不是应该越值钱吗?

关键在于:我们不是在"凭空"为期权定价,而是相对于标的股票的价格为期权定价。未来涨跌的概率已经体现在今天的股价 20 美元里了,无需再计入。如果投资者普遍认为上涨概率更高,今天的股价就会更高——但给定今天的股价,期权价格与真实概率无关。


13.2 风险中性定价

原理

式 (13.2) 引出了衍生品定价中最重要的原理之一:

风险中性定价:为衍生品定价时,可以假设投资者是风险中性的——即他们不因承担更多风险而要求更高的预期收益。在这个假想的风险中性世界中算出的衍生品价格,在真实世界中同样正确。

我们生活的世界当然不是风险中性的:投资者承担的风险越高,要求的预期收益就越高。但风险中性定价"几乎奇迹般地"绕开了一个难题:我们对期权买卖双方的风险厌恶程度一无所知。直觉是:在用股价表示期权价格时,风险偏好并不重要。投资者越厌恶风险,股价越低;但联系期权价格与股价的那个公式不变。

风险中性世界的两个特征:

  1. 股票(以及任何投资)的预期收益率等于无风险利率;
  2. 期权(以及任何工具)的预期收益的折现率等于无风险利率。

\(p\) 是风险中性概率

现在重新解读式 (13.2)。若把 \(p\) 理解为风险中性世界中股价上涨的概率(由 \(d<e^{rT}<u\),\(0<p<1\) 确实是一个概率),那么 \(pf_u+(1-p)f_d\) 就是风险中性世界中期权的预期收益,式 (13.2) 说:

\[\text{期权今天的价值}=\text{风险中性世界中的预期收益按无风险利率折现}.\]

验证 \(p\) 确实描述了一个风险中性世界——在概率 \(p\) 下,股价的期望为

\[E(S_T)=pS_0u+(1-p)S_0d=pS_0(u-d)+S_0d=\frac{e^{rT}-d}{u-d}S_0(u-d)+S_0d=S_0e^{rT}. \tag{13.4}\]

股价的期望恰好以无风险利率增长,正是风险中性世界中应有的行为。

金融直觉:另一种读法是"状态价格"。令 \(\pi_u=e^{-rT}p\)、\(\pi_d=e^{-rT}(1-p)\),它们是"上涨状态到期付 1 元"和"下跌状态到期付 1 元"这两张证券今天的价格(Arrow–Debreu 证券)。任何衍生品的价格都是 \(\pi_uf_u+\pi_df_d\),就像债券价格是各期现金流乘以折现因子之和。\(p\) 只是把状态价格"归一化"成加起来等于 1 的权重。叫它"概率"是因为它满足概率的数学性质,不是因为它描述真实世界的可能性。

风险中性定价是一个一般性的结论,可以证明它不依赖于股价演化的具体假设。用它定价的步骤是:

  1. 计算风险中性世界中各种结果的概率;
  2. 计算衍生品的预期收益;
  3. 按无风险利率折现。

回到单步例子

在风险中性世界中,股票的预期收益是无风险利率 12%,所以上涨概率 \(p\) 满足

\[22p+18(1-p)=20e^{0.12\times3/12},\]

即 \(4p=20e^{0.03}-18\),\(p=0.6523\)。期权的预期收益为 \(0.6523\times1+0.3477\times0=0.6523\),按无风险利率折现:\(0.6523e^{-0.03}=0.633\)。与无套利论证的结果完全相同。

真实世界与风险中性世界

强调一下:\(p\) 是风险中性世界中的上涨概率,一般不等于真实世界中的上涨概率。

假设在真实世界中股票的预期收益率为 16%,那么真实上涨概率 \(p^*\) 满足 \(22p^*+18(1-p^*)=20e^{0.16\times3/12}\),解得 \(p^*=0.7041\)。真实世界中期权的预期收益为 \(0.7041\times1=0.7041\)。

问题在于:真实世界中该用什么折现率来折现这个预期收益?股票的折现率是 16%;看涨期权比股票风险更高(杠杆更大),折现率应高于 16%,但高多少?我们不知道。反过来,由已知正确的价格 0.633 可以倒推出正确的真实世界折现率 \(R\):

\[0.633=0.7041e^{-R\times3/12}\quad\Longrightarrow\quad R\approx42.6\%.\]

(原书给出 42.58%,按四舍五入后的 \(p^*=0.7041\) 计算;用未经舍入的 \(p^*\) 算出约 42.55%。)这个 42.6% 事先根本无法知道。风险中性定价解决了这个问题:在风险中性世界里,所有资产的预期收益率(因而所有预期收益的折现率)都是无风险利率,无需知道任何风险溢价。

金融直觉:42.6% 为什么这么高?用 CAPM 的思路看。看涨期权相当于"用借来的钱买 \(\Delta\) 股股票":复制组合是 \(0.25\) 股(价值 5)加借款 \(4.367\),自有资金只有 0.633。杠杆倍数(期权弹性)约为 \(\Delta S_0/f=5/0.633\approx7.9\)。股票的风险溢价是 \(16\%-12\%=4\%\),期权的风险溢价大约放大 7.9 倍,约 32%,加上 12% 的无风险利率约 44%,与 42.6% 同一量级(差异来自离散复利和单步近似)。关键是:这个杠杆倍数会随股价变化而变,所以期权的"合适折现率"不是常数,这正是直接在真实世界定价行不通的原因。

原书习题 13.27 进一步指出:同一例子中,看跌期权对应的真实世界折现率是 −52.5%。看跌期权与股票负相关(beta 为负),是一种"保险",投资者愿意接受负的预期收益来持有它。这说明想在真实世界里"合理地"确定期权的折现率几乎是不可能的。


13.3 两步二叉树

数值例子

把上一节的例子延长:股价 20,两个时间步,每步 3 个月,每步上涨或下跌 10%;无风险利率 12%;为一份 6 个月期、行权价 21 的欧式看涨期权定价(原书图 13.3、13.4)。

树上的节点记为:初始节点 A(20);第一步后节点 B(22)、C(18);第二步后末端节点 D(24.2)、E(19.8)、F(16.2)。

第一步:末端节点的期权价值。 D:\(24.2-21=3.2\);E、F:0。

第二步:倒推到中间节点。 节点 C 通向 E 和 F,两者期权价值都是 0,所以 C 处期权价值为 0。节点 B 通向 D 和 E,每一步的 \(p=0.6523\) 不变:

\[f_B=e^{-0.12\times0.25}(0.6523\times3.2+0.3477\times0)=2.0257.\]

第三步:倒推到初始节点。

\[f_A=e^{-0.03}(0.6523\times2.0257+0.3477\times0)=1.2823.\]

本例中各节点的 \(u\)、\(d\) 和时间步长都相同,所以 \(p\) 处处相同。

一般化

设每个时间步长为 \(\Delta t\)(原书图 13.6)。重复应用单步结果:

\[f=e^{-r\Delta t}[pf_u+(1-p)f_d], \tag{13.5}\]
\[p=\frac{e^{r\Delta t}-d}{u-d}, \tag{13.6}\]
\[f_u=e^{-r\Delta t}[pf_{uu}+(1-p)f_{ud}],\qquad f_d=e^{-r\Delta t}[pf_{ud}+(1-p)f_{dd}]. \tag{13.7–13.9}\]

把 \(f_u\)、\(f_d\) 代入式 (13.5):

\[f=e^{-2r\Delta t}\left[p^2f_{uu}+2p(1-p)f_{ud}+(1-p)^2f_{dd}\right]. \tag{13.10}\]

这正是风险中性定价:\(p^2\)、\(2p(1-p)\)、\((1-p)^2\) 分别是到达上、中、下三个末端节点的风险中性概率(二项分布),期权价格等于风险中性预期收益按无风险利率折现。步数更多时,原理依然成立。

推导拆解:(13.10) 的代入过程。 把 \(f_u=e^{-r\Delta t}[pf_{uu}+(1-p)f_{ud}]\) 和 \(f_d=e^{-r\Delta t}[pf_{ud}+(1-p)f_{dd}]\) 代入 \(f=e^{-r\Delta t}[pf_u+(1-p)f_d]\): \(f=e^{-2r\Delta t}\big[p^2f_{uu}+p(1-p)f_{ud}+(1-p)pf_{ud}+(1-p)^2f_{dd}\big]\)。 中间两项都是 \(p(1-p)f_{ud}\),合并成 \(2p(1-p)f_{ud}\)。系数 2 的含义:到达中间节点有两条路径(先涨后跌、先跌后涨),每条概率都是 \(p(1-p)\)。三个系数 \(p^2+2p(1-p)+(1-p)^2=(p+1-p)^2=1\),正好构成一个概率分布。\(n\) 步时,到达"\(j\) 次上涨"节点的路径数是 \(\binom{n}{j}\),这就是附录 (13A.1) 中组合数的来历。 注意:这个"一次性折现"的写法只适用于欧式期权。美式期权在中间节点要和行权价值比大小,必须一步一步倒推。


13.4 看跌期权的例子

为一份 2 年期、行权价 52 的欧式看跌期权定价,股价 50。用两个时间步,每步 1 年,每步上涨或下跌 20%;无风险利率 5%(原书图 13.7)。

\(u=1.2\),\(d=0.8\),\(\Delta t=1\),

\[p=\frac{e^{0.05}-0.8}{1.2-0.8}=0.6282.\]

末端股价为 72、48、32,对应看跌期权价值 \(f_{uu}=0\)、\(f_{ud}=52-48=4\)、\(f_{dd}=52-32=20\)。由式 (13.10):

\[f=e^{-2\times0.05\times1}(0.6282^2\times0+2\times0.6282\times0.3718\times4+0.3718^2\times20)=4.1923.\]

也可以逐步倒推:节点 B(股价 60)的期权价值为 \(e^{-0.05}(0.6282\times0+0.3718\times4)=1.4147\),节点 C(股价 40)为 \(e^{-0.05}(0.6282\times4+0.3718\times20)=9.4636\),再倒推到初始节点得到同样的 4.1923。


13.5 美式期权

二叉树最重要的实际用途之一是为美式期权定价。方法是:从树的末端开始向前倒推,在每个节点检验提前行权是否最优。

  • 末端节点的期权价值与欧式期权相同(收益);
  • 之前每个节点的期权价值取以下两者中较大者:
    1. 由式 (13.5) 给出的继续持有价值(continuation value);
    2. 立即行权的收益。

例子

把 13.4 节的看跌期权改为美式(原书图 13.8):

  • 节点 B(股价 60):继续持有价值 1.4147;立即行权的收益为 \(52-60=-8\),不行权。节点价值取 1.4147。
  • 节点 C(股价 40):继续持有价值 9.4636;立即行权的收益为 \(52-40=12\)。提前行权最优,节点价值取 12。
  • 初始节点 A:继续持有价值为
    \[e^{-0.05}(0.6282\times1.4147+0.3718\times12)=5.0894,\]
    立即行权的收益为 \(52-50=2\),不行权。

美式看跌期权的价值为 5.0894,高于欧式看跌期权的 4.1923。差额 0.8971 就是提前行权权利的价值,它来自节点 C 处的提前行权——这与第 11 章的结论一致:看跌期权深度实值时应提前行权。


13.6 Delta

定义

**Delta(\(\Delta\))**是股票期权价格的变化与标的股价变化之比,是期权交易中最重要的"希腊字母(Greek letter)"之一。它也是为每份卖出的期权构造无风险组合所需持有的股数——与 13.1 节中的 \(\Delta\) 完全相同。构建这样的无风险组合称为 delta 对冲(delta hedging)。看涨期权的 delta 为正,看跌期权的 delta 为负。

例子

  • 图 13.1(单步看涨):\(\Delta=\dfrac{1-0}{22-18}=0.25\)。
  • 图 13.4(两步看涨):
    • 第一步:\(\Delta=\dfrac{2.0257-0}{22-18}=0.5064\);
    • 第二步,若第一步上涨:\(\Delta=\dfrac{3.2-0}{24.2-19.8}=0.7273\);
    • 第二步,若第一步下跌:\(\Delta=\dfrac{0-0}{19.8-16.2}=0\)。
  • 图 13.7(两步看跌):
    • 第一步:\(\Delta=\dfrac{1.4147-9.4636}{60-40}=-0.4024\);
    • 第二步:上涨后为 \(\dfrac{0-4}{72-48}=-0.1667\),下跌后为 \(\dfrac{4-20}{48-32}=-1.0000\)。

delta 随时间变化

上面的例子表明,delta 在期权寿命内会随时间和股价不断变化。因此,要用期权和股票维持一个无风险对冲,必须定期调整股票持仓。这就是动态对冲,第 19a 章将详细讨论。

原书习题 13.8 问:两步树中能否构造一个在整个期权寿命内都无风险的静态组合?答案是不能——第一步之后 delta 变了,不调仓就不再无风险。


13.7 用 \(u\) 和 \(d\) 匹配波动率

三个参数

构造步长为 \(\Delta t\) 的二叉树需要三个参数:\(u\)、\(d\) 和 \(p\)。给定 \(u\)、\(d\) 后,\(p\) 必须使风险中性世界中的预期收益等于无风险利率:

\[p=\frac{e^{r\Delta t}-d}{u-d}. \tag{13.11}\]

\(u\) 和 \(d\) 则用来匹配股票的波动率。股票的波动率 \(\sigma\) 定义为:在很短的时间 \(\Delta t\) 内,股票收益率的标准差为 \(\sigma\sqrt{\Delta t}\),即方差为 \(\sigma^2\Delta t\)(第 14、15a 章会详细讨论)。

推导

在一个时间步内,股票收益率以概率 \(p\) 为 \(u-1\),以概率 \(1-p\) 为 \(d-1\)。由方差公式 \(\mathrm{Var}(X)=E(X^2)-[E(X)]^2\),匹配条件为

\[p(u-1)^2+(1-p)(d-1)^2-[p(u-1)+(1-p)(d-1)]^2=\sigma^2\Delta t. \tag{13.12}\]

化简这个式子。由 \(pu+(1-p)d=e^{r\Delta t}\),方差等于 \(pu^2+(1-p)d^2-e^{2r\Delta t}\)(平移不改变方差)。又

\[pu^2+(1-p)d^2=(u+d)[pu+(1-p)d]-ud=(u+d)e^{r\Delta t}-ud,\]

所以匹配条件化为

\[e^{r\Delta t}(u+d)-ud-e^{2r\Delta t}=\sigma^2\Delta t. \tag{13.13}\]

用 \(e^x=1+x+x^2/2!+\cdots\) 展开,并忽略 \(\Delta t^2\) 及更高阶项,可以验证一个解是

\[u=e^{\sigma\sqrt{\Delta t}},\qquad d=e^{-\sigma\sqrt{\Delta t}}.\]

验证:此时 \(ud=1\),\(u+d=2+\sigma^2\Delta t+O(\Delta t^2)\),

\[e^{r\Delta t}(u+d)-ud-e^{2r\Delta t}\approx(1+r\Delta t)(2+\sigma^2\Delta t)-1-(1+2r\Delta t)=\sigma^2\Delta t.\]

这就是 Cox、Ross、Rubinstein 使用的参数。

推导拆解:两处化简和最后的验证,逐步展开。 ① 为什么方差 \(=pu^2+(1-p)d^2-e^{2r\Delta t}\)?收益率 \(X=S_{\Delta t}/S_0-1\),而"减 1"只是平移,不改变方差,所以 \(\mathrm{Var}(X)=\mathrm{Var}(S_{\Delta t}/S_0)=E[(S_{\Delta t}/S_0)^2]-[E(S_{\Delta t}/S_0)]^2=pu^2+(1-p)d^2-(e^{r\Delta t})^2\)。最后一步用了 \(pu+(1-p)d=e^{r\Delta t}\)。 ② 为什么 \(pu^2+(1-p)d^2=(u+d)[pu+(1-p)d]-ud\)?把右边展开:\((u+d)(pu+(1-p)d)=pu^2+(1-p)ud+pud+(1-p)d^2=pu^2+(1-p)d^2+ud\),减去 \(ud\) 即得左边。这一步的目的是消掉 \(p\),让匹配条件只含 \(u,d\)。 ③ 验证 \(u=e^{\sigma\sqrt{\Delta t}}\)。记 \(x=\sigma\sqrt{\Delta t}\)(很小)。泰勒展开 \(u=1+x+\frac{x^2}{2}+\frac{x^3}{6}+\cdots\),\(d=1-x+\frac{x^2}{2}-\frac{x^3}{6}+\cdots\)。相加时奇次项抵消:\(u+d=2+x^2+O(x^4)=2+\sigma^2\Delta t+O(\Delta t^2)\)。相乘 \(ud=e^0=1\)。 ④ 再展开 \(e^{r\Delta t}\approx1+r\Delta t\),\(e^{2r\Delta t}\approx1+2r\Delta t\),代入左边:\((1+r\Delta t)(2+\sigma^2\Delta t)-1-(1+2r\Delta t)=2+\sigma^2\Delta t+2r\Delta t+r\sigma^2\Delta t^2-2-2r\Delta t=\sigma^2\Delta t+r\sigma^2\Delta t^2\)。丢掉 \(\Delta t^2\) 项就是 \(\sigma^2\Delta t\)。 为什么能丢?因为右边是 \(\sigma^2\Delta t\),相对误差是 \(r\Delta t\),步长越小越可忽略。为什么 \(u\) 里出现的是 \(\sqrt{\Delta t}\) 而不是 \(\Delta t\)?因为方差要和 \(\Delta t\) 成正比,标准差(也就是每步涨跌幅度)就得和 \(\sqrt{\Delta t}\) 成正比。这个"\(\sqrt{\Delta t}\) 规律"正是第 14 章维纳过程的核心。

真实世界中匹配波动率,结果相同

设真实世界中上涨概率为 \(p^*\),股票的预期收益率为 \(\mu\)。则 \(p^*u+(1-p^*)d=e^{\mu\Delta t}\),

\[p^*=\frac{e^{\mu\Delta t}-d}{u-d}. \tag{13.14}\]

用 \(p^*\) 代替 \(p\) 写出方差匹配方程,得到 \(e^{\mu\Delta t}(u+d)-ud-e^{2\mu\Delta t}=\sigma^2\Delta t\)。忽略高阶项后,解仍然是 \(u=e^{\sigma\sqrt{\Delta t}}\)、\(d=e^{-\sigma\sqrt{\Delta t}}\)。也就是说,真实世界的树与风险中性世界的树节点上的股价完全相同,只有概率不同(原书图 13.9)。

Girsanov 定理与测度变换

上述结果是 Girsanov 定理的一个体现:从风险中性世界转到真实世界时,股票的预期收益率改变,但波动率不变。更一般地,从一种风险偏好的世界转到另一种时,变量的预期增长率会改变,而波动率保持不变(第 28 章详述)。

改变风险偏好称为改变测度(changing the measure)。真实世界的测度称为 P 测度,风险中性世界的测度称为 Q 测度。本章记号中,\(p\) 是 Q 测度下的上涨概率,\(p^*\) 是 P 测度下的上涨概率。

白话解释:"测度"在这里就是"给每条路径分配概率的一套规则"。P 和 Q 用的是同一棵树(同样的节点、同样的可能结果),只是给上涨、下跌分配的权重不同。两者"认同哪些事情可能发生、哪些不可能",只是"可能性有多大"上意见不同。实务里的分工:定价、对冲、算隐含波动率用 Q;预测收益、算 VaR、做 alpha 研究用 P。把隐含概率当成真实概率去下注,是常见的错误。


13.8 二叉树公式

总结起来,步长为 \(\Delta t\) 的 CRR 二叉树由以下公式定义:

\[u=e^{\sigma\sqrt{\Delta t}}, \tag{13.15}\]
\[d=e^{-\sigma\sqrt{\Delta t}}, \tag{13.16}\]
\[p=\frac{a-d}{u-d}, \tag{13.17}\]
\[a=e^{r\Delta t}. \tag{13.18}\]

\(a\) 称为增长因子(growth factor),它是风险中性世界中标的资产在一个时间步内的期望增长倍数。13.11 节将看到,换成其他标的资产时只需改变 \(a\)。

例子

为美式看跌期权定价:\(S_0=50\),\(K=52\),\(r=5\%\),\(T=2\) 年,\(\sigma=30\%\),两步,\(\Delta t=1\):

\[u=e^{0.3}=1.3499,\quad d=1/1.3499=0.7408,\quad a=e^{0.05}=1.0513,\quad p=\frac{1.0513-0.7408}{1.3499-0.7408}=0.5097.\]

树上节点的股价(原书图 13.10):初始 50;第一步 67.49、37.04;第二步 91.11、50、27.44。

  • 末端看跌期权价值:0、2、24.56。
  • 上节点(67.49):继续持有价值 \(e^{-0.05}(0.5097\times0+0.4903\times2)=0.93\),不行权。
  • 下节点(37.04):继续持有价值 \(e^{-0.05}(0.5097\times2+0.4903\times24.56)=12.42\);立即行权 \(52-37.04=14.96\),行权。
  • 初始节点:\(e^{-0.05}(0.5097\times0.93+0.4903\times14.96)=7.43\);立即行权收益 2,不行权。

期权价值为 7.43。注意它与 13.5 节用 \(u=1.2\)、\(d=0.8\) 得到的 5.0894 不同——那里的 \(u\)、\(d\) 是随意给定的,并不对应 30% 的波动率。


13.9 增加步数

一两步的二叉树只能给出非常粗略的近似。实务中通常把期权寿命分为 30 步或更多。30 步的树有 31 个末端节点,隐含地考虑了 \(2^{30}\)(约 10 亿)条可能的股价路径——但由于树是重组的(recombining)(先涨后跌与先跌后涨到达同一个节点),计算量只与节点数 \((n+1)(n+2)/2\) 成正比。

无论多少步,公式 (13.15)–(13.18) 都不变,只是 \(\Delta t\) 变小。例如上例改为 5 步:\(\Delta t=0.4\),

\[u=e^{0.3\sqrt{0.4}}=1.2089,\quad d=0.8272,\quad a=e^{0.02}=1.0202,\quad p=\frac{1.0202-0.8272}{1.2089-0.8272}=0.5056.\]

当步数增加时,二叉树对股价行为的假设趋于与 BSM 模型相同,欧式期权的二叉树价格收敛到 BSM 价格(见本章附录)。


13.10 使用 DerivaGem

原书配套的 DerivaGem 3.00 软件可以直接构造二叉树。在 Equity_FX_Indx_Fut_Opts_Calc 工作表中选择 Equity、Binomial American,输入股价 50、波动率 30%、利率 5%、期限 2、行权价 52、步数 2,选择 Put,计算得到 7.428,Display Tree 显示与图 13.10 相同的树(红色数字表示行权节点)。

步数改变时价格的变化:

步数 美式看跌价格
2 7.43
5 7.671
500 7.47(精确到两位小数)

改为 Binomial European、500 步,欧式看跌价格为 6.76,与 Black–Scholes 公式的结果 6.76 一致。

收敛性要点:二叉树价格随步数增加以振荡的方式收敛(2 步 7.43、5 步 7.67、500 步 7.47),步数少时结果可能偏差很大,必须使用足够多的步数。本章"量化实战"会用自己写的程序复现这些数字,并展示振荡收敛的规律。


13.11 其他资产上的期权

股指、货币、期货期权的二叉树构造与股票期权完全相同,只是 \(p\) 的公式(即 \(a\))不同。节点上的期权价值(考虑提前行权之前)仍然是 \(p\) 乘上行节点价值加 \(1-p\) 乘下行节点价值,再按无风险利率折现。

支付连续股息率 \(q\) 的股票

在风险中性世界中,股票的总收益率必须是 \(r\)。股息贡献了收益率 \(q\),所以资本利得只需贡献 \(r-q\):

\[pS_0u+(1-p)S_0d=S_0e^{(r-q)\Delta t}\quad\Longrightarrow\quad p=\frac{e^{(r-q)\Delta t}-d}{u-d}.\]

仍取 \(u=e^{\sigma\sqrt{\Delta t}}\)、\(d=1/u\),只需令 \(a=e^{(r-q)\Delta t}\)。

股票指数

与第 5 章期货定价的处理一致,假设指数的成分股提供股息率 \(q\),处理方法同上。

例 13.1 股指当前为 810,波动率 20%,股息率 2%,无风险利率 5%。为 6 个月期、行权价 800 的欧式看涨期权定价,用两步树。

\(\Delta t=0.25\),\(u=e^{0.2\sqrt{0.25}}=1.1052\),\(d=0.9048\),\(a=e^{(0.05-0.02)\times0.25}=1.0075\),

\[p=\frac{1.0075-0.9048}{1.1052-0.9048}=0.5126.\]
每步折现因子 \(e^{-0.05\times0.25}=0.9876\)。节点指数:810;895.19、732.92;989.34、810.00、663.17。末端看涨期权价值 189.34、10.00、0;中间节点 100.66、5.06;期权价值 53.39(原书图 13.11)。

货币

外币可以看作提供外国无风险利率 \(r_f\) 收益的资产(持有外币可以按 \(r_f\) 生息),所以令 \(a=e^{(r-r_f)\Delta t}\)。

例 13.2 澳元当前价值 0.6100 美元,汇率波动率 12%,澳元无风险利率 7%,美元无风险利率 5%。为 3 个月期、行权价 0.6000 的美式看涨期权定价,用三步树。

\(\Delta t=0.08333\),\(u=e^{0.12\sqrt{0.08333}}=1.0352\),\(d=0.9660\),\(a=e^{(0.05-0.07)\times0.08333}=0.9983\),

\[p=\frac{0.9983-0.9660}{1.0352-0.9660}=0.4673.\]
期权价值 0.019(原书图 13.12),部分高位节点提前行权最优——外币利率高于本币利率时,持有外币的"股息"较高,美式看涨期权可能提前行权。

期货

建立期货多头或空头不需要成本,因此在风险中性世界中期货价格的预期增长率为零(第 18 章 18.7 节详述):

\[pF_0u+(1-p)F_0d=F_0\quad\Longrightarrow\quad p=\frac{1-d}{u-d},\]

即令 \(a=1\)。

例 13.3 期货价格 31,波动率 30%,无风险利率 5%。为 9 个月期、行权价 30 的美式看跌期权定价,用三步树。

\(\Delta t=0.25\),\(u=e^{0.3\times0.5}=1.1618\),\(d=0.8607\),\(a=1\),

\[p=\frac{1-0.8607}{1.1618-0.8607}=0.4626.\]
期权价值 2.84(原书图 13.13)。

统一形式

\[a=e^{(r-q)\Delta t},\]

其中 \(q\) 分别取:

标的资产 \(q\) \(a\)
无股息股票 0 \(e^{r\Delta t}\)
支付连续股息率的股票 / 股指 股息率 \(q\) \(e^{(r-q)\Delta t}\)
外汇 外币无风险利率 \(r_f\) \(e^{(r-r_f)\Delta t}\)
期货 \(r\) 1

在交易系统中,\(r-q\) 通常被抽象为**持有成本(cost of carry)**参数 \(b\),使同一套定价代码适用于股票、指数、外汇和期货期权。


附录:由二叉树推导 Black–Scholes–Merton 公式

本附录证明:当步数 \(n\to\infty\) 时,欧式看涨期权的二叉树价格收敛到 BSM 公式。推导较长,但每一步都只用到二项分布和中心极限定理(概率基础见第 02 册第 04b、08 章),值得仔细读一遍。

第一步:写出 \(n\) 步树的价格

用 \(n\) 步树为行权价 \(K\)、期限 \(T\) 的欧式看涨期权定价,每步长 \(T/n\)。若 \(n\) 步中有 \(j\) 次上涨、\(n-j\) 次下跌,到期股价为 \(S_0u^jd^{n-j}\),期权收益为 \(\max(S_0u^jd^{n-j}-K,0)\)。在风险中性世界中,恰好 \(j\) 次上涨的概率服从二项分布 \(\frac{n!}{(n-j)!\,j!}p^j(1-p)^{n-j}\)。风险中性预期收益按无风险利率折现:

\[c=e^{-rT}\sum_{j=0}^n\frac{n!}{(n-j)!\,j!}p^j(1-p)^{n-j}\max(S_0u^jd^{n-j}-K,0). \tag{13A.1}\]

第二步:确定哪些项非零

收益非零当且仅当 \(S_0u^jd^{n-j}>K\),即

\[\ln(S_0/K)>-j\ln u-(n-j)\ln d.\]

代入 \(u=e^{\sigma\sqrt{T/n}}\)、\(d=e^{-\sigma\sqrt{T/n}}\):

\[\ln(S_0/K)>n\sigma\sqrt{T/n}-2j\sigma\sqrt{T/n},\]

即

\[j>\alpha,\qquad \alpha=\frac n2-\frac{\ln(S_0/K)}{2\sigma\sqrt{T/n}}.\]

于是

\[c=e^{-rT}(S_0U_1-KU_2), \tag{13A.4}\]

其中

\[U_1=\sum_{j>\alpha}\frac{n!}{(n-j)!\,j!}p^j(1-p)^{n-j}u^jd^{n-j}, \tag{13A.2}\]
\[U_2=\sum_{j>\alpha}\frac{n!}{(n-j)!\,j!}p^j(1-p)^{n-j}. \tag{13A.3}\]

第三步:求 \(U_2\)

\(U_2\) 就是"成功概率为 \(p\) 的 \(n\) 次伯努利试验中成功次数大于 \(\alpha\)"的概率。\(n\to\infty\) 时,二项分布趋于正态分布,均值 \(np\)、标准差 \(\sqrt{np(1-p)}\)。所以

\[U_2=N\!\left(\frac{np-\alpha}{\sqrt{np(1-p)}}\right), \tag{13A.5}\]

其中 \(N(\cdot)\) 是标准正态分布的累积分布函数。代入 \(\alpha\):

\[U_2=N\!\left(\frac{\ln(S_0/K)}{2\sigma\sqrt T\sqrt{p(1-p)}}+\frac{\sqrt n\,(p-\tfrac12)}{\sqrt{p(1-p)}}\right). \tag{13A.6}\]

由

\[p=\frac{e^{rT/n}-e^{-\sigma\sqrt{T/n}}}{e^{\sigma\sqrt{T/n}}-e^{-\sigma\sqrt{T/n}}}\]

做级数展开,可得 \(p\approx\frac12+\frac{(r-\sigma^2/2)\sqrt{T/n}}{2\sigma}\)。所以 \(n\to\infty\) 时

\[p(1-p)\to\frac14,\qquad\sqrt n\left(p-\frac12\right)\to\frac{(r-\sigma^2/2)\sqrt T}{2\sigma}.\]

代入式 (13A.6):

\[U_2=N\!\left(\frac{\ln(S_0/K)+(r-\sigma^2/2)T}{\sigma\sqrt T}\right). \tag{13A.7}\]

推导拆解:第三步里被省略的两处。 ① 从 (13A.5) 到 (13A.6)。分子 \(np-\alpha=np-\frac n2+\frac{\ln(S_0/K)}{2\sigma\sqrt{T/n}}=n(p-\tfrac12)+\frac{\sqrt n\ln(S_0/K)}{2\sigma\sqrt T}\)(用了 \(\sqrt{T/n}=\sqrt T/\sqrt n\))。分母 \(\sqrt n\sqrt{p(1-p)}\)。分子分母同除以 \(\sqrt n\) 就得到 (13A.6) 的两项。 ② \(p\) 的级数展开。记 \(h=T/n\)。分子 \(e^{rh}-e^{-\sigma\sqrt h}\approx(1+rh)-(1-\sigma\sqrt h+\frac{\sigma^2h}{2})=\sigma\sqrt h+(r-\frac{\sigma^2}{2})h\);分母 \(e^{\sigma\sqrt h}-e^{-\sigma\sqrt h}\approx2\sigma\sqrt h\)(奇次项相加,偶次项抵消,下一项是 \(h^{3/2}\) 阶)。相除:\(p\approx\frac12+\frac{(r-\sigma^2/2)\sqrt h}{2\sigma}\)。 ③ 取极限。\(p-\frac12\) 是 \(\sqrt h=\sqrt{T/n}\) 的量级,乘以 \(\sqrt n\) 后得到一个有限的常数 \(\frac{(r-\sigma^2/2)\sqrt T}{2\sigma}\);同时 \(p\to\frac12\) 使 \(\sqrt{p(1-p)}\to\frac12\)。把 \(\frac12\) 代入 (13A.6) 两项的分母,第一项变成 \(\frac{\ln(S_0/K)}{\sigma\sqrt T}\),第二项变成 \(\frac{(r-\sigma^2/2)\sqrt T}{\sigma}=\frac{(r-\sigma^2/2)T}{\sigma\sqrt T}\),合起来就是 (13A.7)。 这里的关键现象:每步的"偏离 1/2"非常小(\(\propto1/\sqrt n\)),但步数有 \(n\) 步,累积起来恰好有限。这和"每步方差 \(\propto1/n\)、\(n\) 步方差有限"是同一个道理。

第四步:求 \(U_1\)

把 \(U_1\) 改写为

\[U_1=\sum_{j>\alpha}\frac{n!}{(n-j)!\,j!}(pu)^j[(1-p)d]^{n-j}. \tag{13A.8}\]

定义

\[p^*=\frac{pu}{pu+(1-p)d}, \tag{13A.9}\]

则 \(1-p^*=\frac{(1-p)d}{pu+(1-p)d}\),于是

\[U_1=[pu+(1-p)d]^n\sum_{j>\alpha}\frac{n!}{(n-j)!\,j!}(p^*)^j(1-p^*)^{n-j}.\]

在风险中性世界中 \(pu+(1-p)d=e^{rT/n}\),所以 \([pu+(1-p)d]^n=e^{rT}\),而求和项是"成功概率为 \(p^*\) 时成功次数大于 \(\alpha\)"的概率。同样用正态近似,并由级数展开得 \(p^*(1-p^*)\to\frac14\)、\(\sqrt n(p^*-\frac12)\to\frac{(r+\sigma^2/2)\sqrt T}{2\sigma}\),得到

\[U_1=e^{rT}N\!\left(\frac{\ln(S_0/K)+(r+\sigma^2/2)T}{\sigma\sqrt T}\right). \tag{13A.10}\]

结论

代入式 (13A.4):

\[\boxed{c=S_0N(d_1)-Ke^{-rT}N(d_2)}\]
\[d_1=\frac{\ln(S_0/K)+(r+\sigma^2/2)T}{\sigma\sqrt T},\qquad d_2=\frac{\ln(S_0/K)+(r-\sigma^2/2)T}{\sigma\sqrt T}=d_1-\sigma\sqrt T.\]

这就是欧式看涨期权的 BSM 公式(第 15b 章将详细讨论,并用风险中性定价给出另一种推导)。

两个概率的直观含义:\(N(d_2)\) 就是 \(U_2\),即风险中性世界中期权到期被行权(\(S_T>K\))的概率;\(N(d_1)\) 是在另一个以 \(p^*\) 为上涨概率的测度下的行权概率——这个测度以股票本身作为计价单位(numéraire),第 28 章会系统讨论。

金融直觉:BSM 公式可以拆成两条腿来读。看涨期权到期时,若行权,你"收到一股股票、付出 \(K\) 元现金"。付现金那条腿今天的价值 \(=Ke^{-rT}\times\)(行权概率)\(=Ke^{-rT}N(d_2)\),这很直接。收股票那条腿的价值不是 \(S_0N(d_2)\),因为股价高的路径上行权的可能性更大、拿到的股票也更值钱,二者相关;把这种相关性计入后,权重从 \(N(d_2)\) 变成了 \(N(d_1)\)。这里的 \(p^*\)(注意:它和 13.2 节真实世界的 \(p^*\) 是不同的东西,只是记号相同)就是"按股票价值加权后的上涨概率"。另外,\(N(d_1)\) 恰好也是看涨期权的 delta,第 19a 章会用到。


量化实战:实现一个通用的 CRR 定价引擎

二叉树在量化交易系统中的地位非常稳固:

  • 美式期权与提前行权:美国个股期权都是美式的,含离散股息的美式期权、可转债(可提前转换、可赎回、可回售)都需要倒推式的数值方法,二叉树是其中最简单可靠的一种,也常作为有限差分、最小二乘蒙特卡洛(LSM)等更复杂方法的基准。
  • 计算复杂度:\(n\) 步树倒推的时间复杂度为 \(O(n^2)\),用一维数组滚动更新时空间复杂度为 \(O(n)\)。数百步的树在现代计算机上只需毫秒级时间。
  • 收敛性处理:二叉树价格随步数振荡收敛。实务中常用相邻奇偶步数的平均、Richardson 外推或 Leisen–Reimer 等改进的树来加速收敛(二叉树的实践细节见第 21a 章)。
  • 持有成本抽象:用 \(a=e^{(r-q)\Delta t}\) 把股票、指数、外汇、期货期权统一在一套代码里。
  • 测度意识:定价用 Q 测度;预测收益、风险管理(VaR、情景分析)和 alpha 研究用 P 测度。混淆两者是常见错误——例如把风险中性概率当成事件的真实概率,或用真实漂移给衍生品定价。期权隐含的风险中性概率与真实概率之差(方差风险溢价、偏度溢价)本身就是可交易的因子。

下面的代码实现一个通用 CRR 引擎(支持欧式/美式、看涨/看跌、连续股息率或持有成本),并完成五项任务:复现原书全部数值例子;计算真实世界折现率;展示欧式期权价格向 BSM 价格的振荡收敛及奇偶平均的效果;提取美式看跌期权的提前行权边界;在随机抽取的"真实世界"路径上验证 delta 动态复制。BSM 公式在第 15b 章才正式讲,这里只用作收敛的参照值。

import numpy as np
from scipy.stats import norm

def tree_price(S0, K, r, T, n, kind="put", american=False, q=0.0, sigma=None, u=None, d=None):
    """CRR 二叉树。q:连续股息率 / 外币利率 r_f / 期货取 q=r(即 a=1)。
    可直接给定 u、d(教学例子),否则用 u=e^{σ√Δt}, d=1/u。返回 (价格, 第一步 delta)。"""
    dt = T / n
    if u is None:
        u = np.exp(sigma * np.sqrt(dt)); d = 1 / u
    a = np.exp((r - q) * dt)
    p = (a - d) / (u - d)
    disc = np.exp(-r * dt)
    j = np.arange(n + 1)
    S = S0 * u**j * d**(n - j)                       # 末端节点,j 为上涨次数
    V = np.maximum(S - K, 0) if kind == "call" else np.maximum(K - S, 0)
    for step in range(n - 1, -1, -1):
        S = S0 * u**np.arange(step + 1) * d**(step - np.arange(step + 1))
        if step == 0:
            delta = (V[1] - V[0]) / (S0 * u - S0 * d)  # 在根节点处取第一步的 delta
        V = disc * (p * V[1:] + (1 - p) * V[:-1])    # 继续持有价值 (13.5)
        if american:
            ex = np.maximum(S - K, 0) if kind == "call" else np.maximum(K - S, 0)
            V = np.maximum(V, ex)                     # 与立即行权比较
    return V[0], delta

def bs(S, K, r, T, sig, kind, q=0.0):
    d1 = (np.log(S/K) + (r - q + sig**2/2)*T) / (sig*np.sqrt(T)); d2 = d1 - sig*np.sqrt(T)
    if kind == "call": return S*np.exp(-q*T)*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
    return K*np.exp(-r*T)*norm.cdf(-d2) - S*np.exp(-q*T)*norm.cdf(-d1)

print("—— 原书例题复核 ——")
print("13.1 单步看涨      %.4f  delta=%.4f" % tree_price(20, 21, .12, .25, 1, "call", u=1.1, d=0.9))
print("13.3 两步看涨      %.4f  delta=%.4f" % tree_price(20, 21, .12, .5, 2, "call", u=1.1, d=0.9))
print("13.4 欧式看跌      %.4f  delta=%.4f" % tree_price(50, 52, .05, 2, 2, "put", u=1.2, d=0.8))
print("13.5 美式看跌      %.4f" % tree_price(50, 52, .05, 2, 2, "put", True, u=1.2, d=0.8)[0])
for n in (2, 5, 500):
    print(f"13.8 CRR 美式看跌 n={n:<3d} %.4f" % tree_price(50, 52, .05, 2, n, "put", True, sigma=.3)[0])
print("     CRR 欧式看跌 n=500 %.4f, BSM = %.4f" % (tree_price(50, 52, .05, 2, 500, "put", sigma=.3)[0],
                                                bs(50, 52, .05, 2, .3, "put")))
print("例13.1 指数欧式看涨 %.2f" % tree_price(810, 800, .05, .5, 2, "call", q=.02, sigma=.2)[0])
print("例13.2 澳元美式看涨 %.4f" % tree_price(.61, .60, .05, .25, 3, "call", True, q=.07, sigma=.12)[0])
print("例13.3 期货美式看跌 %.2f" % tree_price(31, 30, .05, .75, 3, "put", True, q=.05, sigma=.3)[0])

# 真实世界折现率:股票预期收益 16% 时,单步例中看涨期权隐含的折现率
p_star = (20*np.exp(.16*.25) - 18) / 4
print(f"\n真实世界上涨概率 p* = {p_star:.4f}, 隐含折现率 = {-np.log(.633/p_star)/.25:.2%}")

# 收敛性:欧式看涨的二叉树误差随 n 振荡收敛;奇偶平均可显著改善
S0, K, r, T, sig = 50, 52, .05, 2, .3
ref = bs(S0, K, r, T, sig, "call")
print(f"\nBSM 欧式看涨 = {ref:.5f}")
print(" n    树价格     误差     (n,n+1)平均误差")
for n in (10, 11, 50, 51, 100, 101, 500, 501):
    v = tree_price(S0, K, r, T, n, "call", sigma=sig)[0]
    if n % 2 == 0:
        avg = 0.5 * (v + tree_price(S0, K, r, T, n + 1, "call", sigma=sig)[0])
        print(f"{n:4d} {v:9.5f} {v-ref:+9.5f}   {avg-ref:+9.5f}")
    else:
        print(f"{n:4d} {v:9.5f} {v-ref:+9.5f}")

# 美式看跌的提前行权边界:每个时间点上"行权最优"的最高股价
def exercise_boundary(S0, K, r, T, n, sigma):
    dt = T/n; u = np.exp(sigma*np.sqrt(dt)); d = 1/u
    p = (np.exp(r*dt) - d)/(u - d); disc = np.exp(-r*dt)
    V = np.maximum(K - S0*u**np.arange(n+1)*d**(n-np.arange(n+1)), 0)
    bnd = {}
    for step in range(n-1, -1, -1):
        S = S0*u**np.arange(step+1)*d**(step-np.arange(step+1))
        cont = disc*(p*V[1:] + (1-p)*V[:-1]); ex = np.maximum(K - S, 0)
        V = np.maximum(cont, ex)
        hit = S[(ex > cont) & (ex > 0)]
        bnd[step*dt] = hit.max() if hit.size else np.nan
    return bnd
b = exercise_boundary(50, 52, .05, 2, 400, .3)
print("\n美式看跌提前行权边界 S*(t):",
      {t: round(float(b[min(b, key=lambda s: abs(s-t))]), 2) for t in (0.5, 1.0, 1.5, 1.9)})

# 动态 delta 复制:在二叉树世界里,按 delta 调仓的自融资组合精确复制期权收益,
# 与真实上涨概率无关(这里用 p*=0.9 的"真实世界"随机抽路径)
def replicate(S0, K, r, T, n, sigma, p_real, rng):
    dt = T/n; u = np.exp(sigma*np.sqrt(dt)); d = 1/u
    p = (np.exp(r*dt) - d)/(u - d); disc = np.exp(-r*dt)
    # 预先算出整棵树的欧式看涨价值 V[step][j]
    V = [None]*(n+1)
    V[n] = np.maximum(S0*u**np.arange(n+1)*d**(n-np.arange(n+1)) - K, 0)
    for step in range(n-1, -1, -1):
        V[step] = disc*(p*V[step+1][1:] + (1-p)*V[step+1][:-1])
    cash, j, S = V[0][0], 0, S0                 # 以期权价格作为初始资金
    shares = 0.0
    for step in range(n):
        Su, Sd = S*u, S*d
        new_shares = (V[step+1][j+1] - V[step+1][j]) / (Su - Sd)   # 式 (13.1)
        cash -= (new_shares - shares) * S                          # 自融资调仓
        shares = new_shares
        cash *= np.exp(r*dt)
        up = rng.random() < p_real
        j += up; S = Su if up else Sd
    return shares*S + cash - max(S - K, 0)      # 复制误差
rng = np.random.default_rng(1)
errs = [replicate(50, 52, .05, 2, 50, .3, 0.9, rng) for _ in range(1000)]
print(f"1000 条真实世界路径上的 delta 复制误差:最大绝对值 = {np.max(np.abs(errs)):.2e}")

关键输出:

—— 原书例题复核 ——
13.1 单步看涨      0.6330  delta=0.2500
13.3 两步看涨      1.2822  delta=0.5064
13.4 欧式看跌      4.1927  delta=-0.4025
13.5 美式看跌      5.0896
13.8 CRR 美式看跌 n=2   7.4284
13.8 CRR 美式看跌 n=5   7.6709
13.8 CRR 美式看跌 n=500 7.4710
     CRR 欧式看跌 n=500 6.7569, BSM = 6.7601
例13.1 指数欧式看涨 53.39
例13.2 澳元美式看涨 0.0189
例13.3 期货美式看跌 2.84

真实世界上涨概率 p* = 0.7041, 隐含折现率 = 42.55%

BSM 欧式看涨 = 9.70859
 n    树价格     误差     (n,n+1)平均误差
  10   9.69546  -0.01313    +0.05769
  11   9.83710  +0.12851
  50   9.73568  +0.02708    +0.01413
  51   9.70977  +0.00117
 100   9.72653  +0.01794    +0.00095
 101   9.69255  -0.01605
 500   9.70531  -0.00329    +0.00014
 501   9.71217  +0.00358

美式看跌提前行权边界 S*(t): {0.5: 34.13, 1.0: 35.61, 1.5: 38.76, 1.9: 44.02}
1000 条真实世界路径上的 delta 复制误差:最大绝对值 = 1.02e-12

解读:

  • 原书数字全部复现。第四位小数的微小差异(1.2822 vs 1.2823、4.1927 vs 4.1923、5.0896 vs 5.0894)来自原书手算时把 \(p\) 四舍五入到 4 位;DerivaGem 的 7.428、7.671、7.47、6.76 和例 13.1–13.3 的 53.39、0.019、2.84 都与程序结果一致。
  • 振荡收敛:\(n=10\) 与 \(n=11\) 的误差分别是 −0.013 和 +0.129,符号与大小都在跳动,误差的大小取决于行权价相对于末端节点网格的位置。步数较大时,相邻奇偶步数的平均能把误差降低一个数量级以上(\(n=100\) 时从 0.018 降到 0.001;\(n=500\) 时从 0.003 降到 0.0001),但步数很少时并不保证改善(\(n=10\) 时平均反而更差)。生产系统中通常同时使用足够多的步数和改进的格式。
  • 提前行权边界:对这个 2 年期美式看跌期权,距到期越近,触发提前行权的临界股价越高(\(t=0.5\) 时约 34.1,\(t=1.9\) 时约 44.0,到期时趋于 \(K=52\))。股价低于边界时持有人应立即行权。这条边界是美式期权定价的核心,没有解析解。
  • delta 复制:以期权价格作为初始资金,在每个节点按式 (13.1) 调整股票持仓、其余资金按无风险利率存放,1000 条路径上的复制误差都在 \(10^{-12}\) 量级(浮点误差)。路径是按真实上涨概率 0.9 抽取的,与风险中性概率毫无关系——这就是"期权价格与真实概率无关"的最直接证明:无论世界怎样演化,复制组合都能精确交付期权收益,所以期权只能值复制成本。连续时间、离散调仓的真实世界中,复制不再精确,对冲误差与交易成本的权衡见第 19a 章。

本章小结

在单步二叉树中,持有 \(\Delta=\frac{f_u-f_d}{S_0u-S_0d}\) 股股票并卖出 1 份期权构成无风险组合,无套利要求它只赚无风险利率,由此得到 \(f=e^{-r\Delta t}[pf_u+(1-p)f_d]\),其中 \(p=\frac{a-d}{u-d}\)。期权价格与股票的真实预期收益和真实上涨概率无关,因为这些信息已体现在股价中。\(p\) 是风险中性概率:在它之下股价的期望以无风险利率增长。风险中性定价原理说,衍生品价值等于风险中性世界中的预期收益按无风险利率折现,这个结果在真实世界中同样正确;而在真实世界中直接定价则需要一个事先无法知道的折现率(单步例中看涨期权为 42.6%)。多步树从末端倒推,美式期权在每个节点取继续持有价值与立即行权收益中的较大者。delta 随节点变化,对冲需要动态调整。CRR 参数 \(u=e^{\sigma\sqrt{\Delta t}}\)、\(d=1/u\) 用于匹配波动率;真实世界与风险中性世界的树节点相同、只有概率不同,这是 Girsanov 定理的体现(P 测度与 Q 测度)。其他资产只需改变增长因子 \(a\)。步数趋于无穷时,欧式期权的二叉树价格以振荡方式收敛到 BSM 公式。

概念 公式
对冲比率 \(\Delta=\dfrac{f_u-f_d}{S_0u-S_0d}\)
单步定价 \(f=e^{-r\Delta t}[pf_u+(1-p)f_d]\)
风险中性概率 \(p=\dfrac{a-d}{u-d}\),需 \(d<a<u\)
CRR 参数 \(u=e^{\sigma\sqrt{\Delta t}}\),\(d=e^{-\sigma\sqrt{\Delta t}}\)
增长因子 股票 \(e^{r\Delta t}\);股息/指数 \(e^{(r-q)\Delta t}\);外汇 \(e^{(r-r_f)\Delta t}\);期货 1
两步定价 \(f=e^{-2r\Delta t}[p^2f_{uu}+2p(1-p)f_{ud}+(1-p)^2f_{dd}]\)
美式期权 节点价值 = max(继续持有价值, 立即行权收益)
真实世界概率 \(p^*=\dfrac{e^{\mu\Delta t}-d}{u-d}\);树的节点与 Q 测度相同
波动率匹配 \(e^{r\Delta t}(u+d)-ud-e^{2r\Delta t}=\sigma^2\Delta t\)
极限 \(c=S_0N(d_1)-Ke^{-rT}N(d_2)\)

练习

基础

  1. 股价 40,1 个月后为 42 或 38,无风险利率 8%。分别用无套利方法和风险中性方法为 1 个月期、行权价 39 的欧式看涨期权定价。 提示:\(\Delta=3/4=0.75\),组合价值 \(38\times0.75=28.5\),\(f=40\times0.75-28.5e^{-0.08/12}=1.69\);\(p=(40e^{0.08/12}-38)/4=0.5669\),\(f=e^{-0.08/12}\times0.5669\times3=1.69\)(原书习题 13.1)。

  2. 股价 50,6 个月后为 45 或 55,无风险利率 10%。求 6 个月期、行权价 50 的欧式看跌期权价格。 提示:\(p=(50e^{0.05}-45)/10=0.7564\),看跌期权在下跌时值 5,\(f=e^{-0.05}\times0.2436\times5=1.16\)(原书习题 13.4)。

  3. 解释为什么在单步二叉树中期权价格与股票的真实上涨概率无关。 提示:期权价格是相对于股价确定的;真实概率已经反映在股价中;无风险组合的构造不需要概率。

  4. 股价 100,波动率 25%,无风险利率 4%,用 CRR 参数构造步长 3 个月的树,求 \(u\)、\(d\)、\(p\)。若标的是期货呢? 提示:\(u=e^{0.125}=1.1331\),\(d=0.8825\),\(a=e^{0.01}=1.0101\),\(p=0.5089\);期货 \(a=1\),\(p=(1-0.8825)/(1.1331-0.8825)=0.4688\)。

  5. 在 13.4 节的两步看跌例子中,验证看涨-看跌平价是否成立(需要先算出同一棵树上行权价 52 的欧式看涨期权价格)。 提示:末端看涨价值 20、0、0,\(c=e^{-0.1}\times0.6282^2\times20=7.1411\);\(p+S_0=4.1923+50=54.19\),\(c+Ke^{-rT}=7.14+52e^{-0.1}=54.19\),成立(原书习题 13.12 类似)。

进阶

  1. 某衍生品在 2 年后支付 \(S_T^2\)。用 13.4 节的树(\(S_0=50\),\(u=1.2\),\(d=0.8\),\(r=5\%\))为它定价。 提示:末端收益 5184、2304、1024,价格 \(e^{-0.1}(0.6282^2\times5184+2\times0.6282\times0.3718\times2304+0.3718^2\times1024)\approx2{,}953\)(原书习题 13.14 类似)。

  2. 证明在单步树中,若 \(e^{r\Delta t}\ge u\),则存在套利机会,并说明此时 \(p\) 会怎样。 提示:卖空股票、投资无风险资产,到期最多需付 \(S_0u\le S_0e^{r\Delta t}\);此时 \(p\ge1\),不再是概率。

  3. 用三步 CRR 树为下列美式看跌期权定价并找出提前行权的节点:\(S_0=40\),\(K=42\),\(r=6\%\),\(\sigma=30\%\),\(T=0.75\)。再用 500 步树计算并与欧式价格比较。 提示:直接调用本章代码中的 tree_price 即可;提前行权节点集中在树的下半部分。

  4. 在 13.2 节的单步例子中,股票真实预期收益为 16%。计算同一看跌期权(行权价 21)的价格和它的真实世界折现率,解释为什么是负数。 提示:看跌期权上涨时值 0、下跌时值 3;\(f=e^{-0.03}\times0.3477\times3=1.0123\);真实预期收益 \(0.2959\times3=0.8878\),折现率 \(R=-4\ln(1.0123/0.8878)\approx-52.5\%\)。看跌期权的 beta 为负,是保险,投资者接受负的预期收益(原书习题 13.27)。

  5. 推导支付连续股息率 \(q\) 时 \(p\) 的公式,并说明为什么有高股息时美式看涨期权可能提前行权。 提示:\(pS_0u+(1-p)S_0d=S_0e^{(r-q)\Delta t}\);股息使持有期权而非股票的机会成本增加,深度实值时行权拿到股票、获得股息更划算(参见例 13.2 的外汇看涨期权)。

原书推荐习题:13.1、13.11、13.21(单步树两种方法对照,夯实无套利与风险中性定价);13.8(理解为何需要动态对冲);13.13、13.22、13.23(美式看跌的提前行权判断);13.14、13.24(非标准收益衍生品的定价);13.16、13.20、13.29(计算对冲头寸,理解 delta 的动态);13.25(步数与收敛,建议自己编程实现 CRR 树);13.27(真实世界折现率的不确定性)。


原书对照

本章小节 原书章节 PDF 页码
13.1 单步二叉树与无套利论证 13.1 A One-Step Binomial Model and a No-Arbitrage Argument p.297–300
13.2 风险中性定价 13.2 Risk-Neutral Valuation p.300–302
13.3 两步二叉树 13.3 Two-Step Binomial Trees p.302–305
13.4 看跌期权的例子 13.4 A Put Example p.305–306
13.5 美式期权 13.5 American Options p.306–307
13.6 Delta 13.6 Delta p.307–308
13.7 匹配波动率 13.7 Matching Volatility with u and d p.308–310
13.8 二叉树公式 13.8 The Binomial Tree Formulas p.310–311
13.9 增加步数 13.9 Increasing the Number of Steps p.311–312
13.10 使用 DerivaGem 13.10 Using DerivaGem p.311–313
13.11 其他资产上的期权 13.11 Options on Other Assets p.312–315
小结、延伸阅读 Summary, Further Reading p.315–316
习题 Practice Questions 13.1–13.29 p.317–320
附录 Appendix: Derivation of the Black–Scholes–Merton Option-Pricing Formula from a Binomial Tree p.321–324

原书为 Hull《Options, Futures, and Other Derivatives》第 9 版 Global Edition(Pearson 2018),表中为 PDF 页码。延伸阅读:Coval & Shumway (2001) 期权的预期收益;Cox, Ross & Rubinstein (1979);Rendleman & Bartter (1979) 两状态期权定价;Shreve《Stochastic Calculus for Finance I》。