量化交易中文教材

第 20 章 波动率微笑

第 15a、15b 章的 Black–Scholes–Merton(BSM)模型假设标的资产价格服从对数正态分布、波动率是一个常数。如果这个假设完全正确,那么同一标的、同一到期日、不同执行价的期权,用市场价格反解出来的隐含波动率(implied volatility)应该都相等。现实并非如此:把某一到期日期权的隐含波动率对执行价作图,得到的是一条弯曲的线——外汇期权像一张"笑脸",股票期权像一条向下倾斜的"斜线"。这条曲线叫做波动率微笑(volatility smile)。

本章要回答三个问题:

  1. 交易员真的在用 BSM 吗?答案是"用,但不是按原意用"。他们把 BSM 公式当作价格与隐含波动率之间的换算器,让波动率随执行价和期限变化。
  2. 微笑的形状说明了什么?它是市场对标的资产未来价格风险中性分布的看法:微笑越弯,分布的尾部越偏离对数正态。
  3. 微笑给实务带来哪些后果?波动率曲面的构造与插值、希腊字母计算方式的改变、模型风险的分布、事件驱动期权的定价。

本章是"教科书模型"走向"交易台模型"的转折点。读完本章,你应当把隐含波动率曲面看作期权市场的基本数据结构,而不是 BSM 的一个参数。

学习目标

  1. 用看涨-看跌平价证明:同执行价、同期限的欧式看涨和看跌期权隐含波动率必然相同,因此一条微笑同时适用于看涨和看跌。
  2. 描述外汇期权的 U 形微笑和股票期权的向下偏斜,并把它们与隐含分布的尾部形状(双侧厚尾;左厚右薄)一一对应。
  3. 说出产生微笑的经济原因:波动率非恒定、价格跳跃、杠杆效应、崩盘恐惧。
  4. 理解波动率曲面的组织方式(\(K/S_0\)、\(K/F_0\)、delta、\(\ln(K/F_0)/\sqrt T\) 等坐标),会用双线性插值从曲面读出任意期权的波动率。
  5. 推导并使用 Breeden–Litzenberger 公式 \(g(K)=e^{rT}\partial^2c/\partial K^2\),从期权价格中提取风险中性密度。
  6. 理解微笑下 delta 的修正,以及"预期单次大跳跃"时隐含波动率为什么呈"皱眉"形。

读前导读

这一章在解决什么问题

你熟悉债券市场的收益率曲线:同一发行人、不同期限的债券到期收益率不同,没有人因此说"YTM 这个概念错了",而是把 YTM 当作报价语言,用一条曲线来描述它随期限的变化。期权市场的隐含波动率也是这样:BSM 假设同一标的只有一个 \(\sigma\),但市场上不同执行价、不同期限的期权反解出的 \(\sigma\) 各不相同。交易员的做法是保留 BSM 作为"价格 ↔ 隐含波动率"的换算公式,再用一张二维的波动率曲面(执行价 × 期限)来描述 \(\sigma\) 的变化,就像用收益率曲线描述 YTM 一样。

这一章回答三件事。第一,微笑的形状说明什么?答案是:它反映市场认为的未来价格分布与对数正态的差别。哪一侧尾部比对数正态更"厚",那一侧的隐含波动率就更高。股票的左尾厚(大跌比模型预期的更常见),所以低执行价的隐含波动率高,形成向下偏斜。第二,能不能反过来,从期权价格把整个分布读出来?能,Breeden–Litzenberger 公式说风险中性密度就是看涨价格对执行价的二阶导数。第三,实务后果:曲面插值、delta 修正、事件前的"皱眉"。

和 CFA 知识的联系:表 20.1 的厚尾证据,就是你在 FRM/CFA 风险管理里学到的"正态 VaR 低估尾部风险";股票偏斜反映的是市场为下行保护支付的溢价,在资产配置里常被称为"尾部风险保险"的成本。

需要先想起来的数学

1. 概率密度与累积分布。 密度 \(g(x)\) 是"落在 \(x\) 附近单位宽度区间的概率";累积分布 \(P(X\le x)=\int_{-\infty}^xg(u)du\);反过来,密度是累积分布的导数。例:若 \(P(S_T>11)=0.30\)、\(P(S_T>11.1)=0.27\),则 11 附近的密度约 \((0.30-0.27)/0.1=0.3\)。见 第 00 册第 03 章 积分。

2. 对积分上下限求导(Leibniz 法则)。 \(\frac{d}{dK}\int_K^\infty h(x,K)dx=-h(K,K)+\int_K^\infty\frac{\partial h}{\partial K}dx\)。第一项来自下限移动,第二项来自被积函数本身依赖 \(K\)。附录的推导就是用这条规则。见 第 00 册第 03 章 积分。

3. 二阶差分近似二阶导数。 \(f''(x)\approx\frac{f(x-h)-2f(x)+f(x+h)}{h^2}\)。例:\(f(x)=x^2\),\(h=1\),\(x=3\):\((4-18+16)/1=2\),正好等于 \(f''=2\)。见 第 00 册第 02 章 导数与泰勒展开。

4. 峰度与厚尾。 峰度衡量尾部的厚度,正态分布为 3。峰度高意味着"大事件和小事件都更多,中等事件更少"。CFA 一级统计中学过。见 第 00 册第 07 章 概率中的分析工具。

5. 线性插值。 在 \((x_1,y_1)\)、\((x_2,y_2)\) 之间,\(y=y_1+\frac{x-x_1}{x_2-x_1}(y_2-y_1)\)。双线性插值是先沿一个方向插两次,再沿另一个方向插一次——和在收益率曲线上插值求非标准期限的利率一样。

怎么读这一章

必读:20.1(看涨看跌共用一个隐含波动率)、20.2 与 20.3("尾部翻译规则")、20.5(曲面)、20.9 附录(Breeden–Litzenberger,全章数学最集中的地方)。20.4、20.6、20.7 篇幅短,概念上重要。20.8 的"皱眉"对做事件交易的读者很实用。建议顺序:20.1 → 20.2 → 20.3 → 20.9 → 20.4–20.8。


20.1 为什么看涨和看跌的微笑相同

平价不依赖分布假设

对于支付收益率 \(q\) 的资产,欧式期权的看涨-看跌平价(put–call parity)为

\[p+S_0e^{-qT}=c+Ke^{-rT}\tag{20.1}\]

