第 19a 章 希腊字母(上):Delta 对冲与合成期权
金融机构在场外市场把期权卖给客户以后,就背上了风险。如果卖出的期权和交易所的标准期权一模一样,在交易所买一份对冲掉即可;但为客户定制的期权通常没有现成的对冲工具,只能用标的资产和少数流动性好的期权去"拼"。本章和下一章讨论交易员如何做到这一点。
工具是一组被称为**希腊字母(Greek letters,简称 Greeks)**的敏感度指标。每个希腊字母度量期权头寸风险的一个维度:delta 度量对标的价格小幅变动的敏感度,gamma 度量 delta 本身变化的速度,vega 度量对波动率的敏感度,theta 度量时间流逝的影响,rho 度量对利率的敏感度。交易员的任务是管理这些希腊字母,使每一种风险都在可接受范围内。这套分析同样适用于交易所做市商和场外交易员。
原书第 19 章是全册最核心的内容之一,我们拆成两章。本章(19a)从"怎样对冲一份卖出的看涨期权"这个具体问题出发,先看几种失败的方案,再讲清楚 delta 对冲为什么有效、它的成本从哪里来,最后讨论 delta 对冲的反面——合成期权与组合保险,以及它在 1987 年股灾中的角色。下一章(19b)讨论 theta、gamma、vega、rho 以及它们之间的关系,并把 delta、gamma、vega 对冲放在一起。
学习目标
- 说明裸露头寸、有保护头寸和止损策略为什么都不是好的对冲,特别是止损策略失败的真正原因。
- 写出欧式期权(含收益率 \(q\))的 delta,计算组合的 delta 和使其 delta 中性所需的标的头寸。
- 描述动态 delta 对冲的过程,解释为什么对冲成本的期望现值等于 BSM 价格,以及"高买低卖"的成本来源。
- 用蒙特卡洛模拟评估对冲策略,理解对冲误差随再平衡频率下降的规律。
- 计算远期与期货的 delta,会用期货替代现货做 delta 对冲。
- 用合成看跌期权实现组合保险(卖出组合或卖空指数期货),理解其在 1987 年失灵的原因。
读前导读
这一章在解决什么问题
如果你管理过债券组合的利率风险,你已经掌握了本章的核心思想。债券价格对收益率的一阶敏感度是(美元)久期,用国债期货把组合久期调到目标值就是久期对冲;收益率变化后久期会变,需要定期调整。期权的 delta 就是期权价格对标的价格的一阶敏感度,delta 对冲就是把组合的 delta 调到零;股价变化后 delta 会变,需要再平衡。下一章的 gamma 则对应凸性。
| 债券 | 期权 |
|---|---|
| 美元久期 \(\partial P/\partial y\) | Delta \(\partial f/\partial S\) |
| 凸性 \(\partial^2P/\partial y^2\) | Gamma \(\partial^2f/\partial S^2\) |
| 用国债期货调久期 | 用股票或期货调 delta |
| 收益率变动后久期漂移,需再调整 | 股价变动后 delta 漂移,需再平衡 |
这一章要回答的问题有三个:为什么简单的方案(不对冲、全额持股、止损)不行;delta 对冲为什么有效、它的成本从哪里来(答案是"高买低卖",总成本的期望恰好是 BSM 价格);以及反过来用 delta 对冲的方法"制造"一份期权——组合保险,以及它在 1987 年的失败。
需要先想起来的数学
1. 导数是斜率。 \(\Delta=\partial c/\partial S\) 是期权价格—股价曲线在当前点的切线斜率。股价变动很小时 \(\delta c\approx\Delta\cdot\delta S\)。例:\(\Delta=0.6\),股价涨 0.5,期权约涨 0.3。见 第 00 册第 02 章 导数与泰勒展开。
2. 链式法则。 求 \(N(d_1(S))\) 对 \(S\) 的导数要乘上内层导数:\(\frac{d}{dS}N(d_1)=N'(d_1)\cdot\frac{\partial d_1}{\partial S}\)。第 15b 章证明 \(\Delta=N(d_1)\) 时用的就是它。
3. 线性组合的导数。 组合的 delta 等于各头寸 delta 按数量加总,因为求导是线性运算——和"组合久期 = 各债券久期按市值加权"一样。
4. 方差随时间可加与 \(\sqrt{\Delta t}\) 规律。 \(n\) 个独立误差相加,方差相加。如果每期误差方差为 \(c\,\Delta t^2\),共 \(n=T/\Delta t\) 期,总方差 \(cT\Delta t\),标准差正比于 \(\sqrt{\Delta t}\)。所以再平衡间隔缩小 4 倍,误差只减半。见 第 00 册第 07 章 概率中的分析工具。
怎么读这一章
必读:19.3(止损为什么失败,理解它才能理解 delta 对冲的"成本")、19.4(delta 定义、动态对冲过程、成本来源)、19.13(合成期权)。"远期与期货的 delta"读结论和例 19.8 即可。19.14 的历史案例对风控很有启发,值得一读。两个量化实战建议至少读一遍输出,理解"成本现值均值收敛到 BSM 价格"的含义。
19.1 贯穿本章的例子
某金融机构以 30 万美元卖出 10 万股不付息股票的欧式看涨期权。参数:
BSM 价格约为每股 2.40 美元,10 万股约 24 万美元。金融机构比理论价多卖了 6 万美元,但它必须对冲风险,否则这 6 万美元的"利润"可能变成巨额亏损。(期望收益 \(\mu\) 不影响定价,但会影响对冲方案在真实世界中的表现,所以这里也给出了它。)
19.2 裸露头寸与有保护头寸
裸露头寸(naked position):什么也不做。若 20 周后股价低于 50,期权作废,机构净赚 30 万;若期权被行权,机构须按届时市价买入 10 万股交给持有人,成本为 10 万 × (股价 − 执行价)。股价涨到 60 时,成本为 100 万,远超收到的 30 万。
有保护头寸(covered position):卖出期权后立即买入 10 万股。期权被行权时效果很好;但若股价下跌,股票会大亏——股价跌到 40,股票亏 90 万。(由平价关系可知,卖出有保护看涨的风险敞口等同于卖出一份裸露看跌。)
两者都不是好的对冲。若 BSM 的假设成立,两种方法的平均成本(准确说是按适当风险调整的贴现率计算的期望成本现值)都是 24 万;但单次的实际成本可能从 0 到 100 万以上。好的对冲应当使成本总是接近 24 万。
19.3 止损策略
一个看起来很聪明的方案是止损策略(stop-loss strategy):卖出执行价 \(K\) 的看涨期权(1 股)后,股价一升破 \(K\) 就买入 1 股,一跌破 \(K\) 就卖出。目标是:\(S<K\) 时处于裸露状态,\(S>K\) 时处于有保护状态,从而保证到期时若实值就持有股票、若虚值就不持有。
表面上看,总成本就是期权的初始内在价值
因为之后所有的买卖都发生在价格 \(K\)。如果这是对的,对冲就是完美的,而且成本总低于 BSM 价格——那就存在无风险套利了。所以一定有哪里不对。
(19.1) 错在两点:(1)现金流发生在不同时间,必须贴现;(2)更关键的是,买卖不可能恰好都在 \(K\) 发生。在有效市场中,当股价恰好等于 \(K\) 时,交易员无法知道它接下来会向上还是向下。实际操作中只能在 \(K+\epsilon\) 买入、在 \(K-\epsilon\) 卖出,每完成一次"买入再卖出"就损失 \(2\epsilon\)(不计交易费)。更密切地监控可以缩小 \(\epsilon\),但交易次数随之增加;当 \(\epsilon\to0\) 时,期望交易次数趋于无穷——维纳过程在任一有限区间内触及某个水平的次数是无限的。所以止损策略的成本不会收敛到 \(Q\)。
白话解释:止损策略的问题可以这样想。它其实也是一种"跌了卖、涨了买"的策略,只不过每次交易都押在 \(K\) 附近,而且一次买卖整整 1 股。股价在 \(K\) 附近来回抖动时,每抖一次你就在 \(K+\epsilon\) 买、在 \(K-\epsilon\) 卖,损失 \(2\epsilon\)。监控得越密,\(\epsilon\) 越小,但穿越次数越多,两者大致抵消,总损耗不会消失,而且完全取决于股价在 \(K\) 附近徘徊了多少次——这就是为什么它的成本方差始终很大。delta 对冲把"一次买卖 1 股"摊成"每次只调整一小部分",损耗变得平滑、可预期。
对虚值期权,如果股价始终没有触及 \(K\),止损对冲的成本为零;若股价路径多次穿越 \(K\),成本就会非常高。成本高度依赖于路径。
蒙特卡洛评估(表 19.1)。 原书模拟了 100 万条股价路径,每隔 \(\Delta t\) 观察一次:若在一个区间内股价从下方穿越 \(K\),就在区间末买入;从上方穿越,就在区间末卖出。用对冲绩效指标
来衡量,越接近 0 越好:
| \(\Delta t\)(周) | 5 | 4 | 2 | 1 | 0.5 | 0.25 |
|---|---|---|---|---|---|---|
| 绩效 | 0.98 | 0.93 | 0.83 | 0.79 | 0.77 | 0.76 |
无论 \(\Delta t\) 多小,指标都高于 0.7。止损不是一个好的对冲策略。
19.4 Delta 对冲
定义
期权的 delta(\(\Delta\))是期权价格对标的资产价格的变化率,也就是期权价格—股价曲线的斜率:
例 股价 100,期权价格 10,\(\Delta=0.6\)。投资者卖出 2,000 股的看涨期权(20 份合约),买入 \(0.6\times2{,}000=1{,}200\) 股对冲。股价涨 1 美元:股票赚 1,200 美元,期权价格约涨 0.60,期权空头亏 \(0.60\times2{,}000=1{,}200\) 美元;股价跌时反过来。 卖出 2,000 份期权的 delta 为 \(0.6\times(-2{,}000)=-1{,}200\);股票的 delta 为 1.0,1,200 股的 delta 为 +1,200;总 delta 为零。这样的头寸称为 delta 中性(delta neutral)。
delta 会随股价和时间变化,所以头寸只在短时间内保持 delta 中性,需要周期性调整,称为再平衡(rebalancing)。例如一天后股价涨到 110,delta 从 0.60 升到 0.65,就需再买 \(0.05\times2{,}000=100\) 股。定期调整的对冲称为动态对冲(dynamic hedging);建立后不再调整的称为静态对冲(static hedging),也叫"hedge-and-forget"。
金融直觉:delta 就是期权对股价的"久期"。债券经理说"组合美元久期 50 万,收益率每升 1 个基点亏 50 万",期权交易员说"组合 delta \(-1{,}200\) 股,股价每涨 1 元亏 1,200 元"。delta 中性对应久期中性。也和久期一样,delta 只管小幅变动:股价大幅变动时,曲线的弯曲(凸性,即下一章的 gamma)会让一阶近似失准,这就是为什么要再平衡。
与 BSM 的联系。 第 15a 章推导 BSM 方程时构造的无风险组合——空 1 份期权、多 \(\partial f/\partial S\) 股——正是一个 delta 中性头寸。可以说,BSM 定价就是"构造 delta 中性头寸,并论证它在瞬间只能赚无风险利率"。delta 对冲是 BSM 的实践版本:如果模型假设成立、再平衡足够频繁,对冲的成本就是 BSM 价格。
欧式股票期权的 delta
不付息股票欧式看涨期权:
证明见第 15b 章(利用恒等式 \(SN'(d_1)=Ke^{-rT}N'(d_2)\),\(\partial c/\partial S\) 中多余的两项相互抵消)。所以看涨多头的 delta 为 \(N(d_1)\),空头为 \(-N(d_1)\):卖出 1 份看涨期权要持有 \(N(d_1)\) 股对冲,买入 1 份看涨要卖空 \(N(d_1)\) 股。
欧式看跌期权,对平价 \(c-p=S-Ke^{-rT}\) 两边对 \(S\) 求导:
看跌多头用股票多头对冲,看跌空头用股票空头对冲。
推导拆解:看跌 delta 的推导只用了两件事。平价 \(c-p=S-Ke^{-rT}\) 对所有 \(S\) 都成立,所以两边对 \(S\) 求导仍然相等:左边 \(\partial c/\partial S-\partial p/\partial S\),右边 \(1-0=1\)(\(Ke^{-rT}\) 与 \(S\) 无关)。于是 \(\Delta_p=\Delta_c-1=N(d_1)-1\)。直观上:看涨多头 + 看跌空头 = 一股远期,其 delta 必须是 1。 为什么 \(N(d_1)\) 是 delta 而不是 \(N(d_2)\)?\(c=SN(d_1)-Ke^{-rT}N(d_2)\) 对 \(S\) 求导,除了 \(N(d_1)\) 本身,还有 \(d_1\)、\(d_2\) 随 \(S\) 变化带来的两项:\(SN'(d_1)\frac{\partial d_1}{\partial S}-Ke^{-rT}N'(d_2)\frac{\partial d_2}{\partial S}\)。由于 \(\frac{\partial d_1}{\partial S}=\frac{\partial d_2}{\partial S}=\frac1{S\sigma\sqrt T}\),且 \(SN'(d_1)=Ke^{-rT}N'(d_2)\),这两项正好抵消,只剩 \(N(d_1)\)。经济含义:行权概率随股价的变化不带来额外的一阶价值变化——在行权边界 \(S_T=K\) 上,期权收益恰好为零,边界的微小移动不影响价值。
delta 的形状(原书图 19.3、19.4):看涨 delta 随股价从 0 升到 1,看跌从 −1 升到 0,在 \(K\) 附近变化最快。随到期临近,实值看涨的 delta 趋于 1,虚值的趋于 0,平值的停留在 0.5 附近——这意味着临近到期的平值期权,delta 会在 0 和 1 之间剧烈摆动,对冲最难。
例 19.1 本章例子中,\(d_1=\dfrac{\ln(49/50)+(0.05+0.02)\times0.3846}{0.2\sqrt{0.3846}}=0.0542\),\(\Delta=N(d_1)=0.522\)。 卖出 10 万份看涨期权的头寸 delta 为 \(-52{,}200\)。
动态 delta 对冲的过程
机构卖出 10 万份看涨后每周再平衡一次。初始头寸 delta 为 \(-52{,}200\),须借入 \(52{,}200\times49=2{,}557{,}800\) 美元买入 52,200 股;利率 5%,第一周利息约 2,500 美元。
表 19.2(到期实值,成本 263,300 美元)。 第 1 周股价跌到 48.12,delta 降到 0.458,卖出 6,400 股,回收约 30.8 万美元,累计借款降到 2,252,300;第 2 周股价 47.37、delta 0.400,继续卖出……随后股价上涨,delta 逐步升高,到期前趋于 1.0。主要节点(周:股价 / delta):0:49.00/0.522;1:48.12/0.458;2:47.37/0.400;3:50.25/0.596;4:51.75/0.693;5:53.12/0.774;9:53.00/0.787;10:49.88/0.550;11:48.50/0.413;14:52.13/0.768;17:54.87/0.978;19:55.87/1.000;20:57.25/1.000。第 20 周头寸已完全有保护,累计成本(含利息)5,263,300 美元,收到执行价 500 万,净成本 263,300 美元。
表 19.3(到期虚值,成本 256,600 美元)。 股价最终为 48.12,delta 趋于 0,第 20 周头寸为裸露,累计成本 256,600 美元。
两个例子的成本贴现到今天后都接近、但不完全等于 BSM 价格 24 万。若对冲是完美的,每一条路径的贴现成本都应恰好等于 BSM 价格。偏差来自每周才再平衡一次;越频繁,偏差越小。两张表也是理想化的:假设波动率恒定、没有交易成本。
表 19.4(100 万条路径的模拟)。
| 再平衡间隔(周) | 5 | 4 | 2 | 1 | 0.5 | 0.25 |
|---|---|---|---|---|---|---|
| 绩效 | 0.42 | 0.38 | 0.28 | 0.21 | 0.16 | 0.13 |
delta 对冲远远优于止损,并且随再平衡频率提高而稳步改善。规律是:间隔减半,绩效指标约缩小到 \(1/\sqrt2\)(0.21 → 0.16 → 0.13 附近)。原因是每个再平衡区间内的对冲误差主要来自 \(\frac12\Gamma(\Delta S)^2\) 与其期望之差(第 19b 章),单期误差的方差与 \(\Delta t^2\) 同阶,\(n=T/\Delta t\) 期累加后总方差与 \(\Delta t\) 同阶,标准差与 \(\sqrt{\Delta t}\) 同阶。
delta 对冲让头寸价值尽量保持不变。 以表 19.2 第 9 周为例:期权价值升到 414,500,期权空头亏了 174,500;现金头寸(累计成本)比第 0 周差 1,442,900;股票市值从 2,557,800 增到 4,171,100。三者合计,净变化只有 4,100 美元。
成本从哪里来
delta 对冲本质上合成了一份期权多头,用来中和卖出的期权空头。观察表 19.2:股价下跌后 delta 降低,要卖股;股价上涨后 delta 升高,要买股。对冲期权空头意味着跌了卖、涨了买——"高买低卖"。24 万美元的平均成本,正是这些买入价与卖出价之差的现值。
这给了我们一个看期权价格的新角度:期权价格 = 在 BSM 世界里复制该期权、不断"高买低卖"的期望成本。
推导拆解:为什么每次再平衡都"高买低卖",而期望总成本又恰好等于 BSM 价格?考虑一个再平衡区间,持股 \(\Delta\) 股,期权空头。股价变动 \(\delta S\) 时,用泰勒展开(时间项先略去): 期权空头损益 \(\approx-\Delta\,\delta S-\tfrac12\Gamma(\delta S)^2\),股票损益 \(=\Delta\,\delta S\),合计 \(\approx-\tfrac12\Gamma(\delta S)^2\)。 对看涨期权 \(\Gamma>0\),所以无论股价涨还是跌,对冲组合都小亏一点(股价涨,期权涨得比股票多;股价跌,期权跌得比股票少)。这个小亏就是"高买低卖"的会计表达:跌了以后你按较低价格卖出股票、涨了以后按较高价格买入。 但同时,期权空头随时间流逝赚取 theta(\(-\Theta\,\delta t>0\)),再加上资金利息。第 15a 章的 PDE 保证:在期望上,theta 收入正好抵消 \(\tfrac12\Gamma\sigma^2S^2\delta t\) 的凸性损失。卖期权的人收到的期权费,就是预付的这笔"高买低卖"损耗。第 19b 章会把这一关系写成 \(\Theta+\tfrac12\sigma^2S^2\Gamma=r\Pi\)。
金融直觉:这与持有负凸性债券(如 MBS)后用国债期货做久期对冲完全一样。负凸性意味着收益率下降时久期变短、上升时久期变长,你的对冲调整总是"追涨杀跌",每次收益率大幅波动都会亏一点。MBS 投资者因此要求更高的利差作为补偿;期权卖方收取期权费作为补偿。利率波动越大,MBS 的对冲损耗越大;股价波动越大,期权越贵。波动率越大,股价来回摆动越厉害,高买低卖的损耗越大,期权就越贵。
组合的 delta
依赖于单一资产价格 \(S\) 的组合,其 delta 为 \(\partial\Pi/\partial S\)。若组合由 \(w_i\) 份期权 \(i\) 构成,则
例 某机构持有:(1) 10 万份 3 个月期、执行价 55 的看涨多头,delta 0.533;(2) 20 万份 5 个月期、执行价 56 的看涨空头,delta 0.468;(3) 5 万份 2 个月期、执行价 56 的看跌空头,delta −0.508。 组合 delta \(=100{,}000\times0.533-200{,}000\times0.468-50{,}000\times(-0.508)=-14{,}900\)。买入 14,900 股即可使组合 delta 中性。
交易成本
交易商通常每天再平衡一次。期权数量少时,买卖价差使每天再平衡的代价太高;但对大型组合来说是可行的:不论组合里有多少期权,只需在标的上做一笔交易就能使整个组合 delta 归零,价差成本被众多期权交易的利润吸收。这是衍生品交易存在规模经济的原因之一。
远期与期货的 delta
(对应原书 19.12 节后半部分。)
远期。 不付息股票远期多头的价值为 \(S_0-Ke^{-rT}\)(式 5.5)。股价变动 \(\Delta S\),远期价值也变动 \(\Delta S\),所以 1 股远期多头的 delta 恒为 1.0:远期多头可卖空 1 股对冲,远期空头可买入 1 股对冲。这是一个静态的"hedge-and-forget"对冲,无须调整。对收益率为 \(q\) 的资产,远期的 delta 为 \(e^{-qT}\)(式 5.7);股指远期取 \(q\) 为股息率,外汇远期取 \(q=r_f\)。
期货。 不付息股票的期货价格为 \(S_0e^{rT}\),股价变动 \(\Delta S\) 时期货价格变动 \(\Delta Se^{rT}\)。由于逐日结算,期货多头几乎立即获得这笔收益,所以期货的 delta 为 \(e^{rT}\);收益率为 \(q\) 的资产为 \(e^{(r-q)T}\)。可见,即使利率恒定、远期价格等于期货价格,逐日结算也让期货与远期的 delta 略有不同。
白话解释:期货 delta 为 \(e^{rT}\) 而不是 1 的原因:期货价格 \(F=Se^{rT}\),股价动 1 元,期货价格动 \(e^{rT}\) 元,而逐日结算让这笔差额当天就进账。远期也一样随股价动 \(e^{rT}\),但这笔钱要到 \(T\) 才结算,贴现回今天又变成 1。所以用期货对冲时,期货份数要比现货少一个因子 \(e^{-rT}\),即 (19.5)。这和固定收益里"用期货对冲时要按转换因子和久期比例调整合约数"是同类问题:找对两种工具之间的敏感度比例。
用期货做 delta 对冲。 设 \(T\) 为期货的期限,\(H_A\) 为所需的标的资产头寸,则等价的期货头寸为
例 19.8 一家美国银行的货币期权组合可以通过卖空 458,000 英镑实现 delta 中性;美国利率 4%,英国利率 7%。改用 9 个月期货:空头 \(e^{-(0.04-0.07)\times0.75}\times458{,}000\approx468{,}422\) 英镑(原书给出 468,442,按公式计算为 468,422,差异可忽略)。每份期货 62,500 英镑,\(468{,}422/62{,}500=7.49\),原书取整为卖空 7 份。
19.13 组合保险与合成期权
合成期权
基金经理常常希望为持有的组合买一份看跌期权:防范下跌,又保留上涨潜力。办法有二:一是直接买指数看跌期权(第 17.1 节);二是合成一份看跌期权。
**合成期权(synthetic option)**就是持有标的资产(或其期货)的一个头寸,使其 delta 等于所需期权的 delta,并随时间调整。合成某个期权与对冲它是互逆的:对冲一份期权空头,就是合成一份同样的期权多头。
为什么要合成而不直接购买?一是期权市场的流动性往往不足以吸收大基金的交易;二是基金经理需要的执行价、到期日常常与交易所期权不同。
用组合本身合成
组合欧式看跌期权的 delta(第 19b 章表 19.6)为
\(S_0\) 为组合价值,\(q\) 为组合股息率,\(\sigma\) 为组合波动率(通常可取 beta × 分散化市场指数的波动率),\(T\) 为期限。合成"组合 + 看跌期权"意味着:任何时刻应卖出原组合的比例为 \(e^{-qT}[1-N(d_1)]\),所得投资于无风险资产。
推导拆解:为什么是"卖出 \(e^{-qT}[1-N(d_1)]\)"?目标头寸是"组合 + 看跌期权",它对组合价值的 delta 是 \(1+\Delta_{\text{put}}=1+e^{-qT}[N(d_1)-1]=1-e^{-qT}[1-N(d_1)]\)。原来持有整个组合,delta 是 1。要把 delta 降到目标值,就得卖出 \(e^{-qT}[1-N(d_1)]\) 比例的组合,换成无风险资产(无风险资产 delta 为 0)。例 19.9 中这个比例是 32.15%,即"组合 + 保险"的整体 delta 只有约 0.68。
组合下跌时,看跌 delta 更负,卖出比例增加;组合上涨时,卖出比例减少,要买回一部分。资金在股票和无风险资产之间来回调配:股票涨了就卖无风险资产加仓股票,跌了就减仓股票买无风险资产。保险的成本来自总是在下跌后卖、上涨后买——又是"高买低卖"。
例 19.9 组合价值 9,000 万美元,经理需要 6 个月期、执行价 8,700 万的欧式看跌期权保护;\(r=9\%\),\(q=3\%\),\(\sigma=25\%\);标普 500 为 900,组合紧密跟踪标普 500。 方法一:买 1,000 份执行价 870 的标普 500 看跌合约(每份 100 倍指数)。 方法二:合成。\(S_0=90\),\(K=87\)(百万),\(T=0.5\): \(d_1=\dfrac{\ln(90/87)+(0.09-0.03+0.03125)\times0.5}{0.25\sqrt{0.5}}=0.4499\),delta \(=e^{-0.015}[N(0.4499)-1]=-0.3215\)。 初始应卖出 32.15% 的组合投入无风险资产。一天后若组合跌到 8,800 万,delta 变为 −0.3679,再卖出 4.64%;若涨到 9,200 万,delta 变为 −0.2787,买回 4.28%。
用指数期货
指数期货的交易成本一般低于成分股,所以更常用期货来合成。由 (19.6) 和 (19.8),卖空期货的美元金额占组合价值的比例为
\(T^*\) 为期货的期限。若组合价值为 \(A_1\) 倍指数,每份期货为 \(A_2\) 倍指数,则卖空期货份数为 \(e^{q(T^*-T)}e^{-rT^*}[1-N(d_1)]A_1/A_2\)。
例 19.10 接例 19.9,用 9 个月标普 500 期货:\(T=0.5\),\(T^*=0.75\),\(A_1=100{,}000\),\(A_2=250\),\(d_1=0.4499\),应卖空 122.96 ≈ 123 份,并随时间和指数变化调整。
组合不跟踪指数时:(a) 计算组合 beta;(b) 求能提供所需保护的指数期权头寸——执行价是组合达到保险价值时指数的预期水平(17.1 节的 CAPM 映射),期权份数是 beta = 1 时的 beta 倍;(c) 用指数期货合成这些期权。
19.14 股市波动率与 1987 年股灾
组合保险可能加剧市场波动:市场下跌时它要求卖出股票或卖空指数期货,前者直接压低指数,后者通过指数套利(第 5 章)把期货抛压传导到现货;市场上涨时则要求买入,可能加剧上涨。很多投资者有意或无意地遵循着类似规则(例如"跌了就卖以限制损失")。这些交易是否影响波动,取决于市场吸收它们的能力:占比很小时没有影响;若组合保险非常流行,就可能破坏市场稳定。
Business Snapshot 19.2 组合保险是 1987 年股灾的罪魁吗? 1987 年 10 月 19 日(周一),道指下跌逾 20%。当时有 600–900 亿美元的股票资产受合成看跌的组合保险规则约束。10 月 14–16 日(周三到周五)市场已下跌约 10%,且多集中在周五下午;按规则这应引发至少 120 亿美元的股票或指数期货卖出,实际只卖出约 40 亿,周一开盘前积压了巨量待卖指令。估计 10 月 19 日三家组合保险机构的卖出程序占纽交所卖出量的近 10%,组合保险卖出占指数期货市场全部卖出量的 21.3%。其他投资者预期到组合保险机构会大量抛售,也抢先卖出,可能加剧了下跌。市场跌得太快,交易系统超载,许多保险机构根本无法执行模型要求的交易,也就没有得到所需的保护。此后组合保险大幅降温。 教训:当很多市场参与者都在做同一件事时,执行某个交易策略——哪怕是对冲策略——也是危险的。
对量化交易者,这个教训有现代版本:动态对冲、波动率目标、风险平价、CPPI 等规则化策略都是"跌了卖、涨了买"或与之相关的顺周期交易;做市商的 gamma 敞口(第 19b 章)同样会在市场中放大或抑制波动。拥挤交易与流动性枯竭叠加,是这类策略最大的尾部风险。
量化实战一:用蒙特卡洛复现表 19.1 与表 19.4
对冲规则的回测框架。 原书表 19.1、19.4 的模拟框架可以复用来回测任何对冲规则:在真实世界测度(这里 \(\mu=13\%\))下生成股价路径,按规则在每个观察时刻调整持股,记录现金流,统计成本的均值和标准差。下面的代码复现了这两张表,同时计算了组合 delta、例 19.8 的期货对冲和例 19.9、19.10 的合成看跌。
注意两种成本口径:原书的绩效指标按不计利息的累计成本计算(我们按此口径复现了原书数字);若把每笔现金流按无风险利率贴现到今天,delta 对冲成本的均值就收敛到 BSM 价格 2.40——即使真实世界的期望收益是 13% 而不是 5%。这正是"风险中性定价的结果在真实世界同样成立"的数值证据。
import numpy as np
from scipy.stats import norm
def bs_call(S, K, tau, r, sig):
tau = np.maximum(tau, 1e-12)
d1 = (np.log(S / K) + (r + 0.5 * sig**2) * tau) / (sig * np.sqrt(tau))
return S * norm.cdf(d1) - K * np.exp(-r * tau) * norm.cdf(d1 - sig * np.sqrt(tau)), norm.cdf(d1)
# 原书 19.1 节的例子:卖出 10 万份 20 周欧式看涨
S0, K, r, sig, mu, T = 49.0, 50.0, 0.05, 0.20, 0.13, 20 / 52
c0, delta0 = bs_call(S0, K, T, r, sig)
print(f"BSM 价格={c0:.4f}/股(10 万股 {c0*1e5:,.0f} 美元),Delta={delta0:.3f}")
def hedge_costs(S, t, rule):
"""给定路径与持股规则,返回 (未贴现累计成本, 贴现到 0 时刻的成本)。
成本 = 买股支出 - 卖股收入 - 到期被行权时收到的执行价。"""
hold = rule(S, t)
trade = np.diff(np.c_[np.zeros(len(S)), hold], axis=1) # 每个观察时刻的买卖股数
exercised = S[:, -1] > K
out = []
for disc in (np.ones_like(t), np.exp(-r * t)):
cost = (trade * S * disc).sum(axis=1) - np.where(exercised, K * disc[-1], 0.0)
out.append(cost)
return out
def stop_loss(S, t): # 观察时刻股价在 K 之上就持股 1 股,在 K 之下就不持股
return (S > K).astype(float)
def delta_rule(S, t): # 观察时刻持股 N(d1),到期时持股 = 是否被行权
_, D = bs_call(S[:, :-1], K, T - t[:-1], r, sig)
return np.c_[D, (S[:, -1] > K).astype(float)]
def simulate(dt_weeks, n_paths=100_000, seed=0):
"""真实世界(mu=13%)下模拟股价路径。"""
rng = np.random.default_rng(seed)
n = int(round(20 / dt_weeks)); dt = T / n
t = np.arange(n + 1) * dt
z = rng.standard_normal((n_paths, n))
S = S0 * np.exp(np.cumsum(np.c_[np.zeros(n_paths), (mu - 0.5*sig**2)*dt + sig*np.sqrt(dt)*z], axis=1))
return S, t
print("间隔(周) | 止损: 绩效 | Delta对冲: 绩效 成本现值均值")
for w in (5, 4, 2, 1, 0.5, 0.25):
S, t = simulate(w)
sl_raw, _ = hedge_costs(S, t, stop_loss)
dh_raw, dh_pv = hedge_costs(S, t, delta_rule)
# 绩效 = 对冲成本标准差 / BSM 价格(按原书口径,成本不计利息)
print(f"{w:>7} | {sl_raw.std()/c0:5.2f} | {dh_raw.std()/c0:5.2f} {dh_pv.mean():.3f}")
# ---- 组合的 delta(19.4 节例)----
port_delta = 100_000 * 0.533 - 200_000 * 0.468 - 50_000 * (-0.508)
print(f"组合 delta = {port_delta:,.0f},需买入 {-port_delta:,.0f} 股")
# ---- 例 19.8:用 9 个月货币期货替代现货做 delta 对冲 ----
HA = -458_000
HF = np.exp(-(0.04 - 0.07) * 0.75) * HA
print(f"期货头寸 {HF:,.0f} 英镑 ≈ {HF/62_500:.2f} 份合约")
# ---- 例 19.9 / 19.10:合成看跌做组合保险 ----
def put_delta(S, K, T, r, q, sig):
d1 = (np.log(S / K) + (r - q + 0.5 * sig**2) * T) / (sig * np.sqrt(T))
return np.exp(-q * T) * (norm.cdf(d1) - 1), d1
for V in (90, 88, 92):
dlt, d1 = put_delta(V, 87, 0.5, 0.09, 0.03, 0.25)
print(f"组合 {V} 百万: d1={d1:.4f} 看跌 delta={dlt:.4f} -> 应卖出原组合的 {-dlt:.2%}")
_, d1 = put_delta(90, 87, 0.5, 0.09, 0.03, 0.25)
n_fut = np.exp(0.03 * (0.75 - 0.5)) * np.exp(-0.09 * 0.75) * (1 - norm.cdf(d1)) * 100_000 / 250
print(f"用 9 个月标普 500 期货:卖空 {n_fut:.2f} 份")
关键输出:
BSM 价格=2.4005/股(10 万股 240,053 美元),Delta=0.522
间隔(周) | 止损: 绩效 | Delta对冲: 绩效 成本现值均值
5 | 0.98 | 0.42 2.425
4 | 0.93 | 0.38 2.417
2 | 0.84 | 0.28 2.409
1 | 0.79 | 0.21 2.403
0.5 | 0.77 | 0.17 2.403
0.25 | 0.76 | 0.13 2.401
组合 delta = -14,900,需买入 14,900 股
期货头寸 -468,422 英镑 ≈ -7.49 份合约
组合 90 百万: d1=0.4499 看跌 delta=-0.3215 -> 应卖出原组合的 32.15%
组合 88 百万: d1=0.3227 看跌 delta=-0.3679 -> 应卖出原组合的 36.79%
组合 92 百万: d1=0.5742 看跌 delta=-0.2787 -> 应卖出原组合的 27.87%
用 9 个月标普 500 期货:卖空 122.96 份
两张表几乎逐位复现(止损 2 周一栏为 0.84,原书 0.83,属模拟误差)。delta 对冲的成本现值均值随频率提高收敛到 2.40,而止损的标准差始终在 0.76 以上。合成看跌的数字与例 19.9、19.10 一致。
量化实战二:一条路径上的逐周 delta 对冲(仿表 19.2 格式)
下面用一条模拟路径把对冲过程逐周展开。读者可以对照表 19.2、19.3 观察:股价下跌时卖股、上涨时买股;到期时若虚值,持股降为 0。
import numpy as np
import pandas as pd
from scipy.stats import norm
S0, K, r, sig, mu, T, N = 49.0, 50.0, 0.05, 0.20, 0.13, 20 / 52, 100_000
dt = 1 / 52
rng = np.random.default_rng(5)
S = S0 * np.exp(np.cumsum(np.r_[0, (mu - 0.5*sig**2)*dt + sig*np.sqrt(dt)*rng.standard_normal(20)]))
rows, shares, cum = [], 0.0, 0.0 # cum: 累计成本(含利息),单位千美元
for w in range(21):
tau = T - w * dt
if w < 20:
d1 = (np.log(S[w]/K) + (r + 0.5*sig**2)*tau) / (sig*np.sqrt(tau)); delta = norm.cdf(d1)
else:
delta = 1.0 if S[w] > K else 0.0
buy = round(delta * N) - shares
cum += buy * S[w] / 1000
rows.append([w, S[w], delta, int(buy), buy * S[w] / 1000, cum, cum * (np.exp(r*dt) - 1) if w < 20 else 0.0])
shares += buy
cum *= np.exp(r * dt) if w < 20 else 1.0
df = pd.DataFrame(rows, columns=["周", "股价", "Delta", "买入股数", "买入成本(千)", "累计成本含息(千)", "本周利息(千)"])
print(df.round({"股价": 2, "Delta": 3, "买入成本(千)": 1, "累计成本含息(千)": 1, "本周利息(千)": 1}).to_string(index=False))
final = cum - (K * N / 1000 if S[-1] > K else 0.0)
print(f"到期{'实值,交割收到 5,000 千' if S[-1] > K else '虚值'};对冲净成本 {final:.1f} 千美元,"
f"贴现到今天 {final*np.exp(-r*T):.1f} 千美元(BSM 价格 240.1 千)")
关键输出:
周 股价 Delta 买入股数 买入成本(千) 累计成本含息(千) 本周利息(千)
0 49.00 0.522 52160 2555.8 2555.8 2.5
1 48.02 0.451 -7016 -336.9 2221.4 2.1
2 46.39 0.333 -11820 -548.3 1675.2 1.6
3 46.17 0.310 -2364 -109.1 1567.6 1.5
4 46.81 0.344 3489 163.3 1732.5 1.7
5 48.41 0.455 11057 535.3 2269.4 2.2
6 48.66 0.468 1302 63.4 2334.9 2.2
7 48.02 0.410 -5854 -281.1 2056.1 2.0
8 47.09 0.324 -8556 -402.9 1655.2 1.6
9 48.18 0.404 8011 385.9 2042.7 2.0
10 50.52 0.607 20275 1024.3 3068.9 3.0
11 51.01 0.650 4339 221.3 3293.2 3.2
12 49.40 0.493 -15697 -775.4 2521.0 2.4
13 48.21 0.356 -13748 -662.7 1860.7 1.8
14 50.50 0.605 24877 1256.3 3118.7 3.0
15 50.89 0.653 4850 246.8 3368.6 3.2
16 48.61 0.340 -31294 -1521.1 1850.7 1.8
17 48.60 0.306 -3447 -167.5 1684.9 1.6
18 47.15 0.077 -22862 -1078.0 608.5 0.6
19 46.44 0.004 -7259 -337.1 272.0 0.3
20 45.91 0.000 -443 -20.3 252.0 0.0
到期虚值;对冲净成本 252.0 千美元,贴现到今天 247.2 千美元(BSM 价格 240.1 千)
这条路径上股价反复在 50 附近穿越(第 10、14 周两度回到 50 以上又跌回),每次穿越都要"高买低卖",对冲成本贴现后为 24.7 万,略高于 BSM 的 24.0 万;换一条平稳的路径,成本可能低于 24.0 万。这些偏差的离散程度就是表 19.4 里每周再平衡对应的 0.21。
在实盘中,还需要在这个框架里加入:买卖价差和佣金(它们使最优再平衡频率有限,常用的做法是设"delta 容忍带",偏离超过阈值才交易)、隐含波动率与实现波动率的差异(第 19b 章 gamma 盈亏)、以及标的跳空。
本章小结
裸露头寸和有保护头寸的对冲成本可能从 0 到远超期权价格;止损策略表面上成本等于内在价值,实际上因为无法恰在 \(K\) 买卖而失败,对冲绩效始终高于 0.7。delta 是期权价格对标的价格的斜率,欧式看涨为 \(N(d_1)\)(含收益率时乘 \(e^{-qT}\)),看跌为 \(N(d_1)-1\)。delta 对冲建立 delta 中性头寸并定期再平衡,再平衡越频繁对冲误差越小(误差约与 \(\sqrt{\Delta t}\) 成正比),对冲成本的期望现值等于 BSM 价格;其成本来自"跌了卖、涨了买"。远期的 delta 为 \(e^{-qT}\)、期货为 \(e^{(r-q)T}\),用期货代替现货时头寸为 \(H_F=e^{-(r-q)T}H_A\)。合成期权与对冲期权互逆,组合保险可通过动态卖出 \(e^{-qT}[1-N(d_1)]\) 比例的组合或卖空指数期货实现;当大量参与者同时执行时,它会加剧下跌并可能失灵,1987 年 10 月 19 日就是例证。
| 概念 | 公式 / 要点 |
|---|---|
| Delta | \(\Delta=\partial\Pi/\partial S\) |
| 欧式看涨 / 看跌 delta | \(e^{-qT}N(d_1)\) / \(e^{-qT}[N(d_1)-1]\) |
| 组合 delta | \(\sum_iw_i\Delta_i\),买入 \(-\Delta\) 单位标的即 delta 中性 |
| 对冲绩效 | 对冲成本标准差 / BSM 价格;止损 ≥0.76,delta 对冲每周 0.21 |
| 误差规律 | 对冲误差标准差 \(\propto\sqrt{\Delta t}\) |
| 成本来源 | 对冲空头期权 = 跌卖涨买 |
| 远期 / 期货 delta | \(e^{-qT}\) / \(e^{(r-q)T}\) |
| 期货替代现货 | \(H_F=e^{-(r-q)T}H_A\) |
| 合成看跌 | 卖出组合比例 \(e^{-qT}[1-N(d_1)]\) |
| 期货合成 | 卖空份数 \(e^{q(T^*-T)}e^{-rT^*}[1-N(d_1)]A_1/A_2\) |
练习
基础
- 解释止损策略为什么不是好的对冲。 提示:无法恰在 \(K\) 买卖,\(\epsilon\to0\) 时交易次数趋于无穷(原书习题 19.1)。
- 某看涨期权 delta 为 0.7,这意味着什么?若卖出 1,000 份,如何使头寸 delta 中性? 提示:股价小幅变动 \(\Delta S\),期权价变 \(0.7\Delta S\);买入 700 股(原书习题 19.2)。
- 求不付息股票 6 个月期平值欧式看涨的 delta,\(r=10\%\),\(\sigma=25\%\)。 提示:\(d_1=(0.10+0.03125)\times0.5/(0.25\sqrt{0.5})=0.3712\),\(N(d_1)=0.645\)(原书习题 19.3)。
- "合成一份期权"与"对冲一份期权"有什么关系? 提示:对冲期权空头 = 合成期权多头(原书习题 19.6)。
- 外汇期权组合需要卖空 100 万欧元才 delta 中性,\(r=3\%\),\(r_f=1\%\)。若改用 6 个月欧元期货(每份 12.5 万欧元),应卖空多少份? 提示:\(H_F=e^{-(0.03-0.01)\times0.5}\times1{,}000{,}000=990{,}050\),约 7.9 份,取 8 份。
进阶
- 某股票价格要么平稳上涨,要么剧烈震荡后回到同一水平。对一个合成看跌期权的基金经理,哪种情形保险更贵? 提示:剧烈震荡——高买低卖次数多(原书习题 19.9)。
- 用
simulate和hedge_costs函数,把真实世界的 \(\mu\) 改为 \(-10\%\) 和 \(30\%\),观察 delta 对冲成本现值的均值和标准差。说明结论。 提示:均值仍收敛到 BSM 价格;标准差略有变化——\(\mu\) 影响路径分布,从而影响对冲误差的分布,但不影响期望成本。 - 在模拟中加入交易成本:每次买卖支付成交金额的 0.1%。比较每周与每天再平衡的总成本(均值 + 标准差),讨论最优频率。 提示:频率越高,对冲误差越小但交易成本越大;最优频率取决于风险厌恶程度,参见 Leland (1985) 用调整波动率吸收交易成本的思路。
- 一个 700 亿美元的资产池执行合成看跌(\(r\)、\(q\)、\(\sigma\) 自定),若市场单日下跌 23%,模型要求卖出多少?对比当天纽交所的成交额,讨论可执行性。 提示:在新股价下重算 \(e^{-qT}[1-N(d_1)]\) 的变化乘以资产规模(原书习题 19.20)。
- 组合保险的四种实现方式:买指数看跌;买指数看涨 + 无风险资产;把部分组合转为无风险资产;卖空指数期货。对一个 beta=1.5 的组合,说明每种方式的具体头寸如何确定。 提示:原书习题 19.16、19.17;执行价按 CAPM 映射,期权份数乘以 beta,合成时 \(\sigma\) 取 beta × 指数波动率。
原书推荐习题:19.1、19.8(止损策略及其期望交易次数);19.2、19.3(delta 的含义与计算);19.10、19.11(用不同期限的期货对冲 delta);19.16、19.17(组合保险的四种实现);19.20(大规模组合保险的卖压);19.30(复现表 19.2 的动态对冲)。
原书对照
| 本章小节 | 原书章节 | PDF 页码 |
|---|---|---|
| 导言、19.1 示例 | Chapter 19 introduction; 19.1 Illustration | p.422–423 |
| 19.2 裸露与有保护头寸 | 19.2 Naked and Covered Positions | p.423 |
| 19.3 止损策略 | 19.3 A Stop-Loss Strategy(表 19.1) | p.423–425 |
| 19.4 Delta 对冲 | 19.4 Delta Hedging(表 19.2–19.4) | p.425–432 |
| 远期与期货的 delta | 19.12 Extension of Formulas(后半) | p.443–444 |
| 19.13 组合保险 | 19.13 Portfolio Insurance | p.445–447 |
| 19.14 股市波动率 | 19.14 Stock Market Volatility(Business Snapshot 19.2) | p.447 |
| 小结与习题 | Summary, Practice Questions | p.447–452 |
希腊字母 theta、gamma、vega、rho 及其关系、对冲的现实与情景分析见第 19b 章。延伸阅读:Passarelli《Trading Option Greeks》;Taleb《Dynamic Hedging》。