第 26a 章 奇异期权(上):结构与解析定价
到第 20 章为止,我们讨论的都是普通(plain vanilla)期权:欧式或美式的看涨、看跌,条款标准,交易活跃,交易所或经纪商定期给出价格或隐含波动率。场外市场里,金融工程师还设计了大量条款非标准的产品,统称奇异期权(exotic options,简称 exotics)。它们在交易商的组合中占比不大,利润率却远高于普通期权。
奇异期权出现的原因大致有四类:真实的对冲需求(例如按一年平均汇率结算的外汇收入);税务、会计、法律或监管上的考虑;让投资者表达对市场变量的特定观点;偶尔也有交易商把产品设计得"看起来比实际更有吸引力",以吸引不够警觉的企业司库或基金经理。最后一类提醒我们:学会给奇异期权定价,既是做市商的基本功,也是买方识别"贵产品"的护身符。
本章(26a)讲 15 类奇异期权的结构与定价思路,下一章(26b)专门讲与量化交易关系最密切的方差互换、VIX 与静态期权复制。全章沿用 BSM 的假设:标的服从几何布朗运动,波动率常数,标的提供连续收益率 \(q\)(股指取股息率,外汇取外币无风险利率,期货取本币无风险利率)。第 27a 章会讨论放松这一假设后的模型。
读本章时请抓住一条主线:绝大多数奇异期权的定价都是把收益拆成已知构件,或者把风险中性期望算出来。 拆解靠平价关系和收益分解;求期望靠对数正态分布的性质、反射原理和矩匹配。公式看起来繁复,背后的方法只有这几种。
学习目标
- 能把组合产品、缺口期权、二元期权、选择者期权、棘轮期权拆解为普通期权和二元期权的组合,并写出其价值。
- 掌握远期开始期权 \(ce^{-qT_1}\) 的推导,理解"平值期权价值与标的价格成正比"这一齐次性质的用途。
- 会使用障碍期权的 8 个解析公式和"敲入 + 敲出 = 普通"的平价,会用 Broadie–Glasserman–Kou 修正处理离散观测,理解障碍期权 vega 可为负、delta 在障碍处不连续。
- 会用矩匹配加 Black 模型给算术平均亚式期权和篮子期权定价,处理已部分观测的亚式期权。
- 理解 Margrabe 交换期权公式为何与利率无关,并能用它给"两者取优/取劣"类产品定价。
- 能用蒙特卡洛验证本章任何一个解析公式。
读前导读
这一章在解决什么问题。 CFA 的衍生品部分让你掌握了普通期权:BSM 公式、看涨看跌平价、单步二叉树。现实中银行卖给企业和个人的产品(国内的雪球、鲨鱼鳍、保本理财中的挂钩条款、企业的平均汇率对冲)大多是"改了条款"的期权:收益看路径上的平均值、最高价、是否碰过某个价位,或者到期时能在看涨和看跌中二选一。本章说明这些产品怎么定价,而方法其实只有两类。
第一类是拆解:把奇异收益改写成普通期权、二元期权、远期的组合,然后逐项套 BSM。这和你在 CFA 里用平价关系"用看涨 + 债券复制看跌"是同一个动作,也和会计上把复合金融工具拆成主合同和嵌入衍生工具(CPA 中的可转债拆分)思路相近。第二类是直接求风险中性期望:收益的现值 = \(e^{-rT}\times\) 风险中性期望。期望能否算出闭式解,取决于我们是否知道相关随机量(到期价、最高价、平均价)的分布;不知道时就用"矩匹配"找一个近似分布,或用蒙特卡洛。
需要先想起来的数学。
- 对数正态分布的期望。 若 \(\ln X\sim N(\mu,s^2)\),则 \(E[X]=e^{\mu+s^2/2}\),\(E[X^2]=e^{2\mu+2s^2}\),所以 \(E[X^2]/E[X]^2=e^{s^2}\)。在风险中性世界里 \(E[S_T]=S_0e^{(r-q)T}\)。例:\(S_0=100\),\(r-q=3\%\),\(T=1\),远期价格 103.05。见 第 00 册第 07 章 概率中的分析工具。
- 导数与求最值。 永续期权中对 \(H\) 求导并令其为零找最优行权边界,就是"一阶条件"。例:\(g(H)=(H-K)(S/H)^{\gamma}\),取对数后求导更方便:\(\frac{d}{dH}\ln g=\frac{1}{H-K}-\frac{\gamma}{H}=0\)。见 第 00 册第 02 章 导数与泰勒展开。
- 偏微分方程(PDE)的读法。 BSM 方程里 \(\partial f/\partial S\) 是 Delta,\(\partial^2f/\partial S^2\) 是 Gamma,\(\partial f/\partial t\) 是 Theta。方程的含义是"Delta 对冲后的组合只赚无风险利率"。本章只需会把一个猜出来的函数代进去检验,不需要会解 PDE。见 第 00 册第 05 章 多元微积分与优化。
- 布朗运动的协方差与二元正态分布。 布朗运动 \(W\) 在两个时点的协方差是 \(\min(t_1,t_2)\);两个相关的标准正态变量的联合分布函数记为 \(M(a,b;\rho)\),即"\(X\le a\) 且 \(Y\le b\)"的概率。
- 示性函数 \(\mathbf 1\{\cdot\}\)。 条件成立时取 1,否则取 0。\(\mathbf 1\{S_T>K\}\) 就是"到期实值"的开关,其风险中性期望就是实值概率。
怎么读这一章。 核心必读:26.4(缺口期权,学会"拆收益")、26.5(远期开始期权,学会"齐次性")、26.9(障碍期权的平价、离散观测修正和反直觉性质,不必背公式)、26.10(二元期权,它是 BSM 公式的两块积木)、26.13(亚式期权的矩匹配)、26.14(交换期权)。26.2 的永续期权推导很有启发性,但第一次可以只看结论。26.7 复合期权、26.11 回望期权的长公式第一次只需理解每一项的含义,不用推导。26.3、26.6、26.12、26.15 以结构为主,快速浏览即可。
26.1 组合产品与零成本结构
组合(package)是由标准欧式看涨、看跌、远期、现金和标的资产构成的产品。第 12 章的牛市价差、熊市价差、蝶式、日历价差、跨式、宽跨式都属于这一类,定价只需把各部分加起来。
交易员常把组合设计成初始零成本。典型例子是区间远期(range forward,又称零成本领口 zero-cost collar,第 17.2 节):多头看涨 + 空头看跌(或反之),看涨的执行价高于看跌的执行价,并调整执行价使两者价值相等。企业用它把未来的汇率锁定在一个区间内,期初不付权利金。
更一般地,任何衍生品都可以通过把付款推迟到到期日而变成零成本产品。若欧式看涨在 0 时刻付款成本为 \(c\),改在到期日 \(T\) 付款,则需付 \(A=ce^{rT}\),收益为
26.2 永续美式期权
永续(perpetual)期权没有到期日,因此价值与时间无关,BSM 偏微分方程退化为常微分方程。这是少数能求出美式期权闭式解的情形,推导过程本身也很有启发性。
先求一个"触及即付"的构件
有收益率 \(q\) 时,衍生品价值满足(式 17.6)
推导拆解:为什么猜 \(f=Q(S/H)^\alpha\),以及代入后怎么得到那个二次方程。
- 永续产品与时间无关,所以 \(\partial f/\partial t=0\),PDE 只剩关于 \(S\) 的部分。
- 对 \(f=QH^{-\alpha}S^\alpha\) 求导:\(\frac{\partial f}{\partial S}=\alpha QH^{-\alpha}S^{\alpha-1}\),所以 \(S\frac{\partial f}{\partial S}=\alpha f\);再求一次导,\(S^2\frac{\partial^2f}{\partial S^2}=\alpha(\alpha-1)f\)。幂函数的好处就在这里:每一项都变成"常数 × \(f\)"。
- 代入得 \((r-q)\alpha f+\frac12\sigma^2\alpha(\alpha-1)f=rf\),两边约去 \(f\),即为正文的方程。整理成 \(\frac12\sigma^2\alpha^2+w\alpha-r=0\)(\(w=r-q-\sigma^2/2\)),用求根公式得 \(\gamma_1\) 和 \(-\gamma_2\) 两个根,一正一负。
- 向上触及时需要 \(S\to0\) 时 \(f\to0\),所以取正根;向下触及时需要 \(S\to\infty\) 时 \(f\to0\),所以取负根。 数值例:\(r=5\%\),\(q=0\),\(\sigma=30\%\),则 \(w=0.005\),\(\gamma_1=(-0.005+\sqrt{0.000025+0.009})/0.09=1\),\(\gamma_2=(0.005+0.095)/0.09=1.111\),与正文例子一致。
所以这个"向上触及即付"构件的价值是 \(Q(S/H)^{\gamma_1}\)。\((S/H)^{\gamma_1}\) 可以理解为"触及 \(H\) 时收到 1 元"的现值,相当于把首次触及时间的随机性和贴现合在一起。
永续美式看涨
如果持有人的策略是"价格涨到 \(H\) 就行权",则行权时得到 \(H-K\),价值为 \((H-K)(S/H)^{\gamma_1}\)。持有人选择 \(H\) 使价值最大,对 \(H\) 求导令其为零:
永续美式看跌
对称地,当 \(S>H\) 时考虑"从上方触及 \(H\) 即付 \(Q\)",边界条件 \(S=H\) 时 \(f=Q\)、\(S\to\infty\) 时 \(f\to0\)。取 \(f=Q(S/H)^{-\alpha}\),得 \(\alpha=\gamma_2\):
以 \(S=K=50\)、\(r=5\%\)、\(q=0\)、\(\sigma=30\%\) 为例(本章代码第 8 段),\(\gamma_2=1.111\),最优行权边界 \(H_2=26.32\),期权价值 11.61。永续期权的价值给出了同参数有限期限美式看跌的上界。
26.3 非标准美式期权
标准美式期权可在存续期内任何时刻以固定执行价行权。场外美式期权常带有以下非标准特征:
- 只能在特定日期提前行权——百慕大期权(Bermudan option,百慕大地理上位于欧洲和美洲"之间",产品也介于欧式和美式之间);
- 只允许在部分时间行权,例如有初始锁定期(lock-out period);
- 执行价在存续期内变化。
公司发行的认股权证(warrant)常带这些特征。例如 7 年期权证,只能在第 3–7 年的特定日期行权,执行价第 3–4 年为 $30,接下来 2 年为 $32,最后 1 年为 $33。这类产品通常用二叉树估值:倒推时只在条款允许的节点做提前行权检验,并在每个节点使用当时有效的执行价。代码改动只是在第 13 章二叉树的倒推循环里加几个 if。
26.4 缺口期权
缺口看涨(gap call)在 \(S_T>K_2\) 时支付 \(S_T-K_1\)。\(K_2\) 是"触发价",\(K_1\) 是"支付执行价"。与执行价 \(K_2\) 的普通看涨相比,只要行权,收益就多出 \(K_2-K_1\)(可正可负,所以缺口期权的收益可能为负)。
把收益拆成两部分:\(\mathbf 1\{S_T>K_2\}S_T\) 是资产或无看涨,\(\mathbf 1\{S_T>K_2\}K_1\) 是 \(K_1\) 份现金或无看涨(见 26.10 节)。因此
缺口看跌在 \(S_T<K_2\) 时支付 \(K_1-S_T\):
例 26.1 某资产现值 $500,000,1 年波动率 20%,\(r=5\%\),无收益。保险公司承诺:若 1 年后资产价值低于 $400,000,则以 $400,000 买入。这是普通看跌,按 BSM 价值 $3,436。现在规定转让资产的成本 $50,000 由投保人承担,于是只有资产低于 $350,000 时投保人才会索赔,而一旦索赔,保险公司付出的仍是 \(400{,}000-S_T\)。这正是 \(K_2=350{,}000\)、\(K_1=400{,}000\) 的缺口看跌,价值 $1,896。一个看似细小的条款使保单成本降低约 45%。
26.5 远期开始期权
远期开始期权(forward start option)在未来某时刻 \(T_1\) 才开始,届时设为平值,在 \(T_2\) 到期。员工股票期权常可视为这一类:公司承诺将来授予平值期权。
关键观察是齐次性:在 BSM 模型中,平值期权价值与标的价格成正比(价格乘以 \(\lambda\),执行价也乘以 \(\lambda\),期权价值乘以 \(\lambda\))。设 \(c\) 是今天期限为 \(T_2-T_1\) 的平值期权价值,则 \(T_1\) 时远期开始期权的价值为 \(cS_1/S_0\)。用风险中性估值,并利用 \(\hat E[S_1]=S_0e^{(r-q)T_1}\):
推导拆解:这三步分别用了什么。
- "\(T_1\) 时价值为 \(cS_1/S_0\)":BSM 公式中,把 \(S\) 和 \(K\) 同乘一个数,\(d_1,d_2\) 只依赖 \(S/K\),不变;而 \(SN(d_1)-Ke^{-rT}N(d_2)\) 整体乘以该数。\(T_1\) 时的平值期权相当于今天平值期权的 \(S_1/S_0\) 倍。
- 风险中性估值:今天的价值 \(=e^{-rT_1}\times\)(\(T_1\) 时价值的风险中性期望)。\(c\) 和 \(S_0\) 是今天已知的常数,可以提到期望外面。
- \(\hat E[S_1]=S_0e^{(r-q)T_1}\),代入后 \(S_0\) 约掉,\(e^{-rT_1}e^{(r-q)T_1}=e^{-qT_1}\)。 直觉:远期开始的平值期权相当于"\(T_1\) 时持有 \(c/S_0\) 股股票",而今天买下 \(T_1\) 时才交付的这些股票(放弃中间的股息)只需付 \(c\,e^{-qT_1}\)。
对无股息股票,\(q=0\),远期开始期权的价值与期限 \(T_2-T_1\) 的普通平值期权完全相同。这一结论依赖于"未来的平值隐含波动率等于今天的平值隐含波动率",真实市场中微笑会随时间变动,所以远期开始期权对远期波动率(forward volatility)高度敏感,这是第 27a 章讨论的模型风险之一。
26.6 棘轮期权
棘轮期权(cliquet option,又称 ratchet option、strike reset option)是一串按规则确定执行价的看涨或看跌。设重置日为 \(\tau,2\tau,\dots,(n-1)\tau\),\(n\tau\) 为终点。最简单的结构:第 1 个期权执行价为 \(K\)(常等于初始价),覆盖 \(0\) 到 \(\tau\);第 2 个在 \(2\tau\) 支付,执行价为 \(\tau\) 时的资产价;第 3 个在 \(3\tau\) 支付,执行价为 \(2\tau\) 时的资产价,等等。于是它等于 1 个普通期权加 \(n-1\) 个远期开始期权,可直接用 26.5 节估值。
复杂的棘轮会对整个期间的累计收益设置上下限(local cap/floor、global cap/floor),或在资产价格进入某区间时提前终止,此时一般没有解析解,用蒙特卡洛估值。国内常见的"保本 + 参与上涨"类结构化理财中的分段锁定收益条款,在数学上就是棘轮。
26.7 复合期权
复合期权(compound option)是期权的期权,有两个执行价、两个到期日。四种类型:看涨的看涨(call on call)、看涨的看跌(put on call)、看跌的看涨(call on put)、看跌的看跌(put on put)。以 call on call 为例:在 \(T_1\),持有人可支付 \(K_1\) 换取一个看涨期权,该看涨期权赋予在 \(T_2\) 以 \(K_2\) 买入标的的权利。只有当 \(T_1\) 时内层看涨期权价值高于 \(K_1\) 时才会行权。
设 \(S^*\) 为 \(T_1\) 时使内层期权价值恰好等于 \(K_1\) 的资产价格。对 call on call,\(S_{T_1}>S^*\) 时行使外层期权。外层行权事件 \(\{S_{T_1}>S^*\}\) 与内层行权事件 \(\{S_{T_2}>K_2\}\) 涉及两个时点的对数价格,它们的相关系数为 \(\sqrt{T_1/T_2}\)(布朗运动的协方差 \(\min(T_1,T_2)\) 除以标准差乘积)。于是 Geske(1979)的公式中出现二元标准正态累积分布函数 \(M(a,b;\rho)\):
- call on call:\(S_0e^{-qT_2}M(a_1,b_1;\sqrt{T_1/T_2})-K_2e^{-rT_2}M(a_2,b_2;\sqrt{T_1/T_2})-e^{-rT_1}K_1N(a_2)\)
- put on call:\(K_2e^{-rT_2}M(-a_2,b_2;-\sqrt{T_1/T_2})-S_0e^{-qT_2}M(-a_1,b_1;-\sqrt{T_1/T_2})+e^{-rT_1}K_1N(-a_2)\)
- call on put:\(K_2e^{-rT_2}M(-a_2,-b_2;\sqrt{T_1/T_2})-S_0e^{-qT_2}M(-a_1,-b_1;\sqrt{T_1/T_2})-e^{-rT_1}K_1N(-a_2)\)
- put on put:\(S_0e^{-qT_2}M(a_1,-b_1;-\sqrt{T_1/T_2})-K_2e^{-rT_2}M(a_2,-b_2;-\sqrt{T_1/T_2})+e^{-rT_1}K_1N(a_2)\)
其中
推导拆解:相关系数 \(\sqrt{T_1/T_2}\) 的来历。\(\ln S_{T_1}\) 和 \(\ln S_{T_2}\) 的随机部分分别是 \(\sigma W_{T_1}\) 和 \(\sigma W_{T_2}\)。把 \(W_{T_2}\) 写成 \(W_{T_1}+(W_{T_2}-W_{T_1})\),后一段与前一段独立,所以 \(\text{Cov}(W_{T_1},W_{T_2})=\text{Var}(W_{T_1})=T_1\)。标准差分别为 \(\sqrt{T_1}\)、\(\sqrt{T_2}\),相关系数 \(=T_1/\sqrt{T_1T_2}=\sqrt{T_1/T_2}\)。 直觉:\(T_2\) 时的价格"包含"了 \(T_1\) 时的价格,\(T_1\) 越接近 \(T_2\),两者越相关。例:\(T_1=0.25\)、\(T_2=1\),相关系数 0.5。 \(M(a,b;\rho)\) 出现的原因:call on call 的现金流同时要求两个事件成立(外层在 \(T_1\) 行权、内层在 \(T_2\) 实值),概率就是两个相关正态变量同时落在某一侧的概率,单个 \(N(\cdot)\) 不够用了。
每一项的含义与 BSM 公式对应:第一项是"两层都行权时得到资产"的现值,第二项是"两层都行权时支付 \(K_2\)"的现值,第三项是"外层行权时支付 \(K_1\)"的现值。复合期权在实务中用于"先付小额权利金锁定未来买期权的权利",例如投标阶段的外汇风险对冲;在公司金融里,Geske 用它把有负债公司的股票看作公司资产的期权,再把股票期权看作复合期权。
26.8 选择者期权
选择者期权(chooser option,又称 as-you-like-it option)在 \(T_1\) 时由持有人决定它是看涨还是看跌,\(T_1\) 时价值为 \(\max(c,p)\)。若两者都是欧式,执行价都是 \(K\)、到期都是 \(T_2\),由看涨看跌平价 \(p=c+Ke^{-r(T_2-T_1)}-S_1e^{-q(T_2-T_1)}\):
推导拆解:从 \(\max(c,p)\) 到这一行,只用了平价和一个代数技巧。
- \(\max(c,p)=c+\max(0,p-c)\):两数取大 = 其中一个 + 超出部分。
- 由平价 \(p-c=Ke^{-r(T_2-T_1)}-S_1e^{-q(T_2-T_1)}\)。
- 提出公因子 \(e^{-q(T_2-T_1)}\):\(Ke^{-r(T_2-T_1)}=e^{-q(T_2-T_1)}\cdot Ke^{-(r-q)(T_2-T_1)}\)。 于是 \(\max(0,p-c)\) 正是"在 \(T_1\) 到期、执行价 \(Ke^{-(r-q)(T_2-T_1)}\) 的看跌"收益的 \(e^{-q(T_2-T_1)}\) 倍。前一项 \(c\) 在 \(T_1\) 时就是一个仍持有到 \(T_2\) 的看涨,今天的价值就是普通看涨的价值。
所以选择者期权 = 执行价 \(K\)、到期 \(T_2\) 的看涨 + \(e^{-q(T_2-T_1)}\) 份执行价 \(Ke^{-(r-q)(T_2-T_1)}\)、到期 \(T_1\) 的看跌。拆解之后用两次 BSM 即可估值。若看涨和看跌的执行价或期限不同,就拆不成组合,性质类似复合期权,需要二元正态分布。
选择者期权常被拿来与跨式组合比较:跨式组合到期时同时拥有看涨和看跌,选择者只能二选一,所以更便宜;它适合"知道将有大事件但不确定方向,且事件会在 \(T_1\) 前揭晓"的情形。
26.9 障碍期权
障碍期权(barrier option)的收益取决于标的价格在某段时间内是否触及某个水平 \(H\)。它比对应的普通期权便宜,因而非常流行。按触及后的效果分两类:敲出(knock-out)期权触及障碍即失效;敲入(knock-in)期权触及障碍才生效。再按障碍在初始价之上(up)还是之下(down)、看涨还是看跌,共 8 种。
一个关键平价
同执行价、同障碍、同期限的敲入与敲出期权,两者之和等于普通欧式期权:任何一条路径上,要么触及障碍(敲入生效、敲出失效),要么没触及(反之),恰好有一个在起作用。所以只需对每类推导一个公式,另一个用减法得到。
解析公式
公式来自反射原理(reflection principle):带漂移布朗运动触及障碍后"反射"出的路径与原路径在概率上有简单对应,因此出现形如 \((H/S_0)^{2\lambda}\) 的因子。记
白话解释:反射原理说的是:对没有漂移的布朗运动,一条路径在第一次碰到障碍 \(H\) 之后,把余下部分以 \(H\) 为镜子上下翻转,得到的新路径出现的概率完全一样。于是"碰过 \(H\) 且最后落在 \(K\) 以下"的概率,等于"最后落在 \(K\) 关于 \(H\) 的镜像点以上"的概率,后者用普通正态分布就能算。 在对数价格上,\(K\) 关于 \(H\) 的镜像点是 \(H^2/K\)(因为 \(\ln H-\ln K=\ln(H^2/K)-\ln H\)),这正是 \(y\) 里出现 \(\ln[H^2/(S_0K)]\) 的原因。有漂移时翻转会改变概率,需要乘一个修正因子,这就是 \((H/S_0)^{2\lambda}\) 和 \((H/S_0)^{2\lambda-2}\)。 读公式的方法:不必背,只要看出每个式子都是"BSM 型的两项"再乘以反射因子;需要用时查表,并像正文代码那样用蒙特卡洛核对。
金融直觉:敲入 + 敲出 = 普通期权,和"可赎回债券 + 被赎回的权利 = 普通债券"一样,是把一份收益在不同情景下拆给两个人。雪球产品的投资者本质上是卖出了一个向下敲入看跌(跌破敲入线后承担下跌损失),同时合约带自动敲出条款(触及上方价位即提前结束并按持有期拿票息),票息就是卖出这些期权收取的权利金。理解这一点后,"高票息"的来源和风险就很清楚了。
向下敲入/敲出看涨(down-and-in / down-and-out call,\(H<S_0\)):
- \(H\le K\):\(c_{di}=S_0e^{-qT}(H/S_0)^{2\lambda}N(y)-Ke^{-rT}(H/S_0)^{2\lambda-2}N(y-\sigma\sqrt T)\),\(c_{do}=c-c_{di}\)。
- \(H>K\):\(c_{do}=S_0N(x_1)e^{-qT}-Ke^{-rT}N(x_1-\sigma\sqrt T)-S_0e^{-qT}(H/S_0)^{2\lambda}N(y_1)+Ke^{-rT}(H/S_0)^{2\lambda-2}N(y_1-\sigma\sqrt T)\),\(c_{di}=c-c_{do}\)。
向上敲入/敲出看涨(\(H>S_0\)):\(H\le K\) 时 \(c_{uo}=0\)、\(c_{ui}=c\)(要到期实值必然先穿过 \(H\))。\(H>K\) 时
向上敲入/敲出看跌:\(H\ge K\) 时
向下敲入/敲出看跌:\(H\ge K\) 时 \(p_{do}=0\)、\(p_{di}=p\)。\(H<K\) 时
(精读笔记中这组公式的负号同样在抽取时丢失,以上按原书还原;代码中对向上敲出看涨做了蒙特卡洛核对。)
观测频率与连续性修正
上述公式假设连续观测。连续观测在实务中确实存在,例如在交易所挂一张障碍价的限价单,以是否成交作为触及判据。但多数合约规定离散观测,例如每天下午 3 点收盘价比较一次。离散观测时价格"更难"被判定为触及障碍,相当于把障碍往外推。Broadie, Glasserman & Kou(1997)给出了简单的连续性修正:
- 向上障碍:\(H\to He^{0.5826\sigma\sqrt{T/m}}\);
- 向下障碍:\(H\to He^{-0.5826\sigma\sqrt{T/m}}\),
\(m\) 为观测次数,\(T/m\) 为观测间隔。0.5826 来自 \(-\zeta(1/2)/\sqrt{2\pi}\)。本章代码给出一个数值对比:9 个月向上敲出看涨(\(S_0=K=50\)、\(H=60\)、\(r=10\%\)、\(\sigma=30\%\)),连续观测价值 0.314,每日观测(\(m=63\))的蒙特卡洛价值 0.434,修正公式给出 0.443。也就是说,连续与离散观测的差别可以高达 40%,而修正公式能把误差缩小到 2% 左右。
白话解释:修正为什么是把障碍往外推?离散观测只在 \(m\) 个时点检查价格,价格可能在两次检查之间冲过 \(H\) 又回来,合约却判定"没碰到"。所以离散观测的障碍"更难触及",等价于一个更远一点的连续障碍。推多远?与相邻两次观测之间价格的典型波动幅度 \(\sigma\sqrt{T/m}\) 成正比,比例常数 0.5826 是理论推出的。 数值例:\(\sigma=30\%\),\(T=0.75\),\(m=63\),则 \(\sigma\sqrt{T/m}=0.3\times0.109=0.0327\),向上障碍从 60 调到 \(60e^{0.5826\times0.0327}=60\times1.0193=61.16\),再代入连续公式。
障碍期权的反直觉性质
- vega 可以为负。资产价格接近向上敲出障碍时,波动率上升使触及概率上升,期权价值反而下降。代码中上例 \(\sigma\) 从 20% 升到 40%,价值从 0.816 降到 0.146。
- delta 在障碍处不连续。外汇向下敲出看涨在汇率仅比障碍高 0.0005 时,若触及障碍则一文不值,否则可能很值钱。做市商在障碍附近的对冲头寸会急剧变化,这是 26b 章静态复制要解决的问题,也是微观结构里"障碍价附近异常成交"的来源之一。
巴黎期权
普通障碍期权可能因为一次价格"尖刺"被敲入或敲出,这给操纵留下了空间。巴黎期权(Parisian option)要求价格在障碍之外停留一段时间才触发。例如向下敲出巴黎看跌:执行价为初始价的 90%,障碍为 75%,价格低于障碍 50 天才敲出;合同会写明是"连续 50 天"还是"存续期内累计 50 天"。巴黎期权比普通障碍期权难定价,可用第 27b 章的路径依赖树或增强的蒙特卡洛。
国内的"雪球"结构(自动敲出 + 敲入)、"鲨鱼鳍"(向上敲出看涨加返息)本质上都是离散观测障碍期权的组合,本节的公式、修正和反直觉性质都直接适用。
26.10 二元期权
二元期权(binary option)的收益不连续。
- 现金或无看涨(cash-or-nothing call):\(S_T>K\) 时支付固定金额 \(Q\),否则为 0。风险中性世界中到期价格高于 \(K\) 的概率为 \(N(d_2)\),价值为 \(Qe^{-rT}N(d_2)\)。对应的看跌价值为 \(Qe^{-rT}N(-d_2)\)。
- 资产或无看涨(asset-or-nothing call):\(S_T>K\) 时支付资产本身(价值 \(S_T\)),否则为 0,价值为 \(S_0e^{-qT}N(d_1)\)。对应看跌价值为 \(S_0e^{-qT}N(-d_1)\)。
由此得到 BSM 公式的一个漂亮解释:
推导拆解:现金或无看涨的价值为什么是 \(Qe^{-rT}N(d_2)\)。风险中性下 \(\ln S_T\sim N\big(\ln S_0+(r-q-\sigma^2/2)T,\ \sigma^2T\big)\)。 \(P(S_T>K)=P\big(\ln S_T>\ln K\big)\),标准化:\(\frac{\ln K-\ln S_0-(r-q-\sigma^2/2)T}{\sigma\sqrt T}=-d_2\),所以概率为 \(1-N(-d_2)=N(d_2)\)。收益的期望是 \(Q\times N(d_2)\),贴现即得。 资产或无的期望是 \(E[S_T\mathbf 1\{S_T>K\}]\),不是"概率 × 常数",因为收到的金额本身随 \(S_T\) 变化:价格越高的情景收到越多,所以等价于把概率往高价格一侧"倾斜",结果从 \(d_2\) 变成了 \(d_1=d_2+\sigma\sqrt T\)。 例:\(S_0=K=100\),\(r=5\%\),\(q=0\),\(\sigma=20\%\),\(T=1\),\(d_2=0.15\),\(N(d_2)=0.56\)。到期收 100 元的现金或无看涨价值约 \(100e^{-0.05}\times0.56=53.2\)。
为什么资产或无用 \(N(d_1)\) 而现金或无用 \(N(d_2)\)?因为 \(N(d_1)\) 是"以资产本身为计价单位"的测度下 \(S_T>K\) 的概率,\(N(d_2)\) 是传统风险中性测度下的概率。这一点要到第 28 章计价单位变换时才能完全说清,届时请回头看这里。
二元期权的 delta 在到期前、执行价附近会变得非常大(收益是阶跃函数),对冲困难。实务中做市商常用一个窄的看涨价差(执行价 \(K-\epsilon\) 和 \(K+\epsilon\))近似复制二元期权,并有意让价差偏向保守一侧,这就是"二元期权按价差定价"的惯例。
26.11 回望期权
回望期权(lookback option)的收益取决于存续期内的最高价或最低价。
浮动回望(floating lookback):看涨收益为"最终价 − 期间最低价",让持有人以期间最低价买入;看跌收益为"期间最高价 − 最终价",让持有人以期间最高价卖出。Goldman, Sosin & Gatto(1979)和 Garman(1989)给出的公式为
例 26.2 新发行的浮动回望看跌,无股息股票,\(S_0=S_{\max}=50\),\(\sigma=40\%\),\(r=10\%\),\(T=0.25\)。\(b_1=-0.025\),\(b_2=-0.225\),\(b_3=0.025\),\(Y_2=0\),价值 7.79。同一股票上新发行的浮动回望看涨价值 8.04。作为对比,同参数的 3 个月平值普通看跌只有约 3.4,回望期权贵了一倍多。
固定回望(fixed lookback)指定执行价 \(K\):看涨收益为 \(\max(S_{\max}-K,0)\),看跌收益为 \(\max(K-S_{\min},0)\)。令 \(S^*_{\max}=\max(S_{\max},K)\),\(p^*_{fl}\) 为把 \(S_{\max}\) 换成 \(S^*_{\max}\) 的浮动回望看跌,则(Wong & Kwok 2003,类似平价的论证)
回望期权的价值对观测频率很敏感:以上公式假设连续观测,离散观测时最大值被低估、最小值被高估,价值下降,修正方法见 Broadie, Glasserman & Kou(1998)。
26.12 喊价期权
喊价期权(shout option)是欧式期权,持有人可在存续期内某一次向卖方"喊价",到期时获得普通欧式收益与喊价时内在价值中的较大者。例如执行价 $50 的看涨在标的 $60 时喊价:若最终价低于 $60,得 $10;若高于 $60,得最终价 − $50。
在 \(\tau\) 时以价格 \(S_\tau\) 喊价,收益可写成
26.13 亚式期权
亚式期权(Asian option)的收益取决于存续期内标的价格的算术平均 \(S_{ave}\)。平均价格看涨收益 \(\max(0,S_{ave}-K)\),平均价格看跌收益 \(\max(0,K-S_{ave})\)。平均降低了波动,所以亚式期权比普通期权便宜。
它也更贴合某些企业的需要。例如美国公司预计未来一年从澳大利亚子公司均匀收到 1 亿澳元,关心的是全年的平均汇率,用平均价格看跌对冲比普通看跌更精准。大宗商品的长协合同、按月均价结算的原油互换也天然对应亚式结构。
矩匹配定价
在几何布朗运动下,几何平均精确服从对数正态,但算术平均没有简单分布。Turnbull & Wakeman(1991)的流行做法是:用一个对数正态分布去匹配 \(S_{ave}\) 在风险中性世界中的前两阶矩 \(M_1,M_2\),然后用 Black 模型(式 18.9、18.10):
推导拆解:矩匹配的逻辑是"找一个对数正态分布,使它的均值和二阶矩与真实的 \(S_{ave}\) 一样,然后假装 \(S_{ave}\) 就服从它"。 设近似分布为 \(\ln X\sim N(\mu,s^2)\)。由对数正态的矩公式,\(E[X]=e^{\mu+s^2/2}\),\(E[X^2]=e^{2\mu+2s^2}\),所以 \(\frac{E[X^2]}{E[X]^2}=e^{s^2}\),即 \(s^2=\ln(M_2/M_1^2)\)。 Black 模型的输入是远期价格和"年化"波动率,到期时对数价格的方差是 \(\sigma^2T\),令 \(\sigma^2T=s^2\) 即得式 (26.4)。远期价格取风险中性均值 \(M_1\),即式 (26.3)。 这和"用样本均值、样本方差去拟合一个正态分布"是同一种做法,代价是三阶以上的矩(偏度、尾部)不一定对,正文下面提到的约 1% 偏差就来自这里。
连续平均、\(r,q,\sigma\) 为常数时:
例 26.3 新发行的平均价格看涨,无股息,\(S_0=K=50\),\(\sigma=40\%\),\(r=10\%\),\(T=1\)。连续平均时 \(M_1=52.59\),\(M_2=2{,}922.76\),于是 \(F_0=52.59\),\(\sigma=23.54\%\),Black 公式给出 5.62。用 12、52、250 次观测的离散平均时,价格分别为 6.00、5.70、5.63。平均价格期权的有效波动率约为标的波动率的 \(1/\sqrt3\)(这里 \(0.4/\sqrt3=23.1\%\)),这是一个好记的经验值。
本章代码用 40 万条路径的蒙特卡洛(250 次观测)得到 \(5.569\pm0.013\),比矩匹配的 5.63 低约 1%。这说明矩匹配有小幅偏差:算术平均的真实分布右尾比匹配的对数正态略薄。第 27b 章用树方法得到的收敛值 5.58 与蒙特卡洛一致。对定价精度要求高的场合,应以矩匹配为初值,用以几何平均亚式期权为控制变量的蒙特卡洛精确定价。
已部分观测的亚式期权
存续期中途,平均期由已观测的 \(t_1\)(期间平均价 \(\bar S\))和剩余的 \(t_2\) 组成。平均价格看涨的收益为
平均执行价期权
平均执行价期权(average strike option)的看涨收益 \(\max(0,S_T-S_{ave})\),看跌收益 \(\max(0,S_{ave}-S_T)\)。它保证一段时间内频繁买入资产的平均成本不高于期末价格(或频繁卖出的平均价不低于期末价格)。假设 \(S_{ave}\) 近似对数正态,可以把它当作 26.14 节的交换期权来估值。
26.14 资产交换期权
交换期权(exchange option)赋予持有人在 \(T\) 时放弃价值 \(U_T\) 的资产、换取价值 \(V_T\) 的资产的权利,收益 \(\max(V_T-U_T,0)\)。例子很多:对美国投资者,用澳元买日元的期权是用一种外币资产交换另一种;以股换股的要约收购给了目标公司股东一个"用一种股票交换另一种"的选择。
设 \(U,V\) 都服从几何布朗运动,波动率 \(\sigma_U,\sigma_V\),瞬时相关 \(\rho\),收益率 \(q_U,q_V\)。Margrabe(1978)公式为
两点值得体会。
第一,公式与无风险利率 \(r\) 无关。\(r\) 上升时,风险中性世界里两种资产的增长率同时上升,贴现率也上升,恰好互相抵消。本章代码对 \(r=1\%,5\%,10\%\) 分别做蒙特卡洛,结果完全相同(同一组随机数下 \(r\) 在代数上被约掉)。
第二,\(\hat\sigma\) 是比值 \(V/U\) 的波动率。把 (26.5) 与 BSM 公式 (17.4) 比较可以看出:交换期权等于 \(U_0\) 份"以 \(V/U\) 为标的、执行价 1、无风险利率 \(q_U\)、收益率 \(q_V\)"的欧式看涨。换句话说,用 \(U\) 作为记账单位,交换期权就是一个普通看涨。这正是第 28 章"计价单位变换"的第一个应用,那里会用一行推导证明 (26.5)。Rubinstein(1991)指出美式交换期权同样可以看作 \(U_0\) 份这样的美式期权,用二叉树估值。
金融直觉:\(\hat\sigma^2=\sigma_U^2+\sigma_V^2-2\rho\sigma_U\sigma_V\) 就是你在 CFA 里熟悉的两资产组合方差公式,权重取 \(+1\)(做多 \(V\))和 \(-1\)(做空 \(U\)):\(\text{Var}(\ln V-\ln U)\)。两者相关性越高,价差越稳定,交换期权越便宜。例:\(\sigma_U=\sigma_V=30\%\),\(\rho=0.8\),\(\hat\sigma=\sqrt{0.09+0.09-0.144}=19\%\);若 \(\rho=0\),\(\hat\sigma=42\%\)。 为什么 \(r\) 消失:以 \(U\) 为记账单位("用多少股 \(U\) 来计价"),收益 \(\max(V_T-U_T,0)=U_T\max(V_T/U_T-1,0)\)。在这个单位下,现金和利率都不出现,只剩比值 \(V/U\) 的运动,它的漂移由两者的收益率 \(q_U,q_V\) 决定,与 \(r\) 无关。
由交换期权还可以给"两者取优/取劣"定价:
对量化交易者来说,Margrabe 公式是配对交易与相对价值策略的天然期权语言:一个"做多 \(V\)、做空 \(U\),亏损封底"的价差头寸,其封底成本就是交换期权的价格,而决定价格的只有价差的波动率 \(\hat\sigma\),与绝对利率水平无关。
26.15 多资产期权
涉及两个以上风险资产的期权有时称为彩虹期权(rainbow options),例如 CBOT 国债期货的空头可以在一篮子可交割债券中选择交割(第 6 章),这个"最便宜可交割"选择权就是一个多资产期权。
最流行的是欧式篮子期权(basket option),收益取决于一篮子资产(个股、股指或货币)的总价值。可以假设各资产服从相关的几何布朗运动用蒙特卡洛估值;更快的方法与亚式期权相同:计算到期时风险中性篮子价值的前两阶矩,假设其对数正态,再用 Black 模型和 (26.3)(26.4):
量化实战
本章内容在量化交易中的用途
- 结构化产品定价与风控。国内的雪球、凤凰、鲨鱼鳍、二元收益凭证等产品,由本章的障碍期权、二元期权、亚式期权组合而成。买方投研可以用本章公式快速估算"产品内含期权的公允价值",与发行价比较得出隐含费率;卖方需要知道离散观测修正、vega 符号翻转、障碍附近 delta 跳变这些坑。
- 定价库的单元测试。障碍期权的"敲入 + 敲出 = 普通"、普通期权 = 资产或无 − \(K\) × 现金或无、选择者期权的分解等关系,是定价库最便宜也最有效的回归测试:任何一个模型改动都应保证这些恒等式在数值精度内成立。
- 相对价值与配对交易。Margrabe 公式给出了价差期权的价格,可用于评估"价差头寸加止损"的期权价值,也可以把两资产比值的波动率 \(\hat\sigma\) 当作配对交易的风险度量。
- 商品和外汇的平均价结算。亚式期权的矩匹配公式适用于按月均价结算的商品期权、企业外汇收入的对冲比较。
- 用蒙特卡洛核对解析式。本章的公式都不简单,且常有符号陷阱(精读笔记的原文抽取就丢了负号)。在系统中实现任何一个奇异期权解析式时,都应同时写一个蒙特卡洛版本做交叉检验。
Python 示例:奇异期权解析式与蒙特卡洛核对
下面的代码依次完成:(1) 复算例 26.1 缺口看跌;(2) 实现障碍期权公式,与每日观测的蒙特卡洛和 BGK 修正比较,验证敲入敲出平价,观察负 vega;(3) 复算例 26.2 浮动回望;(4) 复算例 26.3 亚式期权(连续与离散矩匹配,并与蒙特卡洛比较);(5) Margrabe 公式与蒙特卡洛,展示与 \(r\) 无关;(6) 用二元正态分布实现 call on call 并用蒙特卡洛验证;(7) 选择者期权分解;(8) 永续美式看跌。
import numpy as np
from scipy.stats import norm, multivariate_normal
from scipy.optimize import brentq
N = norm.cdf
def bsm(S, K, T, r, q, sig, kind="call"):
d1 = (np.log(S/K) + (r - q + 0.5*sig**2)*T) / (sig*np.sqrt(T))
d2 = d1 - sig*np.sqrt(T)
if kind == "call":
return S*np.exp(-q*T)*N(d1) - K*np.exp(-r*T)*N(d2)
return K*np.exp(-r*T)*N(-d2) - S*np.exp(-q*T)*N(-d1)
# ---------- 1) 缺口看跌:例 26.1 ----------
def gap_put(S, K1, K2, T, r, q, sig):
d1 = (np.log(S/K2) + (r - q + 0.5*sig**2)*T) / (sig*np.sqrt(T))
d2 = d1 - sig*np.sqrt(T)
return K1*np.exp(-r*T)*N(-d2) - S*np.exp(-q*T)*N(-d1)
print("例26.1 普通看跌 = %.0f, 缺口看跌 = %.0f" % (
bsm(500000, 400000, 1, 0.05, 0, 0.2, "put"),
gap_put(500000, 400000, 350000, 1, 0.05, 0, 0.2)))
# ---------- 2) 障碍期权解析式(以向上敲出看涨、向下敲出看涨为例)----------
def barrier_call(S, K, H, T, r, q, sig, kind):
lam = (r - q + 0.5*sig**2) / sig**2
sT = sig*np.sqrt(T)
y = np.log(H**2/(S*K))/sT + lam*sT
x1 = np.log(S/H)/sT + lam*sT
y1 = np.log(H/S)/sT + lam*sT
c = bsm(S, K, T, r, q, sig)
A = S*np.exp(-q*T)*(H/S)**(2*lam)
B = K*np.exp(-r*T)*(H/S)**(2*lam-2)
if kind in ("di", "do"):
if H <= K:
cdi = A*N(y) - B*N(y - sT)
return cdi if kind == "di" else c - cdi
cdo = (S*N(x1)*np.exp(-q*T) - K*np.exp(-r*T)*N(x1 - sT)
- A*N(y1) + B*N(y1 - sT))
return cdo if kind == "do" else c - cdo
if kind in ("ui", "uo"):
if H <= K:
return c if kind == "ui" else 0.0
cui = (S*N(x1)*np.exp(-q*T) - K*np.exp(-r*T)*N(x1 - sT)
- A*(N(-y) - N(-y1)) + B*(N(-y + sT) - N(-y1 + sT)))
return cui if kind == "ui" else c - cui
def mc_barrier_call(S, K, H, T, r, q, sig, kind, m, n=200_000, seed=1):
"""离散观测 m 次的障碍看涨,蒙特卡洛(对数价格精确离散化)"""
rng = np.random.default_rng(seed)
dt = T/m
z = rng.standard_normal((n, m))
logS = np.log(S) + np.cumsum((r - q - 0.5*sig**2)*dt + sig*np.sqrt(dt)*z, axis=1)
path = np.exp(logS)
hit = (path.max(axis=1) >= H) if kind[0] == "u" else (path.min(axis=1) <= H)
pay = np.maximum(path[:, -1] - K, 0.0)
pay = pay*(~hit) if kind[1] == "o" else pay*hit
disc = np.exp(-r*T)*pay
return disc.mean(), disc.std()/np.sqrt(n)
S0, K, H, T, r, q, sig = 50, 50, 60, 0.75, 0.10, 0.0, 0.30
cont = barrier_call(S0, K, H, T, r, q, sig, "uo")
m = 63 # 9 个月约 63 个交易日,每日观测一次
Hadj = H*np.exp(0.5826*sig*np.sqrt(T/m))
disc = barrier_call(S0, K, Hadj, T, r, q, sig, "uo")
mc, se = mc_barrier_call(S0, K, H, T, r, q, sig, "uo", m)
print("向上敲出看涨: 连续观测 %.4f | BGK修正(m=63) %.4f | MC每日观测 %.4f ± %.4f"
% (cont, disc, mc, se))
print("敲入+敲出 = %.4f, 普通看涨 = %.4f" % (
barrier_call(S0, K, H, T, r, q, sig, "ui") + cont, bsm(S0, K, T, r, q, sig)))
# 向上敲出看涨的 vega 可能为负
for s in (0.2, 0.3, 0.4):
print(" sigma=%.1f c_uo=%.4f" % (s, barrier_call(S0, K, H, T, r, q, s, "uo")))
# ---------- 3) 浮动回望:例 26.2 ----------
def lookback_float(S, Smin, Smax, T, r, q, sig):
sT = sig*np.sqrt(T)
k = sig**2/(2*(r - q))
a1 = (np.log(S/Smin) + (r - q + 0.5*sig**2)*T)/sT
a2 = a1 - sT
a3 = (np.log(S/Smin) + (-r + q + 0.5*sig**2)*T)/sT
Y1 = -2*(r - q - 0.5*sig**2)*np.log(S/Smin)/sig**2
call = (S*np.exp(-q*T)*N(a1) - S*np.exp(-q*T)*k*N(-a1)
- Smin*np.exp(-r*T)*(N(a2) - k*np.exp(Y1)*N(-a3)))
b1 = (np.log(Smax/S) + (-r + q + 0.5*sig**2)*T)/sT
b2 = b1 - sT
b3 = (np.log(Smax/S) + (r - q - 0.5*sig**2)*T)/sT
Y2 = 2*(r - q - 0.5*sig**2)*np.log(Smax/S)/sig**2
put = (Smax*np.exp(-r*T)*(N(b1) - k*np.exp(Y2)*N(-b3))
+ S*np.exp(-q*T)*k*N(-b2) - S*np.exp(-q*T)*N(b2))
return call, put
c_fl, p_fl = lookback_float(50, 50, 50, 0.25, 0.10, 0.0, 0.40)
print("例26.2 浮动回望看涨 = %.2f, 浮动回望看跌 = %.2f" % (c_fl, p_fl))
# ---------- 4) 亚式期权矩匹配:例 26.3 ----------
def black(F, K, T, r, sig, kind="call"):
d1 = (np.log(F/K) + 0.5*sig**2*T)/(sig*np.sqrt(T))
d2 = d1 - sig*np.sqrt(T)
if kind == "call":
return np.exp(-r*T)*(F*N(d1) - K*N(d2))
return np.exp(-r*T)*(K*N(-d2) - F*N(-d1))
def asian_cont(S, K, T, r, q, sig):
g = r - q
M1 = (np.exp(g*T) - 1)/(g*T)*S
M2 = (2*np.exp((2*g + sig**2)*T)*S**2/((g + sig**2)*(2*g + sig**2)*T**2)
+ 2*S**2/(g*T**2)*(1/(2*g + sig**2) - np.exp(g*T)/(g + sig**2)))
sA = np.sqrt(np.log(M2/M1**2)/T)
return M1, M2, sA, black(M1, K, T, r, sA)
def asian_disc(S, K, T, r, q, sig, m):
Ti = T*np.arange(1, m + 1)/m
F = S*np.exp((r - q)*Ti)
M1 = F.mean()
# M2 = (1/m^2) sum_i sum_j F_i F_j exp(sig^2 * min(T_i,T_j))
tmin = np.minimum.outer(Ti, Ti)
M2 = (np.outer(F, F)*np.exp(sig**2*tmin)).sum()/m**2
sA = np.sqrt(np.log(M2/M1**2)/T)
return black(M1, K, T, r, sA)
M1, M2, sA, v = asian_cont(50, 50, 1, 0.10, 0.0, 0.40)
print("例26.3 M1=%.2f M2=%.2f sigma=%.2f%% 价格=%.2f" % (M1, M2, 100*sA, v))
print(" 离散平均 m=12/52/250:", ["%.2f" % asian_disc(50, 50, 1, .1, 0, .4, m) for m in (12, 52, 250)])
pays = []
for seed in range(8): # 分 8 批,共 40 万条路径
rng = np.random.default_rng(seed)
z = rng.standard_normal((50_000, 250))
paths = 50*np.exp(np.cumsum((0.1 - 0.5*0.4**2)/250 + 0.4*np.sqrt(1/250)*z, axis=1))
pays.append(np.exp(-0.1)*np.maximum(paths.mean(axis=1) - 50, 0))
pay = np.concatenate(pays)
print(" MC(m=250) = %.3f ± %.3f" % (pay.mean(), pay.std()/np.sqrt(pay.size)))
# ---------- 5) Margrabe 交换期权 ----------
def margrabe(V, U, T, sV, sU, rho, qV=0.0, qU=0.0):
sh = np.sqrt(sU**2 + sV**2 - 2*rho*sU*sV)
d1 = (np.log(V/U) + (qU - qV + 0.5*sh**2)*T)/(sh*np.sqrt(T))
return V*np.exp(-qV*T)*N(d1) - U*np.exp(-qU*T)*N(d1 - sh*np.sqrt(T))
for r_ in (0.01, 0.05, 0.10):
rng = np.random.default_rng(3)
z1 = rng.standard_normal(400_000)
z2 = 0.6*z1 + np.sqrt(1 - 0.36)*rng.standard_normal(400_000)
VT = 100*np.exp((r_ - 0.5*0.3**2) + 0.3*z1)
UT = 100*np.exp((r_ - 0.5*0.2**2) + 0.2*z2)
pay = np.exp(-r_)*np.maximum(VT - UT, 0)
print("Margrabe r=%.2f: 公式 %.4f, MC %.4f ± %.4f" % (r_, margrabe(100, 100, 1, .3, .2, .6),
pay.mean(), pay.std()/np.sqrt(pay.size)))
# ---------- 6) 复合期权(call on call):二元正态公式 vs MC ----------
def M2d(a, b, rho):
return multivariate_normal(mean=[0, 0], cov=[[1, rho], [rho, 1]]).cdf([a, b])
def call_on_call(S, K1, K2, T1, T2, r, q, sig):
Sstar = brentq(lambda s: bsm(s, K2, T2 - T1, r, q, sig) - K1, 1e-6, 1e4)
a1 = (np.log(S/Sstar) + (r - q + 0.5*sig**2)*T1)/(sig*np.sqrt(T1))
a2 = a1 - sig*np.sqrt(T1)
b1 = (np.log(S/K2) + (r - q + 0.5*sig**2)*T2)/(sig*np.sqrt(T2))
b2 = b1 - sig*np.sqrt(T2)
rho = np.sqrt(T1/T2)
return (S*np.exp(-q*T2)*M2d(a1, b1, rho) - K2*np.exp(-r*T2)*M2d(a2, b2, rho)
- np.exp(-r*T1)*K1*N(a2))
S, K1, K2, T1, T2, r, q, sig = 50, 3, 50, 0.5, 1.0, 0.05, 0.0, 0.3
rng = np.random.default_rng(11)
S1 = S*np.exp((r - q - 0.5*sig**2)*T1 + sig*np.sqrt(T1)*rng.standard_normal(1_000_000))
inner = bsm(S1, K2, T2 - T1, r, q, sig)
pay = np.exp(-r*T1)*np.maximum(inner - K1, 0)
print("Call on call: 公式 %.4f, MC %.4f ± %.4f" % (call_on_call(S, K1, K2, T1, T2, r, q, sig),
pay.mean(), pay.std()/np.sqrt(pay.size)))
# ---------- 7) 选择者期权 = 看涨 + 调整看跌 ----------
S, K, T1, T2, r, q, sig = 50, 50, 0.25, 0.5, 0.08, 0.0, 0.25
chooser = bsm(S, K, T2, r, q, sig) + np.exp(-q*(T2 - T1))*bsm(
S, K*np.exp(-(r - q)*(T2 - T1)), T1, r, q, sig, "put")
rng = np.random.default_rng(5)
S1 = S*np.exp((r - q - 0.5*sig**2)*T1 + sig*np.sqrt(T1)*rng.standard_normal(1_000_000))
v1 = np.maximum(bsm(S1, K, T2 - T1, r, q, sig), bsm(S1, K, T2 - T1, r, q, sig, "put"))
pay = np.exp(-r*T1)*v1
print("选择者期权: 分解 %.4f, MC %.4f ± %.4f" % (chooser, pay.mean(), pay.std()/np.sqrt(pay.size)))
# ---------- 8) 永续美式看跌 ----------
def perp_put(S, K, r, q, sig):
w = r - q - 0.5*sig**2
g2 = (w + np.sqrt(w**2 + 2*sig**2*r))/sig**2
H2 = K*g2/(g2 + 1)
val = K/(g2 + 1)*((g2 + 1)/g2*S/K)**(-g2) if S > H2 else K - S
return H2, val
print("永续美式看跌 (S=K=50, r=5%%, q=0, sigma=30%%): 边界 H2=%.2f, 价值 %.4f" % perp_put(50, 50, .05, 0, .3))
输出:
例26.1 普通看跌 = 3436, 缺口看跌 = 1896
向上敲出看涨: 连续观测 0.3136 | BGK修正(m=63) 0.4429 | MC每日观测 0.4337 ± 0.0032
敲入+敲出 = 6.9924, 普通看涨 = 6.9924
sigma=0.2 c_uo=0.8155
sigma=0.3 c_uo=0.3136
sigma=0.4 c_uo=0.1457
例26.2 浮动回望看涨 = 8.04, 浮动回望看跌 = 7.79
例26.3 M1=52.59 M2=2922.76 sigma=23.54% 价格=5.62
离散平均 m=12/52/250: ['6.00', '5.70', '5.63']
MC(m=250) = 5.569 ± 0.013
Margrabe r=0.01: 公式 9.5846, MC 9.6226 ± 0.0259
Margrabe r=0.05: 公式 9.5846, MC 9.6226 ± 0.0259
Margrabe r=0.10: 公式 9.5846, MC 9.6226 ± 0.0259
Call on call: 公式 4.7969, MC 4.7969 ± 0.0068
选择者期权: 分解 6.1071, MC 6.1130 ± 0.0035
永续美式看跌 (S=K=50, r=5%, q=0, sigma=30%): 边界 H2=26.32, 价值 11.6073
读输出时注意:
- 例 26.1、26.2、26.3 的结果与原书完全一致($3,436 和 $1,896;7.79 和 8.04;\(M_1=52.59\)、\(M_2=2922.76\)、23.54%、5.62;离散平均 6.00、5.70、5.63)。
- 向上敲出看涨在连续观测下只值 0.314,每日观测的蒙特卡洛值 0.434,差了 38%。BGK 修正把障碍外推到 \(60e^{0.5826\times0.3\sqrt{0.75/63}}\approx61.14\),得到 0.443,与蒙特卡洛的差距缩小到约 2%。实盘产品几乎都是离散观测,直接套连续公式会系统性低估敲出类产品的价值。
- 波动率从 20% 升到 40%,向上敲出看涨价值从 0.82 降到 0.15:负 vega。
- 亚式期权的矩匹配结果(5.63)比蒙特卡洛(5.569 ± 0.013)高约 1%,说明矩匹配有可见但不大的偏差。
- Margrabe 公式在三个利率水平下给出同一个值;蒙特卡洛与公式相差约 1.5 个标准误。
- call on call 公式值与蒙特卡洛一致,说明我们对抽取丢失的负号所做的还原是正确的。
本章小结
奇异期权五花八门,但定价方法只有几种。组合产品、缺口期权、二元期权、选择者期权直接拆成普通期权与二元期权;远期开始期权和棘轮期权利用平值期权价值与标的价格成正比的齐次性,价值为 \(ce^{-qT_1}\);复合期权涉及两个时点,需要相关系数为 \(\sqrt{T_1/T_2}\) 的二元正态分布;障碍期权和回望期权依靠反射原理得到解析式,敲入加敲出等于普通期权,离散观测要做 \(e^{\pm0.5826\sigma\sqrt{T/m}}\) 修正;亚式期权和篮子期权用矩匹配加 Black 模型;交换期权的 Margrabe 公式与利率无关,本质是以一种资产为计价单位的普通期权。永续美式期权是少数有闭式解的美式期权,喊价期权和非标准美式期权用树倒推。障碍期权有负 vega 和不连续 delta,是最难对冲的一类。
| 产品 | 关键公式或要点 |
|---|---|
| 延迟付款零成本化 | \(A=ce^{rT}\),收益 \(\max(S_T-K-A,-A)\) |
| 永续美式看涨/看跌 | 边界 \(H_1=K\gamma_1/(\gamma_1-1)\),\(H_2=K\gamma_2/(\gamma_2+1)\) |
| 缺口看涨 | \(S_0e^{-qT}N(d_1)-K_1e^{-rT}N(d_2)\),\(d_{1,2}\) 用 \(K_2\) |
| 远期开始期权 | \(ce^{-qT_1}\) |
| 选择者期权 | 看涨\((K,T_2)\) + \(e^{-q(T_2-T_1)}\) 份看跌\((Ke^{-(r-q)(T_2-T_1)},T_1)\) |
| 复合期权 | 二元正态 \(M(\cdot,\cdot;\sqrt{T_1/T_2})\),\(S^*\) 由内层期权价值 \(=K_1\) 确定 |
| 障碍期权 | 敲入 + 敲出 = 普通;\(\lambda=(r-q+\sigma^2/2)/\sigma^2\);离散修正 \(He^{\pm0.5826\sigma\sqrt{T/m}}\) |
| 二元期权 | 现金或无 \(Qe^{-rT}N(d_2)\);资产或无 \(S_0e^{-qT}N(d_1)\) |
| 固定回望 | \(c_{fix}=p^*_{fl}+S_0e^{-qT}-Ke^{-rT}\) |
| 亚式/篮子期权 | \(F_0=M_1\),\(\sigma^2=\ln(M_2/M_1^2)/T\),代入 Black 模型 |
| 部分观测亚式 | \(K^*=\frac{t_1+t_2}{t_2}K-\frac{t_1}{t_2}\bar S\),乘 \(\frac{t_2}{t_1+t_2}\) |
| Margrabe 交换期权 | \(V_0e^{-q_VT}N(d_1)-U_0e^{-q_UT}N(d_2)\),\(\hat\sigma^2=\sigma_U^2+\sigma_V^2-2\rho\sigma_U\sigma_V\) |
练习
基础
-
解释远期开始期权与选择者期权的区别(原书习题 26.1)。 提示:远期开始期权在 \(T_1\) 确定执行价(设为平值),类型事先确定;选择者期权执行价事先确定,在 \(T_1\) 选择类型。
-
浮动回望看涨与浮动回望看跌组合的收益是什么? 提示:\((S_T-S_{\min})+(S_{\max}-S_T)=S_{\max}-S_{\min}\),即期间价格的极差(原书习题 26.2)。
-
证明:同执行价、同障碍、同期限的欧式敲入与敲出期权之和等于普通欧式期权。这一关系对美式期权是否成立? 提示:对每条路径恰好一个生效。美式不成立:敲出美式期权可能被提前行权,提前行权的最优时机依赖于是否已敲入,两者的最优策略无法拼成普通美式期权的最优策略(原书习题 26.17)。
-
资产价格 $50、波动率 20%、\(r=5\%\)、无收益。6 个月后支付 $100(若 \(S_T>52\))的现金或无看涨价值是多少?执行价 52 的资产或无看涨呢?由此算出执行价 52 的普通看涨。 提示:\(d_2=[\ln(50/52)+(0.05-0.02)\times0.5]/(0.2\sqrt{0.5})\approx-0.171\),现金或无 \(=100e^{-0.025}N(-0.171)\approx42.1\);资产或无 \(=50N(d_1)\),\(d_1\approx-0.030\),约 24.4;普通看涨 \(=24.4-0.52\times42.1\approx2.5\)。
-
用 Margrabe 公式说明:为什么交换期权的价格不依赖于无风险利率?如果 \(\rho=1\) 且 \(\sigma_U=\sigma_V\),期权价值是多少? 提示:\(\hat\sigma=0\),比值 \(V/U\) 是确定的,价值等于 \(\max(V_0e^{-q_VT}-U_0e^{-q_UT},0)\)。
进阶
-
证明亚式期权平价关系 \(c_1+c_2-c_3=p_1+p_2-p_3\),其中 \(c_1,p_1\) 是执行价 \(K\) 的平均价格看涨/看跌,\(c_2,p_2\) 是平均执行价看涨/看跌,\(c_3,p_3\) 是执行价 \(K\) 的普通看涨/看跌(原书习题 26.4)。 提示:分别计算收益:\(c_1-p_1=S_{ave}-K\),\(c_2-p_2=S_T-S_{ave}\),\(c_3-p_3=S_T-K\)。
-
用本章的
barrier_call函数画出向上敲出看涨的 delta 随 \(S_0\) 的变化(\(S_0\) 从 40 到 59.9),观察 delta 何时变为负,以及在障碍附近的大小。 提示:在障碍附近 delta 是很大的负数,因为价格再涨一点就会敲出(原书习题 26.27 讨论希腊字母可正可负)。 -
把本章亚式期权蒙特卡洛改为以几何平均亚式期权为控制变量,比较方差缩减效果。 提示:离散几何平均 \(G\) 服从对数正态,\(\ln G\) 的均值为 \(\ln S_0+(r-q-\sigma^2/2)\bar t\)(\(\bar t\) 为观测时点的均值),方差为 \(\sigma^2\frac{1}{m^2}\sum_{i,j}\min(T_i,T_j)\),可用 Black 公式精确定价;控制变量估计量为 \(\hat A-\beta(\hat G-G^{exact})\)。
-
一个 1 年期"优胜证书"(outperformance certificate):到期支付 \(100\times\max(1,\ 1+(S_T/S_0-1)\cdot p)\),其中 \(p\) 为参与率,要求初始价值为 100 且 \(r=4\%\)。把它分解为零息债和看涨期权,并求 \(p\)(\(\sigma=25\%\),\(q=0\))。 提示:收益 \(=100+\frac{100p}{S_0}\max(S_T-S_0,0)\);令 \(100e^{-0.04}+\frac{100p}{S_0}c=100\) 解出 \(p\)。原书习题 26.33 有更复杂的版本。
-
分析观测频率对回望期权与障碍期权价值的影响方向:观测从连续变为每日,浮动回望看涨、向下敲出看涨、向下敲入看涨的价值分别上升还是下降? 提示:离散观测下 \(S_{\min}\) 更高,浮动回望看涨价值下降;更难触及障碍,敲出上升、敲入下降(原书习题 26.15、26.16)。
原书推荐习题:26.4、26.5、26.17(期权之间的平价关系);26.12(白银换黄金的交换期权);26.18、26.26(二元期权);26.22(敲入敲出平价的数值验证);26.21、26.30(亚式期权,连续与季度观测,建议与蒙特卡洛比较);26.27(障碍期权希腊字母符号可变);26.31(普通期权与平均价格期权 delta 对冲效果的比较实验);26.33(优胜证书的分解);26.35(普通、二元、缺口看涨之间的关系);26.36(棘轮期权估值公式)。
原书对照
| 本章小节 | 原书章节 | PDF 页码 |
|---|---|---|
| 章首导言 | Chapter 26 introduction | p.621 |
| 26.1 组合产品 | 26.1 Packages | p.621–622 |
| 26.2 永续美式期权 | 26.2 Perpetual American Call and Put Options | p.622–623 |
| 26.3 非标准美式期权 | 26.3 Nonstandard American Options | p.623 |
| 26.4 缺口期权 | 26.4 Gap Options(例 26.1) | p.624 |
| 26.5 远期开始期权 | 26.5 Forward Start Options | p.625 |
| 26.6 棘轮期权 | 26.6 Cliquet Options | p.625 |
| 26.7 复合期权 | 26.7 Compound Options | p.625–626 |
| 26.8 选择者期权 | 26.8 Chooser Options | p.626–627 |
| 26.9 障碍期权 | 26.9 Barrier Options | p.627–629 |
| 26.10 二元期权 | 26.10 Binary Options | p.629–630 |
| 26.11 回望期权 | 26.11 Lookback Options(例 26.2) | p.630–632 |
| 26.12 喊价期权 | 26.12 Shout Options | p.632 |
| 26.13 亚式期权 | 26.13 Asian Options(例 26.3) | p.632–634 |
| 26.14 资产交换期权 | 26.14 Options to Exchange One Asset for Another | p.634–635 |
| 26.15 多资产期权 | 26.15 Options Involving Several Assets | p.635–636 |
| 小结、延伸阅读、习题 | Summary, Further Reading, Practice Questions | p.641–646 |
方差互换、波动率互换、VIX(26.16 节)与静态期权复制(26.17 节)见第 26b 章。
延伸阅读:Geske (1979) 复合期权;Goldman, Sosin & Gatto (1979) 回望期权;Margrabe (1978) 交换期权;Rubinstein & Reiner (1991) 障碍与二元期权;Stulz (1982) 两资产最大/最小期权;Turnbull & Wakeman (1991) 亚式期权近似;Clewlow & Strickland (1997) 奇异期权综述;Broadie, Glasserman & Kou (1997, 1998) 离散观测修正。