这个关系是第 11 章用纯粹的无套利论证得到的:两个组合到期时价值相同,今天的价值也必须相同。论证过程中没有用到任何关于价格分布的假设,所以无论标的价格是不是对数正态,(20.1) 都成立。

现在取任意一个波动率,用 BSM 公式算出看涨价 \(c_{BS}\) 和看跌价 \(p_{BS}\)。BSM 价格本身是无套利模型的输出,当然也满足平价:

\[p_{BS}+S_0e^{-qT}=c_{BS}+Ke^{-rT}\]

市场价格在无套利条件下同样满足:

\[p_{mkt}+S_0e^{-qT}=c_{mkt}+Ke^{-rT}\]

两式相减:

\[p_{BS}-p_{mkt}=c_{BS}-c_{mkt}\tag{20.2}\]

结论:用 BSM 为欧式看跌定价的美元误差,和为同执行价、同期限的欧式看涨定价的美元误差完全相同。

假设某看跌期权的隐含波动率是 22%,即用 22% 代入 BSM 时 \(p_{BS}=p_{mkt}\)。由 (20.2),此时也有 \(c_{BS}=c_{mkt}\),即看涨期权的隐含波动率也是 22%。于是:

  • 同执行价、同期限的欧式看涨与看跌隐含波动率总是相同;
  • 某一期限的波动率微笑对看涨和看跌相同;
  • 更一般地,整张波动率曲面(执行价 × 期限)对看涨和看跌通用。

对美式期权,这一结论近似成立。

推导拆解:从 (20.2) 到"隐含波动率相同"还缺一步,补上:BSM 价格关于 \(\sigma\) 严格递增(vega > 0),所以对每个市场价格,至多有一个 \(\sigma\) 使两者相等。设看跌的隐含波动率为 \(\sigma^*\),即 \(p_{BS}(\sigma^*)=p_{mkt}\);由 (20.2),\(c_{BS}(\sigma^*)-c_{mkt}=p_{BS}(\sigma^*)-p_{mkt}=0\),所以 \(\sigma^*\) 也使看涨价格吻合;再由唯一性,它就是看涨的隐含波动率。整个论证只用了平价和 BSM 关于 \(\sigma\) 的单调性,与"真实分布是什么"无关。

这件事的实务含义很直接:交易台只需要维护一张曲面。如果在某个执行价上看涨和看跌的隐含波动率不一样(扣除买卖价差和美式提前行权等因素后),就存在一个不依赖任何模型的平价套利(原书习题 20.4、20.13)。

例 20.1

外币现价 0.60 美元,美国无风险利率 5%,外国无风险利率 10%。1 年期、执行价 0.59 的欧式看涨市价 0.0236,反解得隐含波动率 14.5%。对外币而言 \(q=r_f\),由平价

\[p+0.60e^{-0.10\times1}=0.0236+0.59e^{-0.05\times1}\ \Rightarrow\ p=0.0419\]

用 BSM 反解这个看跌价格,隐含波动率同样是 14.5%。


20.2 外汇期权的微笑

形状与隐含分布

外汇期权的微笑(原书图 20.1)呈 U 形:平值期权的隐含波动率最低,越往实值或虚值方向越高。

把某个到期日的微笑"翻译"成该时刻汇率的风险中性分布(方法见本章附录 20.9 节),称为隐含分布(implied distribution)。与具有相同均值和标准差的对数正态分布相比,外汇的隐含分布(原书图 20.2):

  • 两侧尾部都更厚,即峰度(kurtosis)更高;
  • 中间更"尖":很小的变动和很大的变动都比对数正态更可能,中等幅度的变动更不可能。

为什么形状一致

可以直观地检验"厚尾分布"与"U 形微笑"互相吻合。

  • 考虑一个执行价 \(K_2\) 很高的深度虚值看涨。它只有在汇率高于 \(K_2\) 时才有收益。在隐含分布下这个概率比对数正态更高,所以期权的价格比对数正态(即常数波动率 BSM)算出来的更高。价格高意味着隐含波动率高。
  • 考虑一个执行价 \(K_1\) 很低的深度虚值看跌。它只有汇率低于 \(K_1\) 时才有收益。左尾更厚,于是价格更高、隐含波动率更高。

由第 20.1 节,执行价低的深度虚值看跌和同执行价的深度实值看涨有相同的隐含波动率,所以两端的隐含波动率都抬高了——正好是 U 形。

白话解释:为什么"概率更高 → 价格更高 → 隐含波动率更高"?对深度虚值期权,BSM 价格几乎完全由"标的跑到执行价之外的概率"决定,而在对数正态下,这个概率只能靠调高 \(\sigma\) 来提高(\(\sigma\) 越大,分布越宽,尾部越厚)。所以当市场认为某侧尾部更厚、愿意为该侧虚值期权多付钱时,用 BSM 去"解释"这个更高的价格,只能报出一个更高的 \(\sigma\)。隐含波动率在这里扮演的是"用对数正态的语言,描述某个尾部有多厚"的角色。

一个通用的翻译规则:在某一侧尾部,隐含分布的概率质量比对数正态多,那一侧的隐含波动率就被抬高;比对数正态少,就被压低。后面分析股票偏斜和"皱眉"时都用这条规则。

实证:汇率日变动的厚尾

Hull & White(1998)研究了 12 种汇率 10 年的日变动。做法是先算每种汇率日百分比变动的标准差,再统计变动超过 1、2、…、6 个标准差的天数比例,并与正态分布的预测比较(对数正态模型下,一天的百分比变动近似正态)。

表 20.1

变动幅度 真实世界 对数正态模型
> 1 SD 25.04% 31.73%
> 2 SD 5.27% 4.55%
> 3 SD 1.34% 0.27%
> 4 SD 0.29% 0.01%
> 5 SD 0.08% 0.00%
> 6 SD 0.03% 0.00%

几个要点:

  • 超过 3 个标准差的天数大约是模型预测的 5 倍;
  • 4、5、6 个标准差的变动在正态模型下几乎不应该出现,现实中却并不罕见;
  • 超过 1 个标准差的天数反而比正态少——这正是"中间更尖"。

这张表同时也是对第 22 章正态 VaR 的直接警告:用正态分布估计尾部损失,会系统性低估极端日的频率。

Business Snapshot 20.1:用外汇期权赚钱

