第 17 章 股指期权与货币期权
第 10 章已经介绍过股指期权和货币期权的合约形式。本章先讲它们在实务中怎么用——股指看跌期权做组合保险、货币期权做外汇套保和零成本区间远期——然后把第 15a、15b 章的 BSM 结果推广到支付已知股息率(known dividend yield)的股票。推广的关键只是一个替换:把 \(S_0\) 换成 \(S_0e^{-qT}\)。股指可看作股息率为成分股平均股息率的股票,外币可看作股息率为外国无风险利率的股票,于是同一套公式覆盖股票、股指、外汇三类标的,第 18 章还会把期货也纳进来。
对量化交易者,本章最重要的是两件事:一是带连续收益率 \(q\) 的广义 BSM,它是任何期权定价库的统一接口;二是用远期价格表示的 Black 型公式,以及从看涨-看跌平价反推远期价格和隐含股息率——这是构建波动率曲面之前必做的预处理。
学习目标
- 计算组合保险所需的指数看跌期权份数和执行价,包括 beta 不等于 1 的情形。
- 理解区间远期(collar)的构造,会求零成本区间远期的执行价。
- 掌握"\(S_0\to S_0e^{-qT}\)"规则,写出带股息率的下界、平价、Merton 公式及其 PDE 和风险中性漂移。
- 用 Merton 公式为股指期权、用 Garman–Kohlhagen 公式为货币期权定价,并会改写为远期价格形式。
- 用平价关系从期权报价反推远期价格和隐含股息率。
- 判断哪些美式股指/货币期权最可能提前行权。
读前导读
这一章在解决什么问题
上两章的 BSM 只适用于不付息股票。现实中最活跃的期权标的——股指和外汇——都有"持有收益":指数有股息,外币存在国外能赚外国利率。这一章说明,只要把这份持有收益看成连续支付的收益率 \(q\),整个 BSM 框架只需改一处:把 \(S_0\) 换成 \(S_0e^{-qT}\)。
这个替换你其实在 CFA 里见过:远期定价 \(F_0=S_0e^{(r-q)T}\),利率平价 \(F_0=S_0e^{(r-r_f)T}\),都是"持有成本 = 融资成本 − 持有收益"。期权定价在这里和远期定价合流:Merton 公式写成远期价格的形式后,股息率完全消失在 \(F_0\) 里。这就是为什么做市系统喜欢直接用远期价格——远期可以从看涨看跌平价反推,比估计股息率可靠。
本章前两节(组合保险、区间远期)是 CFA 衍生品策略的内容,数学只用到 CAPM 和看涨-看跌平价;17.3 以后是定价。
需要先想起来的数学
1. 连续复利的贴现与增长。 \(e^{-qT}\) 是按连续利率 \(q\) 贴现 \(T\) 年的因子。例:\(q=3\%\)、\(T=2/12\),\(e^{-0.005}=0.995\)。\(S_0-S_0e^{-qT}\) 约等于期内股息的现值。见 第 00 册第 04 章 级数与收敛(e 与指数对数)。
2. 对数的运算规则。 \(\ln(ab)=\ln a+\ln b\),\(\ln e^{x}=x\)。所以 \(\ln(S_0e^{-qT}/K)=\ln(S_0/K)-qT\),这就是 \(d_1\) 里多出 \(-q\) 的来源。
3. 看涨-看跌平价与线性回归。 平价 \(c-p=e^{-rT}(F_0-K)\) 是关于 \(K\) 的直线:截距 \(e^{-rT}F_0\),斜率 \(-e^{-rT}\)。多个执行价的 \((K,c-p)\) 点做 OLS 拟合,就能同时估出远期和贴现因子。
4. 二叉树参数。 \(p=(a-d)/(u-d)\) 里的 \(a\) 是"风险中性下股价一步的期望增长倍数"。无股息时 \(a=e^{r\Delta t}\),有收益率 \(q\) 时 \(a=e^{(r-q)\Delta t}\)。
怎么读这一章
必读:17.3(替换规则、Merton 公式、PDE 中 \(r-q\) 的来源)、17.4 中"用远期价格表示"和"隐含股息率"、17.5 的 Garman–Kohlhagen 公式。17.1 的 beta≠1 组合保险值得算一遍表 17.2,它是 CAPM 的一个漂亮应用。17.6 美式期权读结论即可。
17.1 股指期权
多家交易所交易股指期权,有的跟踪整体市场,有的跟踪特定行业。CBOE 的主要产品包括 S&P 100 的美式(OEX)与欧式(XEO)、S&P 500 欧式(SPX)、道琼斯工业平均指数欧式(DJX)、Nasdaq 100 欧式(NDX),也有指数 LEAPS 和 flex 期权。
一份合约通常是指数的 100 倍(DJX 所用的道指是通常报价的 0.01 倍)。股指期权现金结算(cash settled):看涨持有人行权得到 \((S-K)\times100\) 美元现金,\(S\) 为行权日收盘指数;看跌得 \((K-S)\times100\)。
组合保险:beta 等于 1
设经理管理一个 beta 为 1.0 的充分分散组合,组合股息率与指数相同,于是组合的百分比变化约等于指数的百分比变化。指数当前为 \(S_0\),每 \(100S_0\) 美元组合买 1 份执行价 \(K\) 的看跌合约,就能防范指数跌破 \(K\)。
例 组合价值 50 万美元,指数 1,000,组合相当于 500 倍指数。为防止组合 3 个月内跌破 45 万,买 5 份 3 个月期、执行价 900 的看跌合约。若指数跌到 880,组合约值 44 万,期权收益 \(5\times(900-880)\times100=10{,}000\),总值回到保险水平 45 万。
beta 不等于 1
每 \(100S_0\) 美元组合需买 \(\beta\) 份看跌。执行价不能再简单按比例换算,要用 CAPM(第 3 章附录)把"组合价值"映射为"指数水平":组合的超额收益 = \(\beta\) × 指数的超额收益。
例(表 17.1、17.2) 组合 50 万,\(\beta=2.0\),指数 1,000,无风险利率 12%,指数与组合股息率均为 4%,要求组合 3 个月内不低于 45 万。需要 \(2.0\times\frac{500{,}000}{1{,}000\times100}=10\) 份看跌。
若 3 个月后指数为 1,040:指数价格收益 4%,加股息 \(0.25\times4\%=1\%\),总收益 5%;无风险利率 3 个月 3%,指数超额收益 2%;组合预期超额收益 \(2\times2\%=4\%\),组合总收益 \(3\%+4\%=7\%\),扣掉组合股息 1%,市值增长 6%,即 53 万。
对每个指数水平这样算,得到表 17.2:
3 个月后指数 1,080 1,040 1,000 960 920 880 组合价值(万美元) 57 53 49 45 41 37 组合 45 万对应指数 960,所以执行价取 960。若指数跌至 880,组合约 37 万,看跌收益 \((960-880)\times10\times100=80{,}000\),恰好补足到 45 万。(3 个月约有 5,000 美元股息;若保险水平要把股息也算进去,可取对应 44.5 万的执行价 955。)
推导拆解:表 17.2 每一格都按同一条链计算,以指数 960 为例。
- 指数价格收益 \((960-1000)/1000=-4\%\),加股息 1%,指数总收益 \(-3\%\)。
- 指数超额收益 \(=-3\%-3\%=-6\%\)(3 个月无风险收益 \(12\%\times0.25=3\%\))。
- CAPM:组合超额收益 \(=\beta\times(-6\%)=-12\%\),组合总收益 \(=3\%-12\%=-9\%\)。
- 组合总收益里含 1% 股息,股息已经发出去了,市值变化 \(=-9\%-1\%=-10\%\),组合市值 \(50\times0.9=45\) 万。 所以 45 万对应指数 960。这里用 CAPM 是把"组合与指数之间的关系"当作确定的(忽略残差风险),所以保险只在期望意义上精确;组合分散得越好,残差越小,保险越可靠。
结论:组合 beta 越高,保险越贵——既要买更多看跌,执行价也更高(更接近平值)。
17.2 货币期权
货币期权主要在场外市场交易,优点是可以做大额交易,执行价、到期日等可以按公司财务主管的需要定制;美国 NASDAQ OMX 也有交易所货币期权,但规模远小于场外。
例 欧式看涨:有权以 1.3000 美元/欧元买入 100 万欧元;到期汇率 1.3500 时,收益 \(1{,}000{,}000\times(1.35-1.30)=50{,}000\) 美元。欧式看跌:有权以 0.9000 美元/澳元卖出 1,000 万澳元;到期汇率 0.8700 时,收益 \(10{,}000{,}000\times0.03=300{,}000\) 美元。
外汇套保:将收到英镑的美国公司可以买英镑看跌,保证汇率不低于执行价,又保留汇率有利变动的好处;将支付英镑的公司买英镑看涨,锁定成本上限。远期合约锁定汇率且建立无成本,期权则像保险,要预付期权费。
区间远期
美国公司 3 个月后收到 100 万英镑,3 个月远期汇率 1.5200。做空远期可锁定 152 万美元。替代方案是:
- 买入执行价 \(K_1\) 的欧式看跌,卖出执行价 \(K_2\) 的欧式看涨,\(K_1<1.5200<K_2\)。这叫空头区间远期(short range forward)。
- 到期汇率 \(<K_1\):行使看跌,以 \(K_1\) 卖出英镑;介于 \(K_1\) 和 \(K_2\) 之间:都不行权,按市价卖出;\(>K_2\):看涨被行权,以 \(K_2\) 卖出。实现汇率被限制在 \([K_1,K_2]\) 内。
需要支付英镑的公司则卖出 \(K_1\) 看跌、买入 \(K_2\) 看涨,即多头区间远期,支付汇率同样被限制在 \([K_1,K_2]\)。
实务中通常让看跌价格等于看涨价格,使建立成本为零。
例 美国与英国利率均为 5%(所以即期 = 远期 = 1.5200),汇率波动率 14%。执行价 1.5000 的看跌与执行价 1.5413 的看涨价格相同(均为每英镑 0.03250),所以 \(K_1=1.5000\)、\(K_2=1.5413\) 构成零成本区间远期。(本章代码复现了这一结果。)
两执行价向中间靠拢至相等时,区间远期退化为普通远期。这种结构在股票上也很常见,叫领子期权(collar),第 12 章已介绍。
17.3 支付已知股息率股票的期权
核心论证:\(S_0\to S_0e^{-qT}\)
股息使股价在除息日下跌。以连续速率 \(q\) 支付股息,股价的增长率就降低 \(q\)。如果有股息率 \(q\) 时股价从 \(S_0\) 增长到 \(S_T\),那么没有股息时它会增长到 \(S_Te^{qT}\);等价地,没有股息时它会从 \(S_0e^{-qT}\) 增长到 \(S_T\)。因此以下两种情形下 \(S_T\) 的分布相同:
- 股价 \(S_0\),股息率 \(q\);
- 股价 \(S_0e^{-qT}\),无股息。
于是得到规则:
为期限 \(T\)、股息率 \(q\) 的股票欧式期权估值时,把当前股价从 \(S_0\) 换成 \(S_0e^{-qT}\),再按无股息股票估值。
这与第 15b 章离散股息时"减去股息现值"的做法完全类比:\(S_0-S_0e^{-qT}\) 正是期内股息的现值。
金融直觉:期权持有人拿不到股息,股息只归股东。所以对期权持有人来说,今天的股价 \(S_0\) 里有一块"期内会以股息形式流走"的价值与他无关,真正和他相关的是"扣掉这些股息后剩下的部分",即 \(S_0e^{-qT}\)。另一个看法:买入 \(e^{-qT}\) 股、股息全部再投资于股票,到 \(T\) 时恰好持有 1 股——所以"\(T\) 时 1 股股票"今天的价格是 \(S_0e^{-qT}\),这正是看涨期权里"资产或无"那一块需要的标的价格。
推导拆解:PDE (17.6) 里 \(r-q\) 的来源。沿用第 15a 章的组合 \(\Pi=-f+f_SS\),但持股 \(f_S\) 股还能收到股息 \(qSf_S\Delta t\),所以 \(\Delta\Pi=(-f_t-\tfrac12\sigma^2S^2f_{SS})\Delta t+qSf_S\Delta t\)。 令 \(\Delta\Pi=r\Pi\Delta t=r(-f+f_SS)\Delta t\),两边除以 \(\Delta t\) 并整理: \(f_t+\tfrac12\sigma^2S^2f_{SS}-qSf_S=rf-rSf_S\),即 \(f_t+(r-q)Sf_S+\tfrac12\sigma^2S^2f_{SS}=rf\)。 一阶项系数从 \(r\) 变成 \(r-q\):持股的融资成本是 \(r\),但股息补回了 \(q\),净持有成本为 \(r-q\)。
下界与平价
直接证明也很容易,只需把第 11 章组合里的"1 股股票"换成"\(e^{-qT}\) 股股票,股息再投资于股票"——这样到期时恰好持有 1 股。例如 (17.1):组合 A 为一份欧式看涨加现金 \(Ke^{-rT}\),组合 B 为 \(e^{-qT}\) 股(股息再投资),A 到期值 \(\max(S_T,K)\ge S_T\) = B 的到期值。平价 (17.3):A 与"看跌 + \(e^{-qT}\) 股"的组合 C 到期都值 \(\max(S_T,K)\)。
美式期权有不等式(原书习题 17.12):
Merton 公式
对 BSM 公式做替换 \(S_0\to S_0e^{-qT}\),并注意 \(\ln(S_0e^{-qT}/K)=\ln(S_0/K)-qT\),得到 Merton (1973) 公式:
这里的"股息"应定义为已宣告股息导致的除息日股价下降。若股息率已知但非常数,公式仍然成立,\(q\) 取期权期内的平均年化股息率。
PDE 与风险中性漂移
加入股息率后,BSM 方程变为(证明见作者网站 Technical Note 6)
推导思路与第 15a 章相同,唯一的区别是:持有 \(\partial f/\partial S\) 股股票在 \(\Delta t\) 内还收到股息 \(qS\frac{\partial f}{\partial S}\Delta t\),于是 \(\Delta\Pi\) 多出这一项,最终使一阶项系数从 \(r\) 变为 \(r-q\)。
方程仍不含风险偏好,可以用风险中性定价。风险中性世界中股票的总收益为 \(r\),其中股息贡献 \(q\),所以价格的期望增长率为 \(r-q\):
期望股价 \(\hat E(S_T)=S_0e^{(r-q)T}\)。用第 15b 章的对数正态引理,看涨的风险中性期望收益为 \(e^{(r-q)T}S_0N(d_1)-KN(d_2)\),以 \(r\) 贴现即得 (17.4)。
17.4 欧式股指期权估值
和第 5 章处理股指期货一样,把指数看作支付已知收益率的资产:(17.1)(17.2) 是下界,(17.3) 是平价,(17.4)(17.5) 是定价公式,美式期权用二叉树。\(S_0\) 是指数值,\(\sigma\) 是指数波动率,\(q\) 是期权期内的平均年化股息率。
例 17.1 S&P 500 两个月期欧式看涨。\(S_0=930\),\(K=900\),\(r=8\%\),\(\sigma=20\%\);第一、二个月预期股息率分别为 0.2%、0.3%,合计 0.5%,年化 3%,即 \(q=0.03\),\(T=2/12\)。 \(d_1=\dfrac{\ln(930/900)+(0.08-0.03+0.02)\times2/12}{0.2\sqrt{2/12}}=0.5444\),\(d_2=0.4628\);\(N(d_1)=0.7069\),\(N(d_2)=0.6782\)。 \(c=930\times0.7069e^{-0.03\times2/12}-900\times0.6782e^{-0.08\times2/12}=51.83\),一份合约 5,183 美元。
几点实务说明:
- \(q\) 只应包含除息日落在期权期内的股息。美国公司的除息日多集中在 2、5、8、11 月的第一周,所以合适的 \(q\) 依期限而异;其他国家更明显,例如日本公司多用相同的除息日。
- 若已知的是成分股的绝对股息额,可以用"指数减股息现值"的方法(第 15b 章),但宽基指数需要每只成分股的预期股息,难以实施。
用远期价格表示
指数远期价格 \(F_0=S_0e^{(r-q)T}\)(式 5.3),代入 (17.4)(17.5):
平价写成 \(c+Ke^{-rT}=p+F_0e^{-rT}\),即
推导拆解:(17.8) 只是代入。\(S_0e^{-qT}=F_0e^{-rT}\)(由 \(F_0=S_0e^{(r-q)T}\) 两边乘 \(e^{-rT}\)),所以 \(S_0e^{-qT}N(d_1)\) 直接换成 \(F_0e^{-rT}N(d_1)\)。\(d_1\) 的分子 \(\ln(S_0/K)+(r-q)T=\ln(S_0e^{(r-q)T}/K)=\ln(F_0/K)\),于是 \(r\) 和 \(q\) 在 \(d_1\)、\(d_2\) 中都消失了,只剩下 \(\pm\sigma^2T/2\)。 这说明一件事:期权价格只依赖远期价格 \(F_0\)、贴现因子 \(e^{-rT}\)、波动率和期限。\(r\) 和 \(q\) 各自是多少并不重要,重要的是它们通过 \(F_0\) 表现出来的组合 \(r-q\)。
交易所中同一到期日、同一执行价的看涨和看跌常常都很活跃,用 (17.10) 就能估计该期限的远期价格。得到若干期限的远期价格后,就有了远期价格的期限结构,再用 (17.8)(17.9) 为其他期权估值——好处是完全不需要显式估计股息率。
隐含股息率
需要股息率时(例如为美式期权估值),由 (17.3):
单一执行价、单一期限的估计并不可靠(报价噪声、买卖价差),但综合多对看涨看跌可以得到市场隐含的股息率期限结构。本章代码演示了这一过程。
Business Snapshot 17.1 能保证股票长期跑赢债券吗? 有观点认为,长期看分散的股票组合几乎必然跑赢债券;美国历史上股票几乎在任何 10 年都跑赢了债券。某基金经理据此想向跟踪标普 500 的基金投资者免费保证:10 年收益不低于无风险债券。 设指数 1,000,股息率 1%,波动率 15%,10 年无风险利率 5%。股票年化收益要超过 5%,股息贡献 1%,资本利得需 4%,即 10 年后指数至少为 \(1{,}000e^{0.04\times10}=1{,}492\)。这个保证等价于一份 10 年后以 1,492 卖出指数的欧式看跌:\(S_0=1000\),\(K=1492\),\(r=5\%\),\(\sigma=15\%\),\(T=10\),\(q=1\%\),价值 169.7,约占基金价值的 17%——绝不该白送。 教训:历史上"几乎总是"发生的事,在风险中性定价下可能代价高昂。
17.5 欧式货币期权估值
\(S_0\) 为即期汇率(1 单位外币值多少美元)。持有外币可以赚外国无风险利率 \(r_f\),所以外币就像股息率为 \(r_f\) 的股票。把 \(q\) 换成 \(r_f\):
这就是 Garman–Kohlhagen 模型。\(r\) 和 \(r_f\) 都取期限为 \(T\) 的利率。
金融直觉:把 1 英镑想成一只"股票":它今天值 \(S_0\) 美元,持有它(存在英国)每年能赚 \(r_f\) 的"股息"。这样外汇期权就成了带股息率的股票期权。风险中性漂移 \(r-r_f\) 正是 CFA 里利率平价的连续复利版:本币利率高于外币利率时,远期汇率高于即期(外币远期升水),反之贴水。
白话解释:例 17.2 里 \(r_f=11\%>r=8\%\),所以 \(F_0=1.6e^{-0.03/3}=1.584<K=1.6\),平值即期的看涨按远期看其实略虚值,价格比无股息时便宜。
例 17.2 4 个月期英镑欧式看涨,\(S_0=K=1.6\),\(r=8\%\),\(r_f=11\%\),\(T=0.3333\),期权价格 4.3 美分(0.043)。试错:\(\sigma=20\%\) 得 0.0639,\(\sigma=10\%\) 得 0.0285……隐含波动率为 14.1%。
对称性。 以执行价 \(K\)(用货币 B 计价)卖出 1 单位货币 A 的看跌期权,等价于以执行价 \(1/K\)(用货币 A 计价)买入 \(K\) 单位货币 B 的看涨期权(原书习题 17.8)。外汇交易员因此可以在两种报价习惯间自由转换。
用远期汇率
金融机构活跃交易外汇远期,常用远期汇率估值。\(F_0=S_0e^{(r-r_f)T}\)(式 5.9),所以
这与 (17.8)(17.9) 完全相同。第 18 章将说明:任何资产的欧式现货期权,都可以用期限相同的远期或期货价格,通过这组公式估值。
17.6 美式期权
用第 13 章的二叉树:\(u=e^{\sigma\sqrt{\Delta t}}\),\(d=1/u\),\(p=(a-d)/(u-d)\)。不付息股票 \(a=e^{r\Delta t}\),而
美式股指/货币期权有时提前行权是最优的,所以价值高于欧式。高利率货币的看涨、低利率货币的看跌最可能提前行权:高利率货币在风险中性世界中预期贬值(漂移 \(r-r_f<0\)),看涨持有人宁可早点行权拿到外币赚 \(r_f\);低利率货币预期升值,看跌持有人宁可早点拿到本币赚 \(r\)。同理,高股息率指数的看涨、低股息率指数的看跌最可能提前行权。
白话解释:提前行权的账可以这样算。美式看涨提前行权:得到标的(开始收 \(q\) 或 \(r_f\)),付出 \(K\)(失去 \(K\) 的利息 \(r\)),放弃保险价值。所以只有当标的收益率 \(q\) 明显高于 \(r\)、且期权深度实值(保险价值小)时才划算。看跌反过来:行权得到 \(K\)(开始赚 \(r\)),交出标的(不再收 \(q\)),所以 \(r\) 远高于 \(q\) 时看跌更可能提前行权。不付息股票 \(q=0\),看涨永远不提前行权,看跌却可能,这是这个一般规律的特例。
量化实战:统一的广义 BSM 接口、平价反推远期与隐含股息
在期权系统中,股票、股指、外汇(以及下一章的期货)期权通常共用一个"带连续收益率 \(q\) 的 BSM"函数:股票 \(q\) 为股息率,股指 \(q\) 为指数股息率,外汇 \(q=r_f\),期货 \(q=r\)。实际做市系统更进一步,直接用远期价格作为输入(Black 型公式),而远期价格由平价从期权报价本身反推——这样就绕开了"股息率是多少、借券成本是多少"这些难以直接观测的量。从期权价格中提取的隐含股息率、隐含借券成本,本身也可以作为股息预期或卖空压力的信号。
下面的代码依次:复现例 17.1、Business Snapshot 17.1、例 17.2、零成本区间远期、beta=2 的组合保险执行价;模拟一条带报价噪声的股指期权链,用两种方法反推远期价格和隐含股息率;验证 Black 型公式与 Merton 公式一致;用二叉树比较美式与欧式货币期权的提前行权溢价。
import numpy as np
from scipy.stats import norm
from scipy.optimize import brentq
def gbsm(S, K, T, r, q, sigma, kind="call"):
"""广义 BSM:q 为股息率(股指)或外币利率 r_f(货币,即 Garman–Kohlhagen)。"""
d1 = (np.log(S / K) + (r - q + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
d2 = d1 - sigma * 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)
def binom_american(S, K, T, r, q, sigma, n=500, kind="call"):
"""CRR 二叉树,a = e^{(r-q)dt};返回 (美式, 欧式)。"""
dt = T / n; u = np.exp(sigma * np.sqrt(dt)); d = 1 / u
p = (np.exp((r - q) * dt) - d) / (u - d); disc = np.exp(-r * dt)
ST = S * u ** np.arange(n, -1, -1) * d ** np.arange(0, n + 1)
pay = (lambda s: np.maximum(s - K, 0)) if kind == "call" else (lambda s: np.maximum(K - s, 0))
Va = pay(ST); Ve = Va.copy()
for i in range(n - 1, -1, -1):
Si = S * u ** np.arange(i, -1, -1) * d ** np.arange(0, i + 1)
Ve = disc * (p * Ve[:-1] + (1 - p) * Ve[1:])
Va = np.maximum(disc * (p * Va[:-1] + (1 - p) * Va[1:]), pay(Si))
return Va[0], Ve[0]
# ---- 1) 例 17.1:S&P 500 两个月欧式看涨 ----
c = gbsm(930, 900, 2/12, 0.08, 0.03, 0.20)
print(f"例17.1 c={c:.2f},一份合约 {100*c:,.0f} 美元")
# ---- 2) Business Snapshot 17.1:10 年"股票不输债券"保证 = 执行价 1492 的看跌 ----
K = round(1000 * np.exp(0.04 * 10)) # = 1492
print(f"BS17.1 K={K:.0f} 看跌价值={gbsm(1000, K, 10, 0.05, 0.01, 0.15, 'put'):.1f}")
# ---- 3) 例 17.2:英镑看涨的隐含波动率(Garman–Kohlhagen)----
iv = brentq(lambda s: gbsm(1.6, 1.6, 0.3333, 0.08, 0.11, s) - 0.043, 1e-4, 2)
print(f"例17.2 隐含波动率={iv:.4f};sigma=20%→{gbsm(1.6,1.6,0.3333,0.08,0.11,0.2):.4f},10%→{gbsm(1.6,1.6,0.3333,0.08,0.11,0.1):.4f}")
# ---- 4) 零成本区间远期:给定 K1=1.50,求使看涨=看跌的 K2 ----
S0, r, rf, sig, T = 1.52, 0.05, 0.05, 0.14, 0.25
put = gbsm(S0, 1.50, T, r, rf, sig, "put")
K2 = brentq(lambda k: gbsm(S0, k, T, r, rf, sig, "call") - put, 1.52, 2.0)
print(f"区间远期:K1=1.5000 看跌={put:.5f},零成本 K2={K2:.4f}")
# ---- 5) beta=2 的组合保险:用 CAPM 把组合保险水平映射成指数执行价 ----
V0, I0, beta, r, q, T = 500_000, 1000, 2.0, 0.12, 0.04, 0.25
def port_value(I_T): # 按表 17.1 口径:CAPM 给出组合总收益,减去组合股息得市值
idx_ret = (I_T - I0) / I0 + q * T # 指数总收益
port_ret = r * T + beta * (idx_ret - r * T) # CAPM
return V0 * (1 + port_ret - q * T) # 扣掉组合股息,得到组合市值
for I_T in (1080, 1040, 1000, 960, 920, 880):
print(f" 指数 {I_T} -> 组合 {port_value(I_T):,.0f}")
K_idx = brentq(lambda I: port_value(I) - 450_000, 500, 1500)
n_puts = beta * V0 / (100 * I0)
print(f"所需执行价={K_idx:.0f},看跌合约份数={n_puts:.0f}")
# ---- 6) 由一条看涨/看跌报价链反推远期价格与隐含股息率 ----
rng = np.random.default_rng(17)
S0, r, q_true, T, sig = 4500.0, 0.045, 0.016, 0.5, 0.18
Ks = np.arange(4000, 5001, 50.0)
cp = gbsm(S0, Ks, T, r, q_true, sig) - gbsm(S0, Ks, T, r, q_true, sig, "put")
cp_obs = cp + rng.normal(0, 0.5, Ks.size) # 平价残差含报价噪声
# c - p = F e^{-rT} - K e^{-rT}:对 K 回归,截距 = F e^{-rT},斜率 = -e^{-rT}
# (a) 利率已知:式 (17.10) F = K + (c-p)e^{rT},对各执行价取平均
F_a = np.mean(Ks + cp_obs * np.exp(r * T))
q_a = -np.log(np.mean(cp_obs + Ks * np.exp(-r * T)) / S0) / T # 隐含股息率公式
print(f"(a) 隐含远期={F_a:.2f}(真值 {S0*np.exp((r-q_true)*T):.2f}),隐含股息率={q_a:.4f}(真值 {q_true})")
# (b) 利率也未知:对 K 回归,截距 = F e^{-rT},斜率 = -e^{-rT}
slope, intercept = np.polyfit(Ks, cp_obs, 1)
F_b = -intercept / slope; r_b = -np.log(-slope) / T
print(f"(b) 隐含远期={F_b:.2f},隐含利率={r_b:.4f},隐含股息率={r_b - np.log(F_b / S0) / T:.4f}")
# 用 Black 型公式(远期价格)定价,与用 S0、q 的结果一致
K = 4600; F = S0 * np.exp((r - q_true) * T)
d1 = (np.log(F / K) + 0.5 * sig**2 * T) / (sig * np.sqrt(T)); d2 = d1 - sig * np.sqrt(T)
print(f"Black 型 c={np.exp(-r*T)*(F*norm.cdf(d1)-K*norm.cdf(d2)):.4f} Merton c={gbsm(S0,K,T,r,q_true,sig):.4f}")
# ---- 7) 美式货币期权:高利率货币的看涨、低利率货币的看跌更可能提前行权 ----
for rf, kind in [(0.10, "call"), (0.10, "put"), (0.01, "call"), (0.01, "put")]:
am, eu = binom_american(1.0, 1.0, 1.0, 0.04, rf, 0.12, kind=kind)
print(f"r=4%, r_f={rf:.0%}, {kind:4s}: 美式={am:.5f} 欧式={eu:.5f} 提前行权溢价={am-eu:.5f}")
关键输出:
例17.1 c=51.83,一份合约 5,183 美元
BS17.1 K=1492 看跌价值=169.7
例17.2 隐含波动率=0.1411;sigma=20%→0.0639,10%→0.0285
区间远期:K1=1.5000 看跌=0.03250,零成本 K2=1.5413
指数 1080 -> 组合 570,000
指数 1040 -> 组合 530,000
指数 1000 -> 组合 490,000
指数 960 -> 组合 450,000
指数 920 -> 组合 410,000
指数 880 -> 组合 370,000
所需执行价=960,看跌合约份数=10
(a) 隐含远期=4565.67(真值 4565.73),隐含股息率=0.0160(真值 0.016)
(b) 隐含远期=4565.71,隐含利率=0.0462,隐含股息率=0.0172
Black 型 c=211.0093 Merton c=211.0093
r=4%, r_f=10%, call: 美式=0.02867 欧式=0.02209 提前行权溢价=0.00658
r=4%, r_f=10%, put : 美式=0.07804 欧式=0.07804 提前行权溢价=0.00000
r=4%, r_f=1%, call: 美式=0.06272 欧式=0.06272 提前行权溢价=0.00000
r=4%, r_f=1%, put : 美式=0.03657 欧式=0.03346 提前行权溢价=0.00311
读输出要点:
- 原书数字(51.83、169.7、14.1%、1.5413、表 17.2、执行价 960)全部复现。区间远期的 0.03250 也与原书一致。
- 反推远期时,若利率已知,(17.10) 平均后给出的隐含股息率非常准(1.60%);若利率也要估计,回归斜率对噪声敏感,隐含利率偏 12 个基点,隐含股息率随之偏 12 个基点——两者被同一个远期价格约束,误差是相互抵消的。实务中通常用 OIS/国债曲线给定 \(r\),只从期权中提取远期(或"隐含利率 − 隐含股息"这一组合,即隐含持有成本)。
- 远期价格一旦确定,Black 型公式和 Merton 公式给出完全相同的价格,所以系统只需维护远期曲线而无需维护股息曲线。
- 外币利率 10%(高于本币 4%)时,美式看涨有明显的提前行权溢价,看跌几乎没有;外币利率 1% 时恰好相反。
本章小结
股指期权现金结算,乘数通常 100;组合保险每 \(100S_0\) 美元组合买 \(\beta\) 份看跌,执行价用 CAPM 由保险水平映射得到。货币期权多为场外交易,用于企业外汇套保;区间远期(买看跌、卖看涨、零成本)把汇率锁定在一个区间内。支付股息率 \(q\) 的股票只需把 \(S_0\) 换成 \(S_0e^{-qT}\),即得下界、平价和 Merton 公式;风险中性漂移为 \(r-q\)。股指取 \(q\) 为期内平均股息率,货币取 \(q=r_f\)(Garman–Kohlhagen)。用远期价格表示的 Black 型公式无须估计股息;平价可以反推远期价格和隐含股息率。美式期权用 \(a=e^{(r-q)\Delta t}\) 的二叉树,高收益率标的的看涨、低收益率标的的看跌最可能提前行权。
| 概念 | 公式 / 要点 |
|---|---|
| 替换规则 | \(S_0\to S_0e^{-qT}\) |
| 平价 | \(c+Ke^{-rT}=p+S_0e^{-qT}\) |
| Merton 公式 | \(c=S_0e^{-qT}N(d_1)-Ke^{-rT}N(d_2)\),\(d_1=\dfrac{\ln(S_0/K)+(r-q+\sigma^2/2)T}{\sigma\sqrt T}\) |
| 风险中性过程 | \(dS=(r-q)S\,dt+\sigma S\,dz\) |
| 带收益率 PDE | \(f_t+(r-q)Sf_S+\frac12\sigma^2S^2f_{SS}=rf\) |
| 货币期权 | \(q=r_f\)(Garman–Kohlhagen) |
| 远期形式 | \(c=e^{-rT}[F_0N(d_1)-KN(d_2)]\),\(d_1=\dfrac{\ln(F_0/K)+\sigma^2T/2}{\sigma\sqrt T}\) |
| 反推远期 | \(F_0=K+(c-p)e^{rT}\) |
| 隐含股息率 | \(q=-\frac1T\ln\dfrac{c-p+Ke^{-rT}}{S_0}\) |
| 组合保险份数 | \(\beta\times\dfrac{\text{组合价值}}{100\times\text{指数}}\) |
| 二叉树 | \(a=e^{(r-q)\Delta t}\) |
练习
基础
- 组合价值 1,000 万美元,beta 为 1,指数 2,000。为防组合跌破 900 万,应买多少份什么执行价的指数看跌? 提示:\(10{,}000{,}000/(2{,}000\times100)=50\) 份,执行价 1,800(原书习题 17.1 同类)。
- 指数 300,股息率 3%,\(r=8\%\),3 个月期执行价 290 的欧式看涨下界是多少? 提示:\(300e^{-0.0075}-290e^{-0.02}=297.76-284.26=13.50\)(原书习题 17.3)。
- 货币即期 0.80,\(K=0.79\),\(r=8\%\),\(r_f=6\%\),\(\sigma=15\%\),\(T=0.5\),用 Garman–Kohlhagen 公式求看涨和看跌价格,并验证平价。
提示:直接调用
gbsm;平价残差应为 0。 - 解释为什么高利率货币的美式看涨比欧式看涨更有价值。 提示:风险中性漂移 \(r-r_f<0\),行权后持有外币能赚 \(r_f\)。
- 远期汇率等于执行价时,欧式货币看涨与看跌价格有什么关系? 提示:由平价 \(c-p=e^{-rT}(F_0-K)=0\),二者相等(原书习题 17.13)。
进阶
- 重做 17.1 节 beta=2 的组合保险,但改为 beta=1.5、保险水平 47 万。求执行价与份数。
提示:用代码中的
port_value改 beta、目标值后求根;份数 \(1.5\times5=7.5\) 份(原书习题 17.17 同类)。 - 证明零成本区间远期的上执行价 \(K_2\) 在给定 \(K_1\)、\(\sigma\)、\(T\) 和 \(F_0/S_0\) 时与利率水平无关。 提示:用远期形式 (17.13)(17.14),\(e^{-rT}\) 在等式两边约去,条件只依赖 \(F_0\)、\(K\)、\(\sigma\)、\(T\)(原书习题 17.28)。
- 某指数 1,200,6 个月期执行价 1,200 的欧式看涨 80、看跌 60,\(r=5\%\)。求隐含远期价格和隐含股息率。 提示:\(F_0=1200+20e^{0.025}=1220.51\);\(q=r-\ln(F_0/S_0)/T=0.05-0.0339=1.61\%\)(原书习题 17.18 同类)。
- 一家欧洲公司持有美元资产,希望保证以欧元计价的收益。说明它应该买哪种货币期权,并用对称性把它改写为另一种报价方式。 提示:买美元看跌/欧元看涨;以 \(K\) 欧元/美元卖 1 美元的看跌 = 以 \(1/K\) 美元/欧元买 \(K\) 欧元的看涨。
- 某保本产品承诺 5 年后返还本金并按指数涨幅的一定比例付息。说明如何用零息债和指数看涨期权复制它,并在给定 \(r\)、\(q\)、\(\sigma\) 下求最大参与率。 提示:本金 \(\times e^{-rT}\) 买零息债,剩余资金买平值看涨,参与率 = 剩余资金 / 平值看涨价格(与原书习题 17.29、19.27 思路相同)。
原书推荐习题:17.17(beta≠1 的组合保险);17.18、17.26(隐含股息率与隐含波动率);17.12(美式平价不等式证明);17.8、17.27(货币对称性与计价货币转换);17.28(零成本区间远期);17.4、17.24(带收益率的二叉树);17.29(保本保证的期权定价)。
原书对照
| 本章小节 | 原书章节 | PDF 页码 |
|---|---|---|
| 17.1 股指期权与组合保险 | 17.1 Options on Stock Indices(含表 17.1、17.2) | p.390–392 |
| 17.2 货币期权、区间远期 | 17.2 Currency Options | p.392–395 |
| 17.3 已知股息率股票的期权 | 17.3 Options on Stocks Paying Known Dividend Yields | p.395–397 |
| 17.4 欧式股指期权估值 | 17.4 Valuation of European Stock Index Options(含 Business Snapshot 17.1) | p.397–400 |
| 17.5 欧式货币期权估值 | 17.5 Valuation of European Currency Options | p.400–401 |
| 17.6 美式期权 | 17.6 American Options | p.401–402 |
| 小结与习题 | Summary, Further Reading, Practice Questions | p.402–405 |
延伸阅读:Biger & Hull (1983)、Garman & Kohlhagen (1983)、Grabbe (1983) 货币期权定价;Bodie (1995) 论股票长期风险;Merton (1973) 带股息率的期权定价。