第 27b 章 数值方法补充:可转债、路径依赖、障碍、多资产与美式蒙特卡洛
第 21a–21c 章介绍了二叉树、三叉树、蒙特卡洛和有限差分三类基本数值方法。它们各有所长:树和有限差分擅长处理提前行权,蒙特卡洛擅长处理路径依赖和多个随机变量。真实的产品往往同时具有好几种特征:可转债既有提前转换又有发行人赎回还有信用风险;美式亚式期权既路径依赖又可提前行权;百慕大互换期权既有提前行权又依赖整条曲线。本章介绍把这些方法推广到复杂产品的五种技术:
- 在二叉树中加入违约分支给可转债定价;
- 在树的每个节点为路径函数选代表值并插值,处理路径依赖;
- 让树的节点落在障碍上,解决障碍期权收敛慢的问题;
- 为两个相关资产建树的三种方法;
- 用最小二乘回归或行权边界参数化让蒙特卡洛处理美式期权。
这些技术在今天的定价库中依然是标准做法,尤其是第 5 种(Longstaff–Schwartz 方法),几乎所有带提前终止条款的结构化产品都靠它定价。
学习目标
- 会构造带违约分支的股价二叉树,理解节点规则 \(\max[\min(Q_1,Q_2),Q_3]\),复现例 27.1 的可转债价值 106.93。
- 理解 Hull–White 路径依赖树的两个适用条件,会用"代表值 + 插值"给美式回望和美式亚式期权定价。
- 解释树方法给障碍期权定价时收敛慢的原因(内障碍与外障碍),会用"节点落在障碍上"的三叉树修正。
- 了解两相关资产建树的三种方法:变量变换、非矩形树、调整概率。
- 掌握 Longstaff–Schwartz 最小二乘蒙特卡洛的每个细节,理解为什么它给出的是下界,以及行权边界参数化方法。
读前导读
这一章在解决什么问题
你在 CFA 里见过单步二叉树:用无套利定出风险中性概率,再把期末收益按这个概率求平均、按无风险利率贴现。第 21a–21c 章把它扩展成多步树、蒙特卡洛和有限差分。本章不再引入新理论,只做一件事:把这几种工具"改装"一下,去对付真实世界里条款复杂的产品。
可以把本章看成五个独立的"改装案例"。可转债的难点是同时存在三方选择(持有人转股、发行人赎回、公司可能违约),办法是在树上加一个"违约分支",并在每个节点比较三种价值。亚式、回望期权的难点是收益取决于整条路径,办法是让每个节点多记一个"路径摘要"(平均价或最高价)。障碍期权的难点是树上的节点不恰好落在障碍上,导致误差很大,办法是调整步长让节点踩在障碍上。两资产期权的难点是相关性,办法是变量变换或调整分支概率。美式期权用蒙特卡洛的难点是"继续持有值多少"是一个条件期望,办法是用回归来估它,这就是业界最常用的 Longstaff–Schwartz(LSM)。
和你熟悉的知识对照:LSM 里的回归就是 CFA 二级的多元回归,只不过因变量是"继续持有后实际拿到的贴现现金流",自变量是当前股价的多项式;回归的拟合值被当作"继续持有的公允价值"。可转债的 \(\lambda\) 就是信用分析里的违约强度,和 CDS 利差大致满足"利差 ≈ \(\lambda\times(1-\)回收率\()\)"。
需要先想起来的数学
1. 矩匹配。 树的分支概率和步长不是随便选的,而是让树上一步的均值和方差等于连续模型在 \(\Delta t\) 内的均值和方差。例如二叉树要求 \(pu+(1-p)d=e^{r\Delta t}\)(均值对上)。本章的可转债树、障碍三叉树都是这样解两三个方程得到概率。可回顾 第 00 册第 07 章 概率中的分析工具 中期望与矩的部分。
2. 大 O 记号。 \(O(\sqrt{\Delta t})\) 表示"误差大约和 \(\sqrt{\Delta t}\) 成正比"。步数翻 4 倍,\(\Delta t\) 变成 1/4,\(\sqrt{\Delta t}\) 只减半,误差也大致只减半,所以收敛慢。见 第 00 册第 07 章 中大 O 小 o 一节。
3. 线性插值。 已知 \(x_1\) 处值 \(y_1\)、\(x_2\) 处值 \(y_2\),求中间 \(x\) 处的值:\(y=\dfrac{(x-x_1)y_2+(x_2-x)y_1}{x_2-x_1}\),即按距离反比加权。例:\(x_1=0,y_1=10\),\(x_2=4,y_2=18\),则 \(x=1\) 处为 \((1\times18+3\times10)/4=12\)。
4. 方差与协方差的运算。 \(\mathrm{Var}(aX+bY)=a^2\mathrm{Var}X+b^2\mathrm{Var}Y+2ab\,\mathrm{Cov}(X,Y)\)。这和组合方差公式完全一样,27.7 节的变量变换就靠它验证"新变量不相关"。见 第 00 册第 06 章 线性代数速成 的协方差矩阵部分。
5. 条件期望与回归。 "继续持有价值"\(=\mathbb{E}[\text{未来贴现现金流}\mid \text{当前股价}]\)(\(\mathbb{E}[\cdot\mid\cdot]\) 读作"在已知……的条件下的期望")。最小二乘回归的拟合值正是条件期望的最佳近似(在所选函数族中)。见 第 00 册第 07 章 条件期望一节。
怎么读这一章
核心必读是 27.4(可转债)和 27.8 的最小二乘法(LSM)。这两部分在 A 股转债和雪球类产品中天天用到,建议对照原文的数值例子手算一两个节点。27.6 只需理解"为什么普通树对障碍不准"和"让节点落在障碍上"这个思路,三叉树概率公式第一次可以只看结论。27.5 的代表值插值法思路简单,看懂节点 X 的计算即可。27.7 两资产树第一次可只读方法三(调整概率),方法一、二留待需要时再看。行权边界参数化和上界部分,理解"为什么是下界"这一个结论就够了。
27.4 可转换债券
产品特征
可转换债券(convertible bond)的持有人可以在未来某些时间把债券换成发行公司的股票。转换比率(conversion ratio)为每张债可换的股数,可以随时间变化。可转债几乎总是可赎回的:发行人可以在某些时间按预定价格买回。被赎回时持有人总有权先转换,所以赎回条款的实际作用是迫使持有人比自愿更早地转换。有时赎回权以股价高于某水平为前提(A 股转债的"强赎"条款就是这一类)。
信用风险很重要。 忽略信用风险会高估票息和本金的价值。Ingersoll(1977)用类似 Merton(1974,第 24 章)的模型:假设发行人的总资产服从几何布朗运动,把股权、可转债和其他债务都当作公司资产的或有索取权。这在理论上完美,但公司资产不可观测,实务中很少用。
实务常用的简化模型
直接对股价建模:股价服从几何布朗运动,但在每个 \(\Delta t\) 内有 \(\lambda\Delta t\) 的概率违约,违约时股价跌到 0,债券获得回收值。\(\lambda\) 是第 24.2 节的风险中性违约强度(hazard rate)。修改后的二叉树每个节点有三个分支:
- 概率 \(p_u\) 上涨比例 \(u\);
- 概率 \(p_d\) 下跌比例 \(d\);
- 概率 \(\lambda\Delta t\)(更准确地,\(1-e^{-\lambda\Delta t}\))违约,股价变为 0。
匹配股价分布的前两阶矩可得
推导拆解:\(p_u\)、\(p_d\) 来自两个条件。 第一,三个分支概率加起来为 1,违约概率是 \(1-e^{-\lambda\Delta t}\),所以不违约的两个分支合计 \(p_u+p_d=e^{-\lambda\Delta t}\)。 第二,风险中性下股价的期望增长率必须是 \(r-q\),即 \(p_u\cdot uS+p_d\cdot dS+(1-e^{-\lambda\Delta t})\cdot 0=aS\)。违约时股价为 0,这一项直接消失。 两式联立:由第一式 \(p_d=e^{-\lambda\Delta t}-p_u\),代入第二式得 \(p_u u+(e^{-\lambda\Delta t}-p_u)d=a\),整理即 \(p_u=\dfrac{a-de^{-\lambda\Delta t}}{u-d}\);\(p_d\) 同理。 直观上,违约分支把股价打到 0,拉低了期望,所以不违约时股价要"涨得更多一点"来补偿,\(p_u\) 因此比普通树略大。这正是信用风险高的公司股票隐含更高的漂移。
树的期限等于可转债的期限。末端节点按持有人的转换权估值;倒推时,在允许转换的节点检查转换是否最优,并检查发行人赎回能否改善自己的地位(若赎回,再检查持有人是否转换)。这等价于节点价值
金融直觉:把每个节点想成一个两人回合。发行人先手:如果"继续持有价值"\(Q_1\) 高于赎回价 \(Q_2\),发行人就赎回,把债券价值压到 \(Q_2\),否则不动,所以先取 \(\min(Q_1,Q_2)\)。持有人后手:无论发行人做什么,他都能选择转股拿 \(Q_3\),所以再取 \(\max(\cdot,Q_3)\)。 这和你熟悉的"可赎回债券价值 = 普通债 − 发行人看涨期权"、"可转债 ≈ 纯债 + 看涨期权"是同一件事,只是树把这些期权在每个节点上逐一兑现,而不是假设它们可以简单相加。 例 27.1 的节点 B、D 就是"强赎逼转股":持有人本想继续持有(118.31 > 115.19),发行人用 113 赎回逼他转股,价值从 118.31 降到 115.19。A 股转债发强赎公告后转债价格向转股价值收敛,就是这个机制。
例 27.1 XYZ 公司发行 9 个月期零息可转债,面值 $100,可随时换 2 股,发行人可随时以 $113 赎回。股价 $50,波动率 30%,无股息,违约强度 \(\lambda=1\%\)/年,无风险利率 5%,违约时债券值 $40(回收率 40%)。
用三步树(\(\Delta t=0.25\)):\(u=e^{\sqrt{(0.09-0.01)\times0.25}}=1.1519\),\(d=0.8681\),\(a=e^{0.0125}=1.0126\),\(p_u=0.5167\),\(p_d=0.4808\),每步违约概率 \(1-e^{-0.0025}=0.002497\)。
原书图 27.2 各节点(股价 / 可转债价值):A 50.00 / 106.93;B 57.60 / 115.19;C 43.41 / 101.20;D 66.34 / 132.69;E 50.00 / 106.36;F 37.68 / 98.61;G 76.42 / 152.85;H 57.60 / 115.19;I 43.41 / 100.00;J 32.71 / 100.00。
- 末端节点:G、H 转换(价值为 2 倍股价);I、J 不转换(价值 100)。
- 节点 E:转换价值 100;不转换的价值 \((0.5167\times115.19+0.4808\times100+0.002497\times40)e^{-0.0125}=106.36>100\),不转换;发行人也不会以 113 赎回一张只值 106.36 的债券。
- 节点 B:转换价值 \(2\times57.596=115.19\),不转换价值 118.31,持有人本不愿转换;但发行人会以 113 赎回,此时持有人宁可转换(115.19 > 113),节点价值 115.19。
- 节点 D:不转换价值 132.79,但赎回迫使转换,价值降为 132.69。
可转债价值为节点 A 的 106.93。
扩展。 有票息时,在不转换情形下的估值中加入下一步应付票息的现值;\(\lambda\) 可以从公司债券价格或 CDS 利差估计(第 24、25 章);若 \(\sigma,\lambda,r\) 是时间的函数,改用三叉树(第 21.4 节)。这个模型的缺点是违约概率与股价无关,而现实中股价越低越容易违约。有研究者建议用隐式有限差分实现,并让 \(\lambda\) 依赖股价和时间,例如 Andersen & Buffum(2003/04)假设 \(\lambda\propto S^{-\alpha}\)。
27.5 路径依赖衍生品
问题与条件
路径依赖(path-dependent,或历史依赖)衍生品的收益取决于标的的整条路径,不只是终值,亚式和回望期权就是例子。没有解析解时,可以用蒙特卡洛(第 21b 章):在风险中性世界中抽样路径,计算收益,按无风险利率贴现,取平均。但它有两个问题:达到所需精度的计算时间可能很长;美式路径依赖产品难以处理。
Hull & White(1993)把二叉树推广到一类路径依赖衍生品,能处理美式,对欧式也比蒙特卡洛高效。适用的两个条件:
- 收益只依赖于路径的单一函数 \(F\)(如最高价、平均价);
- \(F\) 可以递推:\(\tau+\Delta t\) 时的 \(F\) 能由 \(\tau\) 时的 \(F\) 和 \(\tau+\Delta t\) 时的标的价格算出。
最高价满足 \(F_{new}=\max(F,S_{new})\),平均价满足 \(F_{new}=\frac{iF+S_{new}}{i+1}\),都符合。
白话解释:条件 2 的意思是"只要记住一个数,就不用记住整条历史"。好比算年化平均收益时,你只需要"已有期数"和"当前平均值",新来一期数据就能更新,不用翻回每一期。 平均价公式 \(\frac{iF+S_{new}}{i+1}\) 的约定是:旧平均 \(F\) 由 \(i\) 个价格算出,\(iF\) 就是旧总和,加上新价格再除以新个数 \(i+1\)。代码里第 \(i\) 步的平均含 \(S_0,\dots,S_i\) 共 \(i+1\) 个价格,所以写成 \(\frac{(i+1)F+S_{new}}{i+2}\)。两种写法只是计数起点不同,做法一样:旧总和加新价格,再除以新个数。 树能处理它的原因是:给每个节点再加一个维度 \(F\),"(股价, \(F\))"这一对就完整描述了未来所需的全部信息,倒推照常进行。
例:美式浮动回望看跌
无股息股票,\(S_0=50\),\(\sigma=40\%\),\(r=10\%\),期限 3 个月,三步树:\(\Delta t=0.08333\),\(u=1.1224\),\(d=0.8909\),\(a=1.0084\),\(p=0.5073\)。在 \(\tau\) 行权时得到 0 到 \(\tau\) 的最高价超过当前价的部分。这里 \(F\) 为至今的最高价。
原书图 27.3 中每个节点列出股价、到达该节点时所有可能的最高价,以及每个最高价对应的衍生品价值。末端价值 = 最高价 − 股价。以节点 A(\(t=2\Delta t\)、股价 50 的节点,经"先涨后跌"到达时最高价为 56.12,经"先跌后涨"到达时为 50)为例:
- 最高价为 50:上涨则最高价变为 56.12、价值 0;下跌则最高价仍为 50、价值 5.45。不提前行权的价值 \((0\times0.5073+5.45\times0.4927)e^{-0.1\times0.08333}=2.66\);此时行权收益为 0,不行权。
- 最高价为 56.12:不行权价值 \((0\times0.5073+11.57\times0.4927)e^{-0.008333}=5.65\);行权得 \(56.12-50=6.12>5.65\),应提前行权。
倒推得到美式浮动回望看跌的价值 $5.47。(更高效的美式回望方法见 Technical Note 13。)
一般化:代表值与插值
回望的例子里,\(n\) 步树每个节点最高价的可能取值不超过 \(n\) 个,可以全部列出。但平均价的可能取值随步数指数增长,无法穷举。Hull & White 的办法是在每个节点只对少量代表值计算,其他值用插值:
- 正向遍历树,确定每个节点 \(F\) 的最大值和最小值(由条件 2 可以递推);
- 在每个节点选代表值,简单规则是最大值、最小值以及两者之间的若干等距值;
- 倒推时对每个代表值估值;需要的其他 \(F\) 值用相邻代表值插值。
例:算术平均价格看涨
沿用例 26.3:\(S_0=K=50\),\(r=10\%\),\(\sigma=40\%\),\(T=1\)。用 20 步树:\(\Delta t=0.05\),\(u=1.0936\),\(d=0.9144\),\(p=0.5056\)。平均值包含初始价和当前价。
原书图 27.4 展示了节点 X(0.2 年处的中心节点,股价 50):到达 X 的所有路径的平均值范围为 46.65–53.83。X 可以上行到 Y(股价 54.68,平均值范围 47.99–57.39)或下行到 Z(股价 45.72,平均值范围 43.88–52.48)。每个节点取 4 个等距代表值:X 为 46.65、49.04、51.44、53.83;Y 为 47.99、51.12、54.26、57.39;Z 为 43.88、46.75、49.61、52.48。
以 X 处平均值 51.44 为例:
- 上行到 Y,新平均值 \((5\times51.44+54.68)/6=51.98\)(X 处平均含 5 个价格,加上新价格共 6 个)。它落在 Y 的代表值 51.12(价值 8.101)与 54.26(价值 8.635)之间,线性插值得
\[\frac{(51.98-51.12)\times8.635+(54.26-51.98)\times8.101}{54.26-51.12}=8.247.\]
- 下行到 Z,新平均值 \((5\times51.44+45.72)/6=50.49\),在 Z 的代表值间插值得 4.182。
- X 处的价值为 \((0.5056\times8.247+0.4944\times4.182)e^{-0.1\times0.05}=6.206\)。
推导拆解:节点 X 在 0.2 年,即第 4 步,平均值包含 \(S_0\) 到 \(S_4\) 共 5 个价格。走到 Y 后多了一个价格 54.68,新平均 \(=(5\times51.44+54.68)/6\):先把旧平均还原成总和(乘 5),加上新价格,再除以 6。 插值那一步:51.98 离 51.12 有 0.86,离 54.26 有 2.28,越近的代表值权重越大,所以 54.26 对应的 8.635 拿到权重 \(0.86/3.14\),51.12 对应的 8.101 拿到 \(2.28/3.14\),加权得 8.247。 最后一步就是普通二叉树:上下两个价值按风险中性概率加权,再贴现一步。和普通树唯一的区别是,"下一节点的价值"不是一个数,而要先按新平均值去查表(插值)。
全树(20 步、每节点 4 个代表值)给出 7.17;60 步、每节点 100 个代表值时收敛到 5.58(例 26.3 的连续平均矩匹配近似为 5.62,第 26a 章的蒙特卡洛为 5.57)。美式版本只需在每个节点对每个代表值检验提前行权(行权决策同时依赖路径函数值和标的价格):20 步 4 个代表值为 7.77,60 步 100 个代表值为 6.17。用二次插值代替线性插值可以提高效率。本章代码完整实现了这一算法,所有数字与原书一致。
27.6 障碍期权的数值方法
为什么普通树收敛慢
原则上可以用二叉树或三叉树给障碍期权定价:以向上敲出期权为例,按普通期权倒推,但遇到障碍以上的节点时把价值设为 0。三叉树比二叉树好,但这种简单做法收敛非常慢,需要大量步数才能得到合理的精度。
Boyle & Lau(1994)指出了原因:树隐含的障碍与真实障碍不同。 定义内障碍为紧靠真实障碍内侧的一排节点,外障碍为紧靠外侧的一排节点(原书图 27.5)。通常的树计算隐含地把外障碍当作真实障碍,因为障碍条件首先作用在外障碍节点上。时间步长为 \(\Delta t\) 时节点的纵向间距为 \(O(\sqrt{\Delta t})\),所以误差也是 \(O(\sqrt{\Delta t})\),而且随步数变化呈锯齿状跳动:步数稍变,外障碍的位置就跳到另一排节点。
白话解释:树上的股价只能取离散的几个值,比如某个时点的节点是 …、92、100、108、…(数字仅作示意)。真实障碍 95 落在 92 和 100 之间。树只能在节点上检查"是否敲出",股价在 100 时没敲出,到 92 才敲出,相当于把障碍挪到了 92。障碍低了,向下敲出期权更难被敲掉,所以树给的价格偏高(例中 8.12 远高于 5.50)。 节点间距 \(\approx S\sigma\sqrt{\Delta t}\),所以"挪动的距离"最多一个间距,误差和 \(\sqrt{\Delta t}\) 同阶,这就是 \(O(\sqrt{\Delta t})\)(读作"与 \(\sqrt{\Delta t}\) 同一量级")。普通欧式期权的树误差是 \(O(\Delta t)\),障碍期权慢了一个量级。 锯齿的原因:步数从 100 变到 200,节点网格整体移动,离 95 最近的外侧节点可能从 93 跳到 94.8,误差忽大忽小,所以"多加步数"不是可靠的解决办法。
本章代码给出一个直观的例子:向下敲出看涨(\(S_0=K=100\),\(H=95\),\(\sigma=30\%\),\(r=5\%\),\(T=1\)),解析值 5.498。普通二叉树在 50、100、200、400 步时分别给出 8.12、6.25、6.55、6.25,误差超过 13% 且不随步数单调下降。
改进方法
方法一:内外障碍插值。 分别假设内障碍、外障碍是真实障碍,计算两个价格,再按真实障碍的位置在两者之间插值。
方法二:让节点恰好落在障碍上。 三叉树中价格每步上升比例 \(u\)、不变、或下降比例 \(d=1/u\)。选择 \(u\) 使 \(H=S_0u^N\)(\(N\) 为正或负整数),即 \(\ln H=\ln S_0+N\ln u\)。第 21.4 节建议 \(\ln u=\sigma\sqrt{3\Delta t}\),这里让 \(\ln u\) 尽量接近这个值,同时满足上面的整数条件:
推导拆解:设对数价格每步变化 \(X\in\{+\ln u,0,-\ln u\}\),概率 \(p_u,p_m,p_d\)。要求三件事: (1) 概率和为 1;(2) 均值 \(\mathbb{E}[X]=(p_u-p_d)\ln u=(r-q-\sigma^2/2)\Delta t\)(这是 \(\ln S\) 在风险中性下的漂移);(3) 二阶矩 \(\mathbb{E}[X^2]=(p_u+p_d)(\ln u)^2=\sigma^2\Delta t\)(忽略 \(\Delta t^2\) 的小项)。 由 (3) 得 \(p_u+p_d=\sigma^2\Delta t/(\ln u)^2\),代入 (1) 得 \(p_m\);由 (2) 得 \(p_u-p_d=(r-q-\sigma^2/2)\Delta t/\ln u\)。和与差各除以 2 就是 \(p_u\)、\(p_d\)。 这里的关键是:\(\ln u\) 可以自由选,只要 \(p_m\ge0\)(即 \(\ln u\ge\sigma\sqrt{\Delta t}\))就行。所以可以把 \(\ln u\) 从推荐值 \(\sigma\sqrt{3\Delta t}\) 稍微挪一点,让 \(\ln(H/S_0)\) 恰好是它的整数倍。注意向下障碍时 \(N\) 为负,\(\ln u\) 公式里的分子分母都是负数,\(\ln u\) 仍为正。
方法三:自适应网格模型。 方法二在初始价不靠近障碍时效果很好。初始价非常接近障碍时,即使节点落在障碍上,障碍附近的格点也太稀疏。Figlewski & Gao(1999)的自适应网格模型(adaptive mesh model,第 21.4 节已介绍)在粗树上需要的区域"嫁接"细树(原书图 27.7):在障碍附近用细网格,几何安排使节点落在障碍上,分支概率照常匹配前两阶矩。计算时先在粗树上照常倒推,再计算附加节点的价值,最后在细树上倒推。
27.7 两个相关资产的期权
对依赖两个相关资产的美式期权,需要三维树(时间 + 两个价格)。原书介绍三种方法。
方法一:变量变换(Hull & White 1990)。两个不相关变量很容易建三维树:各建一棵二维树(如 CRR),合并后每个节点有 4 个分支,概率为各自概率的乘积:\(p_1p_2\)(都上)、\(p_1(1-p_2)\)、\((1-p_1)p_2\)、\((1-p_1)(1-p_2)\)。对相关资产,风险中性过程为 \(dS_i=(r-q_i)S_i\,dt+\sigma_iS_i\,dz_i\),相关系数 \(\rho\),\(d\ln S_i=(r-q_i-\sigma_i^2/2)dt+\sigma_idz_i\)。定义
方法二:非矩形树(Rubinstein 1994)。从节点 \((S_1,S_2)\) 出发,以各 0.25 的概率移动到 \((S_1u_1,S_2A)\)、\((S_1u_1,S_2B)\)、\((S_1d_1,S_2C)\)、\((S_1d_1,S_2D)\),其中
方法三:调整概率(Hull & White 1994,最初用于两因子利率树)。先假设不相关,对两个资产都用等概率(0.5)二叉树,合并后四个分支概率均为 0.25(原书表 27.2);再按相关系数调整(表 27.3):两者同向(都上或都下)的概率为 \(0.25(1+\rho)\),反向的概率为 \(0.25(1-\rho)\)。这样两资产对数价格增量的协方差恰好为 \(\rho\sigma_1\sigma_2\Delta t\)。方法三最容易编程,本章代码用它给交换期权定价,200 步时结果 9.5825,与 Margrabe 公式 9.5846 一致。
推导拆解:等概率树里每个资产的对数增量为 \(\pm\sigma_i\sqrt{\Delta t}\)(扣掉漂移后)。两者乘积在同向时为 \(+\sigma_1\sigma_2\Delta t\),反向时为 \(-\sigma_1\sigma_2\Delta t\)。于是协方差 \(=[2\times0.25(1+\rho)-2\times0.25(1-\rho)]\sigma_1\sigma_2\Delta t=\rho\sigma_1\sigma_2\Delta t\),正好是目标值。 同时每个资产单独看,上涨概率仍是 \(0.25(1+\rho)+0.25(1-\rho)=0.5\),边缘分布没有被改动。这是它最方便的地方:单资产的树完全不用动,只改联合概率。\(\rho=\pm1\) 时有两个分支概率为 0,仍然合法;只有 \(|\rho|>1\) 才会出现负概率,所以实务中更要注意的是 \(\rho\) 估计值的合理性。
27.8 蒙特卡洛模拟与美式期权
蒙特卡洛适合路径依赖和多变量问题,树和有限差分适合美式期权。两者兼具时怎么办?27.5 节的树方法是一种答案,但它受限于"单一路径函数"。许多研究者(最早是 Tilley 1993)寻求用蒙特卡洛给美式期权定价,以下两种方法最重要。
最小二乘法(Longstaff–Schwartz)
在每个可以提前行权的时点,持有人要在"立即行权"与"继续持有"之间选择。行权价值容易计算;难点在于继续持有的价值,它是一个条件期望。Longstaff & Schwartz(2001)的最小二乘法(least-squares Monte Carlo,LSM)用横截面回归来估计它:在每个决策时点,用所有(实值)路径上"继续持有实际得到的贴现现金流"对"当前状态变量的函数"做回归,回归的拟合值就是继续持有价值的估计。
白话解释:在树上,同一个节点后面有很多分支,可以直接把它们平均来求继续持有价值。蒙特卡洛的每条路径都是一条"单线",在 \(t=2\) 股价 0.97 的只有一条路径,它后面只有一个结果,拿它当期望太嘈杂。 LSM 的办法是"借邻居的信息":把所有路径在 \(t=2\) 的股价放在横轴、各自继续持有后实际拿到的贴现现金流放在纵轴,画一张散点图,拟合一条二次曲线。曲线在 \(S=0.97\) 处的高度,就是"股价为 0.97 时继续持有的平均价值"的估计。 这和 CFA 里的回归完全一样:拟合值是"给定 \(X\) 时 \(Y\) 的条件均值"的估计。只不过这里 \(Y\) 是单条路径的现金流(噪声很大),\(X\) 是 \(1,S,S^2\)。
例(取自 Longstaff–Schwartz 论文)。 3 年期美式看跌,无股息,只能在第 1、2、3 年末行权,\(r=6\%\)(连续复利),\(S_0=1.00\),\(K=1.10\)。8 条样本路径(原书表 27.4,时刻 1/2/3 的股价):
| 路径 | \(t=1\) | \(t=2\) | \(t=3\) |
|---|---|---|---|
| 1 | 1.09 | 1.08 | 1.34 |
| 2 | 1.16 | 1.26 | 1.54 |
| 3 | 1.22 | 1.07 | 1.03 |
| 4 | 0.93 | 0.97 | 0.92 |
| 5 | 1.11 | 1.56 | 1.52 |
| 6 | 0.76 | 0.77 | 0.90 |
| 7 | 0.92 | 0.84 | 1.01 |
| 8 | 0.88 | 1.22 | 1.34 |
(实务中要抽样多得多的路径。)
- 第 3 年:只在到期行权的现金流(表 27.5)——路径 3、4、6、7 分别为 0.07、0.18、0.20、0.09,其余为 0。
- 第 2 年:实值路径为 1、3、4、6、7,股价 \(S\) 为 1.08、1.07、0.97、0.77、0.84;继续持有得到的现金流贴现到第 2 年为 0、\(0.07e^{-0.06}\)、\(0.18e^{-0.06}\)、\(0.20e^{-0.06}\)、\(0.09e^{-0.06}\)。回归 \(V=a+bS+cS^2\) 得
\[V=-1.070+2.983S-1.813S^2.\]拟合的继续价值为 0.0369、0.0461、0.1176、0.1520、0.1565,行权价值为 0.02、0.03、0.13、0.33、0.26。所以路径 4、6、7 在第 2 年行权(表 27.6:路径 3 第 3 年得 0.07;路径 4、6、7 第 2 年分别得 0.13、0.33、0.26,它们第 3 年的现金流作废)。
- 第 1 年:实值路径为 1、4、6、7、8,股价 1.09、0.93、0.76、0.92、0.88;继续持有的现金流贴现到第 1 年为 0、\(0.13e^{-0.06}\)、\(0.33e^{-0.06}\)、\(0.26e^{-0.06}\)、0。回归得 \(V=2.038-3.335S+1.356S^2\),继续价值 0.0139、0.1092、0.2866、0.1175、0.1533;行权价值 0.01、0.17、0.34、0.18、0.22。所以路径 4、6、7、8 在第 1 年行权(表 27.7)。
- 期权价值:
\[\frac18\big(0.07e^{-0.18}+0.17e^{-0.06}+0.34e^{-0.06}+0.18e^{-0.06}+0.22e^{-0.06}\big)=0.1144,\]大于立即行权的 0.10,所以今天不行权。
两个关键细节。 第一,回归只用实值路径:虚值路径不会行权,把它们放进回归只会降低拟合在关键区域的精度。第二,回归值只用来决定是否行权,计入的现金流是路径上实际实现的现金流,而不是拟合值。如果把拟合值当作价值往回传,回归误差会逐期累积并产生向上的偏差。
扩展。 可行权时点很多时(真正的美式),用大量离散行权点近似;回归函数可以更复杂(三次多项式、Laguerre 多项式等);多个状态变量时,假设继续价值是它们的某个函数形式,用最小二乘估计参数——这正是 LSM 对多因子问题的优势所在。
行权边界参数化(Andersen 2000)
另一种思路是把提前行权边界参数化,从期末向前迭代,逐期选出最优参数。看跌期权在 \(t\) 时的边界可以由一个临界价 \(S^*(t)\) 表示:\(S<S^*(t)\) 时行权。\(S^*(3)=1.10\)。
- 确定 \(S^*(2)\):若 \(S^*(2)<0.77\),第 2 年都不行权,8 条路径第 2 年的价值为 0、0、\(0.07e^{-0.06}\)、\(0.18e^{-0.06}\)、0、\(0.20e^{-0.06}\)、\(0.09e^{-0.06}\)、0,均值 0.0636。\(S^*(2)=0.77\) 时(路径 6 行权得 0.33)均值 0.0813;\(S^*(2)\) 取 0.84、0.97、1.07、1.08 时均值为 0.1032、0.0982、0.0938、0.0963。最优 \(S^*(2)=0.84\)(准确地说 \(0.84\le S^*(2)<0.97\)),此时各路径第 2 年价值为 0、0、0.0659、0.1695、0、0.33、0.26、0。
- 确定 \(S^*(1)\):若 \(S^*(1)<0.76\),都不行权,第 1 年价值 \(0.1032e^{-0.06}=0.0972\);\(S^*(1)=0.76\) 时均值 0.1008;取 0.88、0.92、0.93、1.09 时均值为 0.1283、0.1202、0.1215、0.1228。最优 \(S^*(1)=0.88\)。
- 0 时刻不行权的价值 \(0.1283e^{-0.06}=0.1208\),大于立即行权的 0.10。
实务中先用数万次模拟确定边界,然后丢弃这些路径,用一组新的独立路径按该边界估值。原因是:在同一组路径上优化边界会"过拟合"这组路径,产生向上的偏差(本例中 0.1208 高于 LSM 的 0.1144,部分就是这个原因)。复杂情形需要对边界的参数形式作假设。
上界
两种方法都使用一个次优的行权策略(真实最优策略未知),而任何行权策略产生的价值都不超过最优策略的价值,所以在样本外估值时它们给出的是下界。Andersen & Broadie(2004)提出了原始–对偶(primal–dual)方法给出上界,可以与任何产生下界的算法结合,把真实价值夹在一个区间内。区间越窄,说明行权策略越接近最优。
金融直觉:美式期权的价值是"用最聪明的行权策略能拿到的最多钱"。你用回归得到的策略只是一个"还不错"的策略,按它执行拿到的钱只会少不会多,所以是下界。 为什么一定要用新路径估值?如果在同一组路径上既定策略又估值,策略会"看到"这批路径的未来(例如恰好在某条路径后来跌了之前选择不行权),相当于偷看答案,估值会虚高。这和回测里的"样本内过拟合"是同一个问题:参数在样本内优化,业绩必须在样本外检验。 上界的直观是:假设持有人能预知未来(事后看每条路径最佳的行权时点),价值一定偏高;原始–对偶方法在这个"先知价值"里减去一个用鞅构造的惩罚项,把它压低到尽量接近真实值。
本章代码用 20 万条路径(含对偶变量)、50 个行权点给一个美式看跌定价(\(S_0=36\)、\(K=40\)、\(\sigma=20\%\)、\(r=6\%\)、\(T=1\)),LSM 得 4.469,2000 步二叉树得 4.487。差距一部分来自只有 50 个行权点(百慕大 vs 美式),一部分来自回归带来的次优策略,两者都使 LSM 偏低,与"下界"的结论一致。
量化实战
本章内容在量化交易中的用途
- 可转债量化。A 股可转债市场的定价模型、"双低"等策略的理论价值计算,都以本章的违约分支树为雏形。实务中还要加入下修条款(转股价下调)、回售条款(持有人在股价低时按价回售,相当于一个看跌期权)、强赎触发条件("连续 30 个交易日中至少 15 日收盘价不低于转股价的 130%",这是巴黎期权式的条件,需要路径依赖技术)。
- 雪球、凤凰等自动敲出产品。这类产品是离散观测的障碍期权加路径依赖票息,通常用蒙特卡洛定价;涉及发行人提前赎回或投资者选择权时,用 LSM。障碍附近的收敛问题在 PDE/树方法中要用"节点落在障碍上"或自适应网格处理。
- 利率产品。百慕大互换期权、可赎回债券是 LSM 在固定收益中的主要应用,在 LIBOR 市场模型(第 32 章)中只能用蒙特卡洛,LSM 几乎是唯一选择。
- 系统实现要点。LSM:只对实值路径回归、传递实现现金流、定边界与估值用不同路径、报告下界与上界。路径依赖树:代表值数量决定精度,插值方法决定效率。两资产树:调整概率法最容易实现,但 \(|\rho|\) 接近 1 时注意概率非负。
- LSM 的思想迁移。"用横截面回归估计条件期望"本身就是一种近似动态规划,在最优执行、库存管理、最优止损等最优停止问题上同样适用。
Python 示例:五种数值技术
代码依次完成:(1) 复现例 27.1 可转债树;(2) 实现 Hull–White 代表值插值法,复现图 27.4 的节点范围与 7.17、7.77、5.58、6.17;(3) 复现 LSM 的 8 路径例子;(4) 大样本 LSM 与二叉树对比;(5) 障碍期权:普通二叉树与"节点落在障碍上"的三叉树对比;(6) 用调整概率的两资产树给交换期权定价。
import numpy as np
from scipy.stats import norm
N = norm.cdf
# ---------- 1) 可转债树:例 27.1 ----------
def convertible(S0=50., sig=.30, lam=.01, r=.05, T=.75, steps=3, face=100., ratio=2.,
call_px=113., recovery=40.):
dt = T/steps
u = np.exp(np.sqrt((sig**2 - lam)*dt)); d = 1/u; a = np.exp(r*dt)
pu = (a - d*np.exp(-lam*dt))/(u - d); pd = (u*np.exp(-lam*dt) - a)/(u - d)
pdef = 1 - np.exp(-lam*dt)
S = S0*u**np.arange(steps, -steps - 1, -2) # 末端股价(从高到低)
V = np.maximum(ratio*S, face) # 末端:转换或拿面值
for i in range(steps - 1, -1, -1):
S = S0*u**np.arange(i, -i - 1, -2)
Q1 = (pu*V[:-1] + pd*V[1:] + pdef*recovery)*np.exp(-r*dt) # 继续持有
V = np.maximum(np.minimum(Q1, call_px), ratio*S) # max[min(Q1,Q2),Q3]
return u, d, pu, pd, pdef, V[0]
u, d, pu, pd, pdef, v = convertible()
print("例27.1 u=%.4f d=%.4f pu=%.4f pd=%.4f 违约概率=%.6f 可转债价值=%.2f" % (u, d, pu, pd, pdef, v))
# ---------- 2) 路径依赖树:Hull-White 代表值 + 插值,算术平均价格看涨(例 26.3 参数)----------
def asian_tree(S0, K, r, sig, T, steps, nrep, american=False):
dt = T/steps; u = np.exp(sig*np.sqrt(dt)); d = 1/u
p = (np.exp(r*dt) - d)/(u - d); disc = np.exp(-r*dt)
price = lambda i, j: S0*u**j*d**(i - j) # j = 上涨次数
# 正向:每个节点平均值(含 S0 与当前价,共 i+1 个价格)的最大、最小值
amax = [np.array([S0])]; amin = [np.array([S0])]
for i in range(1, steps + 1):
s = price(i, np.arange(i + 1))
mx = np.full(i + 1, -np.inf); mn = np.full(i + 1, np.inf)
for j in range(i + 1):
for jp in (j - 1, j): # 前驱节点
if 0 <= jp <= i - 1:
mx[j] = max(mx[j], (i*amax[i-1][jp] + s[j])/(i + 1))
mn[j] = min(mn[j], (i*amin[i-1][jp] + s[j])/(i + 1))
amax.append(mx); amin.append(mn)
reps = lambda i, j: np.linspace(amin[i][j], amax[i][j], nrep) if amax[i][j] > amin[i][j] + 1e-12 \
else np.full(nrep, amin[i][j])
A = [reps(steps, j) for j in range(steps + 1)]
V = [np.maximum(a - K, 0) for a in A]
for i in range(steps - 1, -1, -1):
newA, newV = [], []
for j in range(i + 1):
a = reps(i, j)
au = ((i + 1)*a + price(i + 1, j + 1))/(i + 2)
ad = ((i + 1)*a + price(i + 1, j))/(i + 2)
vu = np.interp(au, A[j + 1], V[j + 1]); vd = np.interp(ad, A[j], V[j])
v = disc*(p*vu + (1 - p)*vd)
if american:
v = np.maximum(v, a - K)
newA.append(a); newV.append(v)
A, V = newA, newV
return V[0][0], (amin[4][2], amax[4][2])
v, rngX = asian_tree(50, 50, .1, .4, 1, 20, 4)
print("亚式看涨树: 20步/4个代表值 = %.2f (美式 %.2f);节点X平均范围 = %.2f–%.2f" % (
v, asian_tree(50, 50, .1, .4, 1, 20, 4, american=True)[0], *rngX))
for steps, nrep in ((60, 100),):
print(" %d步/%d个代表值: 欧式 %.2f, 美式 %.2f" % (
steps, nrep, asian_tree(50, 50, .1, .4, 1, steps, nrep)[0],
asian_tree(50, 50, .1, .4, 1, steps, nrep, american=True)[0]))
# ---------- 3) 最小二乘蒙特卡洛(LSM):原书 8 条路径的例子 ----------
paths = np.array([[1.09, 1.08, 1.34], [1.16, 1.26, 1.54], [1.22, 1.07, 1.03], [0.93, 0.97, 0.92],
[1.11, 1.56, 1.52], [0.76, 0.77, 0.90], [0.92, 0.84, 1.01], [0.88, 1.22, 1.34]])
def lsm_put(paths, K, r, dt, basis_deg=2, verbose=False):
n, m = paths.shape
cash = np.maximum(K - paths[:, -1], 0) # 现金流(以发生时刻计)
t_cash = np.full(n, m) # 现金流发生的时点
for t in range(m - 1, 0, -1): # 时点 t = m-1, ..., 1(索引 t-1)
S = paths[:, t - 1]
itm = K - S > 0
Y = cash[itm]*np.exp(-r*dt*(t_cash[itm] - t)) # 用实现的现金流(不是拟合值)
X = np.vander(S[itm], basis_deg + 1, increasing=True)
beta = np.linalg.lstsq(X, Y, rcond=None)[0]
cont = X @ beta
ex = (K - S[itm]) > cont
if verbose:
print(" t=%d 回归系数 a,b,c = %s, 行权路径 %s" % (t, np.round(beta, 3), np.where(itm)[0][ex] + 1))
idx = np.where(itm)[0][ex]
cash[idx] = K - S[idx]; t_cash[idx] = t
return np.mean(cash*np.exp(-r*dt*t_cash))
print("LSM 8 条路径:")
print(" 期权价值 = %.4f" % lsm_put(paths, 1.10, .06, 1.0, verbose=True))
# ---------- 4) LSM 大样本 vs 二叉树:美式看跌 ----------
def binomial_american_put(S0, K, r, sig, T, steps=2000):
dt = T/steps; u = np.exp(sig*np.sqrt(dt)); d = 1/u
p = (np.exp(r*dt) - d)/(u - d); disc = np.exp(-r*dt)
S = S0*u**np.arange(steps, -steps - 1, -2); V = np.maximum(K - S, 0)
for i in range(steps - 1, -1, -1):
S = S0*u**np.arange(i, -i - 1, -2)
V = np.maximum(disc*(p*V[:-1] + (1 - p)*V[1:]), K - S)
return V[0]
S0, K, r, sig, T, m = 36., 40., .06, .2, 1., 50
rng = np.random.default_rng(0)
z = rng.standard_normal((100_000, m))
z = np.vstack([z, -z]) # 对偶变量
P = S0*np.exp(np.cumsum((r - .5*sig**2)*T/m + sig*np.sqrt(T/m)*z, axis=1))
print("美式看跌 S0=36,K=40: LSM(50个行权点,20万路径,基函数1,S,S^2) = %.3f, 二叉树(连续行权) = %.3f"
% (lsm_put(P/S0, K/S0, r, T/m)*S0, binomial_american_put(S0, K, r, sig, T)))
# ---------- 5) 障碍期权:普通二叉树的锯齿收敛 vs 节点落在障碍上的三叉树 ----------
def do_call_exact(S, K, H, T, r, sig):
lam = (r + .5*sig**2)/sig**2; sT = sig*np.sqrt(T)
y = np.log(H**2/(S*K))/sT + lam*sT
d1 = (np.log(S/K) + (r + .5*sig**2)*T)/sT
c = S*N(d1) - K*np.exp(-r*T)*N(d1 - sT)
cdi = S*(H/S)**(2*lam)*N(y) - K*np.exp(-r*T)*(H/S)**(2*lam - 2)*N(y - sT)
return c - cdi
def do_call_binomial(S0, K, H, T, r, sig, steps):
dt = T/steps; u = np.exp(sig*np.sqrt(dt)); d = 1/u
p = (np.exp(r*dt) - d)/(u - d); disc = np.exp(-r*dt)
S = S0*u**np.arange(steps, -steps - 1, -2)
V = np.where(S > H, np.maximum(S - K, 0), 0.0)
for i in range(steps - 1, -1, -1):
S = S0*u**np.arange(i, -i - 1, -2)
V = np.where(S > H, disc*(p*V[:-1] + (1 - p)*V[1:]), 0.0)
return V[0]
def do_call_trinomial_on_barrier(S0, K, H, T, r, sig, steps):
dt = T/steps
Nb = int((np.log(H) - np.log(S0))/(sig*np.sqrt(3*dt)) - 0.5) # 负整数,取整使 ln u 接近 σ√(3Δt)
lnu = (np.log(H) - np.log(S0))/Nb
nu = r - .5*sig**2
pu = nu*dt/(2*lnu) + sig**2*dt/(2*lnu**2)
pd = -nu*dt/(2*lnu) + sig**2*dt/(2*lnu**2)
pm = 1 - sig**2*dt/lnu**2
disc = np.exp(-r*dt)
k = np.arange(steps, -steps - 1, -1)
S = S0*np.exp(k*lnu)
V = np.where(S > H*(1 + 1e-12), np.maximum(S - K, 0), 0.0)
for i in range(steps - 1, -1, -1):
k = np.arange(i, -i - 1, -1); S = S0*np.exp(k*lnu)
V = disc*(pu*V[:-2] + pm*V[1:-1] + pd*V[2:])
V = np.where(S > H*(1 + 1e-12), V, 0.0)
return V[0]
S0, K, H, T, r, sig = 100., 100., 95., 1., .05, .3
print("向下敲出看涨 S0=100,K=100,H=95 解析值 = %.4f" % do_call_exact(S0, K, H, T, r, sig))
for n in (50, 100, 200, 400):
print(" N=%4d 普通二叉树 %.4f 节点落在障碍上的三叉树 %.4f" % (
n, do_call_binomial(S0, K, H, T, r, sig, n), do_call_trinomial_on_barrier(S0, K, H, T, r, sig, n)))
# ---------- 6) 两相关资产:先假设独立再调整概率(方法三),给交换期权定价 ----------
def exchange_tree(V0, U0, sV, sU, rho, r, T, steps):
dt = T/steps; disc = np.exp(-r*dt)
def grid(S0, s, i):
j = np.arange(i + 1)
return S0*np.exp((r - .5*s**2)*i*dt + (2*j - i)*s*np.sqrt(dt)) # 等概率二叉树
Vt, Ut = grid(V0, sV, steps), grid(U0, sU, steps)
W = np.maximum(Vt[:, None] - Ut[None, :], 0)
pp, pm = .25*(1 + rho), .25*(1 - rho) # 同向 / 反向
for i in range(steps - 1, -1, -1):
W = disc*(pp*W[1:, 1:] + pp*W[:-1, :-1] + pm*W[1:, :-1] + pm*W[:-1, 1:])
return W[0, 0]
sh = np.sqrt(.3**2 + .2**2 - 2*.6*.3*.2)
d1 = (np.log(1.0) + .5*sh**2)/sh
print("交换期权: 两资产树(200步) %.4f, Margrabe %.4f" % (
exchange_tree(100, 100, .3, .2, .6, .05, 1, 200), 100*N(d1) - 100*N(d1 - sh)))
输出:
例27.1 u=1.1519 d=0.8681 pu=0.5167 pd=0.4808 违约概率=0.002497 可转债价值=106.93
亚式看涨树: 20步/4个代表值 = 7.17 (美式 7.77);节点X平均范围 = 46.65–53.83
60步/100个代表值: 欧式 5.58, 美式 6.17
LSM 8 条路径:
t=2 回归系数 a,b,c = [-1.07 2.983 -1.814], 行权路径 [4 6 7]
t=1 回归系数 a,b,c = [ 2.038 -3.335 1.356], 行权路径 [4 6 7 8]
期权价值 = 0.1144
美式看跌 S0=36,K=40: LSM(50个行权点,20万路径,基函数1,S,S^2) = 4.469, 二叉树(连续行权) = 4.487
向下敲出看涨 S0=100,K=100,H=95 解析值 = 5.4981
N= 50 普通二叉树 8.1193 节点落在障碍上的三叉树 5.5002
N= 100 普通二叉树 6.2473 节点落在障碍上的三叉树 5.4966
N= 200 普通二叉树 6.5454 节点落在障碍上的三叉树 5.4948
N= 400 普通二叉树 6.2470 节点落在障碍上的三叉树 5.4977
交换期权: 两资产树(200步) 9.5825, Margrabe 9.5846
读输出时注意:
- 可转债价值 106.93、各树参数与原书完全一致。
- 亚式期权树复现了节点 X 的平均值范围 46.65–53.83,以及 20 步 4 个代表值的 7.17(美式 7.77)、60 步 100 个代表值的 5.58(美式 6.17)。20 步时误差很大,说明代表值太少时线性插值的误差很显著。
- LSM 两次回归的系数与原书一致(\(c\) 的 −1.814 与原书 −1.813 的差别来自四舍五入),行权路径和最终价值 0.1144 完全一致。
- 障碍期权:普通二叉树在 400 步时仍有约 14% 的误差,而且步数翻倍误差不降反升;节点落在障碍上的三叉树在 50 步时误差已不到 0.05%。
- 两资产树与 Margrabe 公式相差约 0.002。
本章小结
本章把基本数值方法推广到更复杂的产品。可转债用加了违约分支的股价二叉树定价,违约强度 \(\lambda\) 使非违约分支的方差变为 \(\sigma^2-\lambda\),倒推时节点值为 \(\max[\min(Q_1,Q_2),Q_3]\),同时反映持有人的转换权和发行人的赎回权。路径依赖衍生品只要收益依赖单一、可递推的路径函数,就能在树的每个节点为该函数选代表值、倒推时插值,并能处理美式行权。障碍期权在普通树上收敛慢且呈锯齿状,原因是树隐含的障碍(外障碍)与真实障碍不同;让节点落在障碍上、在内外障碍间插值或在障碍附近嫁接细网格都可以解决。两个相关资产的树可以通过变量变换、非矩形节点安排或调整概率来构造。蒙特卡洛处理美式期权有两种方法:最小二乘法用横截面回归估计继续持有价值,行权边界参数化则从后向前优化边界;两者都给出下界,可用原始–对偶方法求上界。
| 技术 | 要点 |
|---|---|
| 可转债树 | \(u=e^{\sqrt{(\sigma^2-\lambda)\Delta t}}\),\(p_u=\frac{a-de^{-\lambda\Delta t}}{u-d}\),\(p_d=\frac{ue^{-\lambda\Delta t}-a}{u-d}\);节点值 \(\max[\min(Q_1,Q_2),Q_3]\) |
| 路径依赖树 | 条件:单一路径函数、可递推;正向求范围,代表值 + 插值,倒推 |
| 障碍期权树 | 误差 \(O(\sqrt{\Delta t})\) 来自外障碍;\(\ln u=(\ln H-\ln S_0)/N\) 使节点落在障碍上 |
| 两资产树 | 变量变换 \(x_{1,2}=\sigma_2\ln S_1\pm\sigma_1\ln S_2\);非矩形树;同向概率 \(0.25(1+\rho)\)、反向 \(0.25(1-\rho)\) |
| LSM | 只用实值路径回归;回归值决定行权,传递实现现金流;下界 |
| 边界参数化 | 从后向前优化 \(S^*(t)\);新路径估值;下界 |
| 上界 | Andersen–Broadie 原始–对偶方法 |
练习
基础
-
在例 27.1 中,如果没有赎回条款,可转债价值是多少?赎回条款对持有人价值多少? 提示:把代码中的
call_px设为一个很大的数重新计算;差值就是发行人赎回权的价值。无赎回条款时价值约 108.55,赎回权使持有人损失约 1.62。 -
为什么可转债树中 \(u=e^{\sqrt{(\sigma^2-\lambda)\Delta t}}\) 而不是 \(e^{\sigma\sqrt{\Delta t}}\)? 提示:违约分支(股价跳到 0)本身贡献了约 \(\lambda\Delta t\) 的对数方差贡献(在小 \(\Delta t\) 下的近似匹配),为使总方差仍为 \(\sigma^2\Delta t\),非违约分支的方差要减去 \(\lambda\Delta t\)。
白话解释:提示里"对数方差"的说法只能当作启发式理解:违约时股价为 0,\(\ln 0\) 没有定义,严格说无法算对数收益的方差。更准确的说法是匹配股价相对变化\(S_{t+\Delta t}/S_t\) 的二阶矩:违约分支让这个比值以约 \(\lambda\Delta t\) 的概率取 0(偏离均值约 1),贡献约 \(\lambda\Delta t\) 的方差,于是非违约分支只需提供 \((\sigma^2-\lambda)\Delta t\)。结论不变。
-
下列哪些衍生品可以用 27.5 节的路径依赖树方法定价?(a)收益依赖最后 3 个月平均价的期权;(b)收益依赖期间最高价与最低价之差的期权;(c)几何平均价格的美式看跌。 提示:(a) 可以但需要特别处理平均窗口开始前的节点(原书习题 27.13);(b) 需要两个路径函数,不满足条件 1;(c) 可以,几何平均可递推(原书习题 27.12)。
-
在 LSM 中,为什么回归只用实值路径?为什么计入实现的现金流而不是回归拟合值? 提示:见 27.8 节"两个关键细节"。
-
解释为什么 LSM 和行权边界参数化给出的是美式期权价值的下界。 提示:任何可行的行权策略产生的价值都不超过最优策略;样本外估值消除了"偷看未来"的偏差。
进阶
-
用原书 8 条路径,把执行价改为 \(K=1.13\),重做 LSM 和行权边界参数化(原书习题 27.15、27.21 的重做)。 提示:直接调用代码中的
lsm_put(paths, 1.13, .06, 1.0, verbose=True);边界参数化需要自己写一个对候选 \(S^*(t)\) 的枚举。 -
修改可转债代码:债券每 3 个月付 $2 票息、转换比率在第 6 个月后变为 1.8,重新定价(原书习题 27.18、27.23 类型)。 提示:在不转换的继续价值中加入下一期票息的现值;在转换价值中使用当时有效的转换比率。
-
把本章的障碍三叉树推广到双障碍(同时有上下障碍),使节点同时落在两个障碍上需要满足什么条件?(原书习题 27.17) 提示:需要 \(\ln(H_u/H_d)\) 是 \(\ln u\) 的整数倍,同时 \(\ln(H_u/S_0)\) 也是整数倍;通常要牺牲"\(S_0\) 在节点上"或在第一步用特殊分支。
-
用 LSM 给一个两资产的百慕大"最大值看涨"期权定价:收益 \(\max(\max(S_1,S_2)-K,0)\),回归基函数用 \(1,S_1,S_2,S_1^2,S_2^2,S_1S_2\),并与本章两资产树(加上提前行权检验)比较。 提示:这是 LSM 处理多状态变量的典型场景;树方法在两资产时仍可行,三个以上资产就只能用蒙特卡洛。
-
用回望期权的路径依赖树(3 步)复现美式浮动回望看跌的 5.47,然后把步数增加到 50,观察收敛(原书习题 27.10、27.19)。 提示:每个节点存储一个"可能最高价 → 价值"的字典;最高价可能值的个数不超过步数。
原书推荐习题:27.15、27.21(LSM 与边界参数化,强烈建议实现并扩展到大量路径);27.18、27.23(可转债树);27.10、27.14(路径依赖树方法,27.14 要求验证图 27.4 的数值);27.17(双障碍);27.12、27.13(路径依赖方法的适用性)。
原书对照
| 本章小节 | 原书章节 | PDF 页码 |
|---|---|---|
| 27.4 可转换债券 | 27.4 Convertible Bonds(例 27.1,图 27.2) | p.656–659 |
| 27.5 路径依赖衍生品 | 27.5 Path-Dependent Derivatives(图 27.3、27.4) | p.659–663 |
| 27.6 障碍期权的数值方法 | 27.6 Barrier Options(图 27.5–27.7) | p.663–666 |
| 27.7 两个相关资产 | 27.7 Options on Two Correlated Assets(表 27.2、27.3) | p.666–669 |
| 27.8 蒙特卡洛与美式期权 | 27.8 Monte Carlo Simulation and American Options(表 27.4–27.7) | p.669–673 |
| 小结与习题 | Summary, Practice Questions | p.673–677 |
替代模型与随机波动率(27.1–27.3 节)见第 27a 章。延伸阅读:Longstaff & Schwartz (2001);Andersen (2000);Andersen & Broadie (2004);Boyle & Lau (1994);Figlewski & Gao (1999);Hull & White (1990, 1993, 1994);Rubinstein (1994);Tilley (1993);Ingersoll (1977);Andersen & Buffum (2003/04)。