如果市场普遍按常数波动率的 BSM 定价,而你知道汇率分布是厚尾的,你应该做什么?答案是买入多种货币的深度虚值看涨和看跌,然后等待。这些期权按对数正态定价偏便宜,而它们进入实值的概率高于模型预测,收益现值的平均值会远超成本。原书指出,20 世纪 80 年代中期少数知情交易员这样做赚了大钱;到 80 年代末,大家都已经用微笑定价,这个机会就消失了。

这是"发现定价偏差 → 买入被低估的资产 → 优势随市场学习消失"的典型案例,对量化研究者是一个提醒:任何基于模型错配的超额收益都有寿命。

外汇微笑的成因

资产价格服从对数正态需要两个条件:

  1. 波动率恒定;
  2. 价格平滑变化,没有跳跃。

汇率两个条件都不满足:波动率远非恒定,而且经常跳跃(有时是对央行行动的反应)。随机波动率和跳跃都会让极端结果更可能,从而产生厚尾。

二者的影响随期限不同:

  • 期限越长,波动率非恒定对期权价格的百分比影响越显著,但对隐含波动率的百分比影响通常越弱;
  • 跳跃对价格和隐含波动率的影响都随期限增长而减弱——在长期期权里,跳跃被"平均掉"了。

结果是:期限越长,微笑越平。这一点在下面的表 20.2 中可以直接看到。


20.3 股票期权的偏斜

形状

1987 年 10 月股灾之前,股票期权没有明显的微笑。此后,个股和股指期权的微笑(原书图 20.3)通常是一条向下倾斜的曲线,常称为波动率偏斜(volatility skew):隐含波动率随执行价升高而下降。低执行价期权(深度虚值看跌、深度实值看涨)的隐含波动率显著高于高执行价期权(深度实值看跌、深度虚值看涨)。

隐含分布

对应的隐含分布(原书图 20.4)与同均值、同标准差的对数正态相比:左尾更厚,右尾更薄。

用前面的翻译规则检验:

  • 高执行价 \(K_2\) 的深度虚值看涨:\(S_T>K_2\) 的概率比对数正态低(右尾薄),价格偏低,隐含波动率偏低;
  • 低执行价 \(K_1\) 的深度虚值看跌:\(S_T<K_1\) 的概率比对数正态高(左尾厚),价格偏高,隐含波动率偏高。

于是隐含波动率随执行价下降——正是偏斜。

两种解释

杠杆效应(leverage)。公司股权价值下降时,债务不变,杠杆率上升,股权的风险随之加大,波动率上升;股权价值上升时杠杆率下降,波动率下降。所以股票的波动率应是股价的减函数。价格下跌伴随波动率上升,会把左尾拉长、把右尾压短。

崩盘恐惧(crashophobia,Business Snapshot 20.2)。偏斜只在 1987 年 10 月之后才出现。Mark Rubinstein 认为,交易员担心再次发生类似崩盘,于是为虚值看跌支付更高的价格。实证上,标普 500 下跌时偏斜往往变陡,上涨时往往变平,支持这一解释。

金融直觉:杠杆效应可以用 Merton 结构模型来理解(CFA 二级信用分析中出现过):股权是公司资产上的一份看涨期权,执行价是债务面值。公司资产下跌时,股权这份"期权"变得更虚值,它对资产价格的弹性(杠杆)变大,股价波动率随之上升。所以即使公司资产波动率不变,股价跌了波动率也会上升,股价分布的左尾被拉长。

在量化研究中,"偏斜的陡峭程度"本身就是一个被广泛研究的信号:它度量市场为下行尾部保险支付的溢价。


20.4 微笑的坐标:执行价、价值状态与 delta

微笑不是固定在某些执行价上的,它随标的价格移动:

  • 外汇微笑的最低点通常接近当前汇率。汇率上升,微笑右移;汇率下降,微笑左移。
  • 股票偏斜同样随股价上升右移、随股价下降左移(Derman 1999 的研究表明,交易所期权的这种调整有时是"黏性"的,即不完全随价格移动)。

因此,比起直接对 \(K\) 作图,把隐含波动率表示成 \(K/S_0\) 的函数更稳定。常见的坐标有:

坐标 平值定义 说明
\(K/S_0\) \(K=S_0\) 最直观
\(K/F_0\) \(K=F_0\) \(F_0\) 是与期权同期限的远期价格,是风险中性世界中到期价格的期望值,交易员常用
期权 delta 50-delta:delta 为 0.5 的看涨或 \(-0.5\) 的看跌 外汇市场的惯例;便于把微笑用于普通期权以外的产品
\(\dfrac{1}{\sqrt T}\ln\dfrac{K}{F_0}\) 0 有些金融工程师采用,微笑对期限的依赖大大减弱

最后一种坐标的道理是:在对数正态下,\(\ln(K/F_0)\) 的"自然尺度"是 \(\sigma\sqrt T\)。用 \(\sqrt T\) 标准化后,不同期限的微笑大致可以叠在一起。这和量化里把收益除以波动率得到标准化分数是同一个思想。


20.5 波动率期限结构与波动率曲面

期限结构

隐含波动率还依赖期限,称为波动率期限结构(volatility term structure):

  • 短期波动率处于历史低位时,隐含波动率常是期限的增函数——市场预期波动率会回升;
  • 短期波动率处于历史高位时,常是期限的减函数——市场预期波动率会回落。

这反映了波动率的均值回复,第 23 章的 GARCH 模型会给出它的定量刻画。

波动率曲面

把微笑和期限结构合在一起,就是波动率曲面(volatility surface):给出任意执行价、任意期限的期权应使用的波动率。

表 20.2(外汇期权的波动率曲面示例,单位 %)

期限 \ \(K/S_0\) 0.90 0.95 1.00 1.05 1.10
1 个月 14.2 13.0 12.0 13.1 14.5
3 个月 14.0 13.0 12.0 13.1 14.2
6 个月 14.1 13.3 12.5 13.4 14.3
1 年 14.7 14.0 13.5 14.0 14.8
2 年 15.0 14.4 14.0 14.5 15.1
5 年 14.8 14.6 14.4 14.7 15.0

表中有些格子对应有可靠市场报价的期权,直接由市价反解隐含波动率;其余格子通常由插值得到。可以看到期限越长微笑越平:1 个月期两翼比平值高约 2.2–2.5 个百分点,5 年期只高 0.4–0.6 个百分点。

用法:

  • 为 9 个月、\(K/S_0=1.05\) 的期权估值:在 6 个月(13.4)与 1 年(14.0)之间按时间线性插值,得 13.7%,再把 13.7% 代入 BSM 或二叉树。
  • 为 1.5 年、\(K/S_0=0.925\) 的期权估值:需要二维插值。先在 1 年和 2 年两行上分别对 \(K/S_0\) 插值(0.925 位于 0.90 与 0.95 正中),得 14.35% 和 14.70%;再对期限插值(1.5 年位于正中),得 14.525%。

双线性插值是最简单的实现。实务中还要求插值后的曲面无套利:同期限内看涨价格对执行价是凸的(否则隐含密度为负,见附录),同 \(K/F\) 下总方差 \(\sigma^2T\) 随期限不减(否则日历价差为负)。这些约束在本册之外,属于曲面参数化(SVI、SABR 等)的话题。


20.6 微笑下的希腊字母

微笑让希腊字母的计算复杂化。设某期限期权的隐含波动率与 \(K/S\) 的关系保持不变(这是一种"黏性价值状态"的假设)。当标的价格 \(S\) 变化时,同一份期权的 \(K/S\) 变了,它的隐含波动率也随之变化。于是看涨期权的 delta 不再是 BSM 的 \(\partial c_{BS}/\partial S\),而是

\[\Delta=\frac{\partial c_{BS}}{\partial S}+\frac{\partial c_{BS}}{\partial\sigma_{imp}}\frac{\partial\sigma_{imp}}{\partial S}\]

第二项是 vega 乘以"隐含波动率对标的价格的敏感度"。对股票期权,隐含波动率是 \(K/S\) 的减函数;\(S\) 上升时 \(K/S\) 下降,隐含波动率上升,即 \(\partial\sigma_{imp}/\partial S>0\)。vega 为正,所以修正项为正,delta 高于 BSM 给出的值。

推导拆解:这个式子是链式法则。在微笑下,期权价格是 \(c_{BS}(S,\sigma_{imp}(S))\)——\(S\) 既直接进入 BSM 公式,又通过隐含波动率间接进入。对 \(S\) 求全导数:直接路径给出 \(\partial c_{BS}/\partial S\)(BSM delta),间接路径给出 \(\frac{\partial c_{BS}}{\partial\sigma}\cdot\frac{d\sigma_{imp}}{dS}\)(vega × 波动率对股价的斜率)。 量化实战第 5 部分的数字:偏斜 \(\sigma_{imp}=0.20-0.15(K/S-1)\),平值时 \(d\sigma_{imp}/dS=0.15K/S^2=0.0015\);vega(\(S=100\)、\(T=0.5\))约 27.8,修正项 \(27.8\times0.0015\approx0.042\),与代码输出的 \(0.6118-0.5702=0.042\) 一致。 这和债券里"有效久期"与"修正久期"的区别相仿:可赎回债券的现金流本身随利率变化,只看修正久期会算错敏感度,必须把"利率变化 → 现金流变化"这条间接路径也算进去。

原书脚注提到,Daglish、Hull、Suo(2007)指出,"隐含波动率只依赖 \(K/S\)"这个自然的模型只有在所有期限的微笑都平坦时才内部一致。它是实务中的近似规则,不是一个完整的模型。实务中常见的另一种规则是"黏性执行价(sticky strike)":认为每个执行价的隐含波动率不随 \(S\) 变化,此时 delta 就是 BSM delta。两种规则会给出不同的对冲比率,选哪种是交易台的建模决策。

银行在实务中会尽量让组合对波动率曲面最常见的那几种变动敞口较小。识别这些常见变动的工具是主成分分析(第 22 章 22.9 节):对每日曲面变动做 PCA,前几个主成分通常对应整体水平移动、偏斜变化和期限结构变化。


20.7 模型的作用

如果每个期权都用不同的波动率定价,BSM 还有什么用?

一种看法是:BSM 只是一种精巧的插值工具。它的作用是让一个期权的定价与市场上其他活跃交易期权的价格保持一致。假如交易员换用另一个合理模型(比如随机波动率模型),波动率曲面和微笑的形状会变,但市场上以美元报出的价格不会明显改变;按 20.6 节方式计算的 delta 随模型变化也不大。

模型真正"有分量"的场合,是缺乏可比活跃交易的衍生品。后面章节的很多非标准奇异期权,其价格高度依赖模型选择。换句话说,模型风险集中在曲面覆盖不到的地方:路径依赖的收益、远期起始的期权、对曲面动态(而不仅是今天的曲面)敏感的产品。


20.8 预期单次大幅跳跃:皱眉形状

情景

股价现为 50 美元。几天后将公布一项重大消息(例如收购结果或重大诉讼判决),预计消息会使股价上涨或下跌 8 美元。那么 1 个月后股价的分布是两个对数正态的混合(原书图 20.5):一个以"好消息"为中心,另一个以"坏消息"为中心。这是一个双峰分布,与对数正态的单峰形状截然不同。

极端版本:二叉树

取极端情形:1 个月后股价只可能是 42 或 58,无风险利率 12%(原书图 20.6)。这正是一棵单步二叉树:

\[u=1.16,\quad d=0.84,\quad a=e^{0.12/12}=1.0101,\quad p=\frac{a-d}{u-d}=0.5314\]

各执行价期权的价格按二叉树计算,再用 BSM 反解隐含波动率:

表 20.3

执行价 看涨价 看跌价 隐含波动率(%)
42 8.42 0.00 0.0
44 7.37 0.93 58.8
46 6.31 1.86 66.6
48 5.26 2.78 69.5
50 4.21 3.71 69.2
52 3.16 4.64 66.1
54 2.10 5.57 60.0
56 1.05 6.50 49.0
58 0.00 7.42 0.0

(本章"量化实战"中用原书参数复算,执行价 56 一行得到 49.9%,其余与上表一致到小数点后一位的舍入误差;精读笔记中的 49.0 可能是抽取误差,读者可以自行复算。)

推导拆解:表中每一行的计算。以 \(K=50\) 为例:看涨到期只在 58 时有收益 8,风险中性期望 \(0.5314\times8=4.251\),贴现 \(e^{-0.01}\times4.251=4.21\)。看跌只在 42 时有收益 8,\(e^{-0.01}\times0.4686\times8=3.71\)。然后把 4.21 代入 BSM 反解 \(\sigma\)。 为什么 \(K=42\) 和 \(K=58\) 的隐含波动率是 0?\(K=42\) 的看涨一定被行权,价值 \(S_0-Ke^{-rT}=50-42e^{-0.01}=8.42\),正好等于无套利下界——下界对应的就是 \(\sigma\to0\) 的 BSM 价格。\(K=58\) 的看涨一定不被行权,价值 0,也对应 \(\sigma=0\)。

隐含波动率曲线(原书图 20.7)是一张"皱眉(frown)"——与外汇微笑相反,向实值或虚值两个方向隐含波动率都下降。用前面的翻译规则理解:双峰分布把概率质量集中在 42 和 58 附近,两端(低于 42、高于 58)的概率为零,比对数正态少,所以两翼的隐含波动率被压低到 0。

实务含义:在这种情况下,如果用执行价 50 的隐含波动率去为执行价 44 或 56 的期权定价,会高估它们的价格。财报、药物审批、并购投票、诉讼判决之前的个股期权,常出现这种形态(实际分布不会极端到只有两个点,但中间凹陷、两翼压低的趋势相同)。


20.9 附录:由波动率微笑确定隐含风险中性分布

Breeden–Litzenberger 公式

设 \(g(S_T)\) 为 \(T\) 时刻标的价格的风险中性密度。欧式看涨期权的价格是

\[c=e^{-rT}\int_K^\infty(S_T-K)\,g(S_T)\,dS_T\]

对 \(K\) 求一阶导(上限积分变量与 \(K\) 有关,但被积函数在 \(S_T=K\) 处为零,所以不产生边界项):

\[\frac{\partial c}{\partial K}=-e^{-rT}\int_K^\infty g(S_T)\,dS_T\]

即 \(-e^{rT}\partial c/\partial K\) 是 \(S_T>K\) 的风险中性概率。再求一次导:

\[\frac{\partial^2c}{\partial K^2}=e^{-rT}g(K)\]

所以

\[g(K)=e^{rT}\frac{\partial^2c}{\partial K^2}\tag{20A.1}\]

推导拆解:两次求导各用了什么。 第一次:\(c\) 对 \(K\) 求导时,\(K\) 出现在两处——积分下限和被积函数 \((S_T-K)\) 里(原文括号中说"上限",应为"下限")。按 Leibniz 法则,下限移动贡献 \(-(S_T-K)g(S_T)\big|_{S_T=K}=0\),因为被积函数在 \(S_T=K\) 处为零;被积函数对 \(K\) 的偏导为 \(-g(S_T)\),积分得 \(-\int_K^\infty g\,dS_T\)。 第二次:\(\frac{d}{dK}\Big[-\int_K^\infty g(S_T)dS_T\Big]\),这次被积函数不含 \(K\),只剩下限移动的贡献 \(-(-g(K))=g(K)\)。乘上 \(e^{-rT}\) 即得。 金融上,第一步说"看涨价格对执行价的斜率 = 负的数字期权价格":执行价提高 1 元,你在每个行权情形下少拿 1 元,所以看涨价格下降的幅度等于"行权时付 1 元"的现值。第二步说"数字期权价格对执行价的变化率 = 状态价格密度"。

这是 Breeden & Litzenberger(1978)的结果。它的含义很深:只要有足够多执行价的看涨期权价格,就能恢复市场隐含的整个风险中性分布,不需要任何模型假设。一个推论是:看涨价格对执行价必须是凸函数,否则 \(g\) 会出现负值,意味着存在蝶式套利。

有限差分近似

设 \(c_1,c_2,c_3\) 分别为执行价 \(K-\delta\)、\(K\)、\(K+\delta\) 的 \(T\) 年期欧式看涨价格,用二阶中心差分(与第 21c 章有限差分法中的 (21.26) 相同):

\[g(K)\approx e^{rT}\frac{c_1+c_3-2c_2}{\delta^2}\tag{20A.2}\]

蝶式价差的解释

(20A.2) 有一个漂亮的金融解释。买入执行价 \(K-\delta\) 和 \(K+\delta\) 的看涨各一份,卖出两份执行价 \(K\) 的看涨,这是一个蝶式价差(butterfly spread),成本为 \(c_1+c_3-2c_2\)。它的到期收益是以 \(K\) 为顶点、高 \(\delta\)、底宽 \(2\delta\) 的三角形"尖刺"(原书图 20A.1),面积为 \(0.5\times2\delta\times\delta=\delta^2\)。

\(\delta\) 很小时,在区间 \([K-\delta,K+\delta]\) 内 \(g(S_T)\approx g(K)\),于是蝶式价差的价值为

\[c_1+c_3-2c_2=e^{-rT}\,g(K)\,\delta^2\]

整理即得 (20A.2)。直观地说:蝶式价差是一份"只在 \(S_T\approx K\) 时付钱"的合约,它的价格(乘以 \(e^{rT}\) 再除以收益面积)就是 \(S_T\) 落在 \(K\) 附近的风险中性概率密度。这是 Arrow–Debreu 状态价格的离散版本。

例 20A.1

不付息股票价格 10 美元,无风险利率 3%。3 个月期欧式期权执行价 6、7、…、14 的隐含波动率分别为 30%、29%、…、22%(执行价每升 1 美元,隐含波动率降 1 个百分点——一个典型的股票偏斜)。

假设 \(g\) 在区间 \([6,7)\)、\([7,8)\)、…、\([13,14)\) 内分别为常数 \(g_1,\dots,g_8\)。求 \(g_1\):

  1. 插值得执行价 6.5 的隐含波动率为 29.5%;
  2. 用 BSM 算出执行价 6、6.5、7 的期权价格:4.045、3.549、3.055;
  3. 取 \(K=6.5\),\(\delta=0.5\):
\[g_1=e^{0.03\times0.25}\times\frac{4.045+3.055-2\times3.549}{0.5^2}=0.0057\]

类似地得到 \(g_2=0.0444\),\(g_3=0.1545\),\(g_4=0.2781\),\(g_5=0.2813\),\(g_6=0.1659\),\(g_7=0.0573\),\(g_8=0.0113\)(原书图 20A.2)。

分布在 \([6,14]\) 内的面积为 0.9985,所以 \(S_T<6\) 或 \(S_T>14\) 的概率合计约 0.0015。与单一 26% 波动率的对数正态比较:

区间 隐含分布 对数正态(\(\sigma=26\%\))
\([6,7)\) 0.0057 0.0031
\([13,14)\) 0.0113 0.0167

隐含分布左尾更厚、右尾更薄——正是向下偏斜所对应的形状。

金融直觉:例 20A.1 的结果可以直接用来做风险管理。隐含分布说市场为"3 个月内跌到 6–7 元"赋予约 0.57% 的风险中性概率,几乎是单一波动率模型(0.31%)的两倍。如果你的风险模型用的是单一波动率,就低估了市场认定的下跌尾部。不过要记住这是风险中性概率:它包含了投资者对下跌的厌恶溢价,通常高于真实世界的概率,不能直接当作"市场预测的崩盘概率"。

注意计算中的一个细节:要恢复密度,必须先在曲面上插值得到中间执行价(6.5)的波动率。插值方式不同,恢复出的密度也不同,插值不当甚至会得到负密度。这就是为什么实务中要求插值后的曲面无套利。


量化实战

本章内容在量化交易中的用途

  1. 定价与做市系统。波动率曲面是期权定价系统的核心数据结构:从市场报价反解隐含波动率,按 \(K/F\) 或 delta 坐标存储,插值或参数化,再给所有非报价期权定价。看涨看跌共享一张曲面(20.1 节)让系统可以只维护一套数据,并用平价检验报价的一致性。
  2. 对冲比率。sticky-strike 和 sticky-moneyness 两种规则下的 delta 不同(20.6 节),对股票期权差异可达几个百分点,直接影响 delta 对冲的仓位。
  3. 期权隐含因子。隐含偏斜(如 25-delta 看跌与看涨的波动率之差)、期限结构斜率、风险中性密度的偏度和峰度,都是因子研究中常用的期权隐含变量,用来度量市场对尾部风险的定价。Breeden–Litzenberger 公式是提取这些量的标准工具。
  4. 事件交易。20.8 节的"皱眉"告诉我们:在财报、审批、并购等二元事件之前,用平值隐含波动率为两翼定价会高估两翼。从期权价格隐含的事件前后股价分布,还可以反推市场预期的事件涨跌幅。
  5. 风险建模。表 20.1 的厚尾证据说明,用正态分布计算 VaR(第 22 章)会低估极端损失;曲面变动的 PCA 是 vega 风险分解的标准方法。

Python 示例:隐含波动率、皱眉、隐含密度与曲面插值

下面的代码依次完成:(1) 复算例 20.1,验证看涨看跌隐含波动率相同;(2) 复算表 20.3 的"皱眉";(3) 用 Breeden–Litzenberger 复算例 20A.1 的隐含密度;(4) 在表 20.2 上做双线性插值;(5) 比较一条股票型偏斜下 BSM delta 与计入微笑的 delta。

import numpy as np
from scipy.stats import norm
from scipy.optimize import brentq
from scipy.interpolate import RegularGridInterpolator

def bs(S, K, T, r, sig, q=0.0, kind="call"):
    if sig <= 0 or T <= 0:
        fwd = S*np.exp(-q*T) - K*np.exp(-r*T)
        return max(fwd, 0) if kind == "call" else max(-fwd, 0)
    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)*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 implied_vol(price, S, K, T, r, q=0.0, kind="call"):
    lo = bs(S, K, T, r, 1e-8, q, kind)          # 波动率趋于 0 时的价格下界
    if price <= lo + 1e-10:
        return 0.0
    return brentq(lambda s: bs(S, K, T, r, s, q, kind) - price, 1e-6, 5.0)

# 1) 例 20.1:看涨与看跌隐含波动率相同
S, K, T, r, rf = 0.60, 0.59, 1.0, 0.05, 0.10
c = 0.0236
p = c + K*np.exp(-r*T) - S*np.exp(-rf*T)            # 平价
print("例20.1  put = %.4f, IV(call) = %.4f, IV(put) = %.4f" %
      (p, implied_vol(c, S, K, T, r, rf, "call"), implied_vol(p, S, K, T, r, rf, "put")))

# 2) 表 20.3:一个月后股价只能是 42 或 58
S0, r, T = 50.0, 0.12, 1/12
u, d = 58/50, 42/50
pu = (np.exp(r*T) - d) / (u - d)
print("\n表20.3  p = %.4f" % pu)
print(" K    call   put    IV(%)")
for K in range(42, 60, 2):
    cK = np.exp(-r*T)*pu*max(58-K, 0)
    pK = np.exp(-r*T)*(1-pu)*max(K-42, 0)
    print(f"{K:3d}  {cK:5.2f}  {pK:5.2f}  {100*implied_vol(cK, S0, K, T, r):5.1f}")

# 3) 例 20A.1:Breeden–Litzenberger 恢复隐含分布
S0, r, T = 10.0, 0.03, 0.25
iv = lambda K: 0.30 - 0.01*(K - 6.0)               # 6→30%, 7→29%, ..., 14→22%
g = []
for lo in range(6, 14):
    Km, dlt = lo + 0.5, 0.5
    c1, c2, c3 = (bs(S0, k, T, r, iv(k)) for k in (Km-dlt, Km, Km+dlt))
    g.append(np.exp(r*T)*(c1 + c3 - 2*c2)/dlt**2)
g = np.array(g)
print("\n例20A.1 g =", np.round(g, 4), " 面积 =", round(g.sum(), 4))
def lognorm_prob(a, b, sig=0.26):                   # 单一 26% 波动率的对数正态
    m = np.log(S0) + (r - 0.5*sig**2)*T; s = sig*np.sqrt(T)
    return norm.cdf((np.log(b)-m)/s) - norm.cdf((np.log(a)-m)/s)
print("对数正态 P(6<S<7) = %.4f, P(13<S<14) = %.4f" % (lognorm_prob(6,7), lognorm_prob(13,14)))

# 4) 表 20.2 波动率曲面双线性插值
mats = np.array([1/12, 0.25, 0.5, 1, 2, 5])
mny = np.array([0.90, 0.95, 1.00, 1.05, 1.10])
surf = np.array([[14.2,13.0,12.0,13.1,14.5],
                 [14.0,13.0,12.0,13.1,14.2],
                 [14.1,13.3,12.5,13.4,14.3],
                 [14.7,14.0,13.5,14.0,14.8],
                 [15.0,14.4,14.0,14.5,15.1],
                 [14.8,14.6,14.4,14.7,15.0]])
f = RegularGridInterpolator((mats, mny), surf)
print("\n曲面插值  (0.75y, 1.05) = %.3f%%   (1.5y, 0.925) = %.3f%%" %
      (f([0.75, 1.05])[0], f([1.5, 0.925])[0]))

# 5) 微笑下的 delta:sticky-moneyness(隐含波动率是 K/S 的函数)
S0, K, T, r = 100.0, 100.0, 0.5, 0.03
skew = lambda m: 0.20 - 0.15*(m - 1.0)              # 股票型偏斜:K/S 越大 IV 越低
def price_sticky(S):  return bs(S, K, T, r, skew(K/S))   # IV 随 K/S 移动
def price_fixed(S):   return bs(S, K, T, r, skew(K/S0))  # IV 固定(BSM delta)
h = 0.01
d_smile = (price_sticky(S0+h) - price_sticky(S0-h)) / (2*h)
d_bs    = (price_fixed(S0+h)  - price_fixed(S0-h))  / (2*h)
print("\nBSM delta = %.4f, 计入微笑的 delta = %.4f" % (d_bs, d_smile))

关键输出:

例20.1  put = 0.0419, IV(call) = 0.1451, IV(put) = 0.1451

表20.3  p = 0.5314
 K    call   put    IV(%)
 42   8.42   0.00    0.0
 44   7.37   0.93   58.7
 46   6.31   1.86   66.7
 48   5.26   2.78   69.5
 50   4.21   3.71   69.1
 52   3.16   4.64   66.0
 54   2.10   5.57   60.1
 56   1.05   6.50   49.9
 58   0.00   7.42    0.0

例20A.1 g = [0.0057 0.0444 0.1545 0.2781 0.2813 0.1659 0.0573 0.0113]  面积 = 0.9985
对数正态 P(6<S<7) = 0.0031, P(13<S<14) = 0.0167

曲面插值  (0.75y, 1.05) = 13.700%   (1.5y, 0.925) = 14.525%

BSM delta = 0.5702, 计入微笑的 delta = 0.6118

读输出时注意几点:

  • 例 20.1 中看涨和看跌反解出的隐含波动率完全相同(14.51%),这不是数值巧合,而是平价的必然结果。
  • 表 20.3 复算值与原书只有尾数差异(原书用的是四舍五入后的价格反解)。皱眉形状清晰:平值附近约 69%,两翼迅速降到 0。
  • 例 20A.1 的八个密度值与原书完全一致,面积 0.9985;隐含分布在 \([6,7)\) 的概率(0.0057)几乎是对数正态(0.0031)的两倍。
  • 在斜率为 \(-0.15\) 的偏斜下,计入微笑的平值看涨 delta 比 BSM delta 高约 0.04。对 1 万份期权的头寸,这意味着对冲股数相差约 400 股。

实战提示:真实数据上用 Breeden–Litzenberger 时,不要直接对离散的市场价格做二阶差分——报价噪声会被放大成剧烈震荡甚至负密度。标准做法是先在隐含波动率空间拟合一条光滑、无套利的曲线,再在细网格上转成价格做差分。


本章小结

BSM 假设对数正态,但市场不这么认为。交易员用 BSM 作为价格与波动率之间的换算器,让隐含波动率依赖执行价和期限,形成波动率微笑与波动率曲面。由于看涨-看跌平价与分布无关,同执行价、同期限的看涨和看跌共享同一个隐含波动率。外汇期权呈 U 形微笑,对应两侧厚尾的隐含分布,原因是随机波动率和跳跃,实证中 3 个标准差以上的日变动约为正态预测的 5 倍;股票期权呈向下偏斜,对应左尾厚、右尾薄的隐含分布,原因是杠杆效应和 1987 年后的崩盘恐惧。微笑通常用 \(K/S_0\)、\(K/F_0\)、delta 或 \(\ln(K/F_0)/\sqrt T\) 表示,曲面由市场点加插值构成,期限越长微笑越平。微笑使 delta 需要加上 vega 乘以隐含波动率对标的价格的敏感度。BSM 在活跃市场里只是插值工具,模型风险集中在缺乏可比报价的奇异产品上。预期单次大跳跃时,分布是双峰的,隐含波动率呈"皱眉"形。Breeden–Litzenberger 公式让我们可以从期权价格直接恢复风险中性密度。

概念/公式 内容
看涨看跌误差相同 \(p_{BS}-p_{mkt}=c_{BS}-c_{mkt}\),故两者隐含波动率相同
外汇微笑 U 形;隐含分布两侧厚尾;期限越长越平
股票偏斜 隐含波动率随 \(K\) 下降;左尾厚、右尾薄;杠杆效应 + 崩盘恐惧
尾部翻译规则 某侧尾部概率高于对数正态 ⇔ 该侧隐含波动率被抬高
微笑坐标 \(K/S_0\)、\(K/F_0\)、delta(50-delta 为平值)、\(\ln(K/F_0)/\sqrt T\)
波动率曲面 微笑 × 期限结构;市场点 + 插值(表 20.2)
微笑下的 delta \(\dfrac{\partial c_{BS}}{\partial S}+\dfrac{\partial c_{BS}}{\partial\sigma_{imp}}\dfrac{\partial\sigma_{imp}}{\partial S}\)
单次大跳跃 双峰分布 → "皱眉";平值波动率为两翼定价会高估
Breeden–Litzenberger \(g(K)=e^{rT}\dfrac{\partial^2c}{\partial K^2}\approx e^{rT}\dfrac{c_1+c_3-2c_2}{\delta^2}\)
蝶式价差 价值 \(\approx e^{-rT}g(K)\delta^2\),即状态价格

练习

基础

  1. 某欧式看跌期权的 BSM 价格(用 20% 波动率计算)比市价低 0.35 美元。同执行价、同期限欧式看涨期权的 BSM 价格(同样用 20%)比市价高还是低?差多少? 提示:由 (20.2),\(c_{BS}-c_{mkt}=p_{BS}-p_{mkt}=-0.35\),看涨的 BSM 价格同样低 0.35 美元(原书习题 20.6 的思路)。

  2. 若某资产价格分布的两侧尾部都比对数正态更薄,微笑是什么形状?若右尾厚、左尾薄呢? 提示:两尾都薄 → 两翼隐含波动率低于平值,呈"皱眉";右尾厚左尾薄 → 隐含波动率随执行价上升(原书习题 20.1)。

  3. 用表 20.2 求 4 个月、\(K/S_0=0.95\) 和 3 年、\(K/S_0=1.00\) 期权应使用的波动率。 提示:前者在 3 个月(13.0)与 6 个月(13.3)间插值,4 个月位于 1/3 处,得 13.1%;后者在 2 年(14.0)与 5 年(14.4)间插值,3 年位于 1/3 处,约 14.13%。

  4. 解释为什么深度虚值期权有时被称为"波动率期权"。 提示:深度虚值期权的价值几乎完全来自时间价值,其价格对波动率(尤其是尾部概率)极为敏感,相对 vega(vega/价格)很大(原书习题 20.12)。

  5. 某国央行宣布把汇率维持在 0.97–1.03 之间,市场相信这一承诺。这对该汇率期权的隐含波动率形状有何影响? 提示:两侧尾部被截断(比对数正态薄),执行价远离区间时隐含波动率应很低,呈皱眉形(原书习题 20.11)。

进阶

  1. 某股票在 1 个月后公布诉讼结果,结果公布后股价为 \(S_u\) 或 \(S_d\)。写出 1 个月期执行价 \(K\) 的看涨价格,说明隐含波动率曲线在 \(S_d<K<S_u\) 之外为什么为零,并用代码复现一条完整曲线。 提示:\(S_d\le K\le S_u\) 时 \(c=e^{-rT}p(S_u-K)\),其中 \(p=(e^{rT}S_0-S_d)/(S_u-S_d)\)。\(K\le S_d\) 时 \(c=e^{-rT}[p(S_u-K)+(1-p)(S_d-K)]=S_0-Ke^{-rT}\),恰为无套利下界,隐含波动率为 0;\(K\ge S_u\) 时看涨价为 0,同理(原书习题 20.14、20.20)。

  2. 证明 \(-e^{rT}\partial c/\partial K=P^{Q}(S_T>K)\),并说明它与数字期权(cash-or-nothing call)价格的关系。若看涨价格对执行价的斜率大于 0,存在什么套利? 提示:数字看涨价格 \(=e^{-rT}P^Q(S_T>K)=-\partial c/\partial K\);斜率为正意味着牛市价差的价格为负,可零成本或负成本建立一个收益非负的头寸。

  3. 在 20.6 节的 sticky-moneyness 假设下,把例子中的偏斜斜率从 \(-0.15\) 改为 \(+0.15\)(外汇右翼抬高的情形),计入微笑的 delta 比 BSM delta 高还是低?用 Python 验证。 提示:此时 \(\partial\sigma_{imp}/\partial S<0\),修正项为负,delta 低于 BSM 值。

  4. 用本章代码中的 bs 和 implied_vol,为一个随机波动率或跳跃扩散模型(例如用蒙特卡洛模拟的 Merton 跳跃扩散,跳跃均值为负)生成一组执行价的期权价格,反解隐含波动率,观察偏斜形状随期限的变化。 提示:跳跃均值为负时左尾变厚,出现向下偏斜;期限越长偏斜越平,与 20.2 节"跳跃被平均掉"的结论一致。蒙特卡洛方法见第 21b 章。

  5. 用表 20.1 的数据估计:一年 252 个交易日中,正态模型预计有多少天汇率变动超过 3 个标准差?实际约多少天?若一个基于正态的 1 天 99% VaR 模型在这种分布上运行,例外天数会更多还是更少? 提示:正态 \(252\times0.27\%\approx0.7\) 天,实际 \(252\times1.34\%\approx3.4\) 天。99% VaR 对应约 2.33 个标准差,厚尾分布在这个位置的尾部概率通常高于 1%,例外更多(结合第 22 章)。

原书推荐习题:20.4、20.13(看涨看跌隐含波动率不一致时的平价套利,套利不依赖模型);20.14、20.20(二元事件下的风险中性概率与隐含波动率曲线,适合编程);20.15(对数正态下的区间概率,并依据微笑判断偏差方向);20.22、20.23(用作者网站数据复制厚尾检验,检验下跌与上涨的不对称);20.25(Breeden–Litzenberger 恢复隐含分布的数值练习);20.18、20.26(波动率曲面插值)。此外概念题 20.7(崩盘恐惧)、20.10(实证检验期权定价模型的困难)、20.17(BSM 作为插值工具)、20.21(新闻决定未来波动率为 10% 或 30% 时的微笑)也值得一读。


原书对照

本章小节 原书章节 PDF 页码
章首导言 Chapter 20 introduction p.454
20.1 看涨看跌微笑相同 20.1 Why the Volatility Smile Is the Same for Calls and Puts p.454–455
20.2 外汇期权的微笑 20.2 Foreign Currency Options(含表 20.1、Business Snapshot 20.1) p.456–459
20.3 股票期权的偏斜 20.3 Equity Options(含 Business Snapshot 20.2) p.459–460
20.4 微笑的坐标 20.4 Alternative Ways of Characterizing the Volatility Smile p.460–461
20.5 期限结构与曲面 20.5 The Volatility Term Structure and Volatility Surfaces(表 20.2) p.461–462
20.6 微笑下的希腊字母 20.6 Greek Letters p.462–463
20.7 模型的作用 20.7 The Role of the Model p.463
20.8 预期单次大跳跃 20.8 When a Single Large Jump Is Anticipated(表 20.3) p.463–465
小结、延伸阅读 Summary, Further Reading p.465–466
习题 Practice Questions 20.1–20.26 p.466–469
20.9 附录 Appendix: Determining Implied Risk-Neutral Distributions from Volatility Smiles p.470–472

延伸阅读:Bakshi, Cao & Chen (1997) 期权定价模型的实证检验;Bates (2000) 崩盘恐惧;Daglish, Hull & Suo (2007) 波动率曲面的理论与实证;Derman (1999) 波动率机制;Jackwerth & Rubinstein (1996) 从期权价格恢复概率分布;Melick & Thomas (1997) 海湾危机期间原油期货期权的隐含分布;Reiswich & Wystup (2010) 外汇波动率微笑的构造;Rubinstein (1985) 期权定价模型的非参数检验。