路径依赖期权:亚式、障碍、回望
终值收益不够用了之后怎么定价:亚式的矩匹配与控制变量、障碍的镜像公式与连续性修正、回望的极值分布,以及闭式、PDE、蒙特卡洛三条路线的分工。
香草期权只看终点:收益是 的函数,别的都不管。路径依赖期权看整段路——平均值、是否触线、最高最低点。换个说法: 这一个状态变量不够用了,每一族路径依赖期权都要求你往状态空间里补一个变量,而补哪个变量、它的分布好不好算,直接决定了这族产品是有闭式、能上 PDE、还是只能蒙特卡洛。这条线索贯穿全文。
三大族按补的变量分:亚式补运行平均,障碍补”是否已触线”的指示,回望补运行极值。在外汇奇异和商品市场,这类产品占比很高;能不能把它们定准,是检验一个衍生品库成色的实际标准。
亚式期权:补一个运行平均
亚式期权的收益依赖期间标的的算术平均:
看涨收益 。为什么有人要交易平均而不是终值?两个理由,都很实际。其一,平均比现货平滑,收益方差小,期权相对同 delta 的香草便宜。其二,在交易清淡的市场——石油货物、电力、新兴市场外汇远期——亚式期权贴合真实的经济暴露:按季度分批买原油的炼厂,天然的对冲就是那个季度均价上的期权,而不是某一天收盘价上的期权。
几何平均是能算的那一个。 先看简单的特例:
对数正态变量的几何平均仍是对数正态——对数的和还是正态。所以 有闭式(Kemna & Vorst, 1990):就是一个调低了波动率、调整了漂移的 Black-Scholes 看涨,其中
( 的连续监测极限是 ——平均把方差压到三分之一,这就是亚式便宜的定量原因)。几何和算术的关系由算术-几何平均不等式逐路径成立,取期望后:
所以几何闭式是算术价格的下界,经验上常在 1-2% 以内——这个”便宜的近亲”等一下还有别的用处。
算术平均没有闭式,但矩是精确的。 对数正态的和不再是对数正态,分布写不出来;可写出来的是它的前两矩。一阶矩逐项取期望:
二阶矩的代数多一步,因为交叉项不独立:
其中 ——共同的历史只到 为止。连续监测极限下二重和收成一个整洁的闭式:
标准的对数正态矩匹配近似就到位了:用这两个矩配一个对数正态,按 Black-Scholes 定价。低 时通常在真值 1% 以内:
import numpy as np
from scipy.stats import norm
def asian_moment_match_call(S0, K, r, sigma, T):
"""连续监测算术亚式:对数正态两矩匹配。"""
if sigma <= 0 or T <= 0:
return max(S0 - K, 0)
M1 = S0 * (np.exp(r * T) - 1) / (r * T)
M2 = (2 * S0**2 / T**2) * (
(np.exp((2*r + sigma**2) * T) - 1) / ((r + sigma**2) * (2*r + sigma**2))
- (np.exp(r * T) - 1) / (r * (r + sigma**2)))
v2 = M2 - M1**2
sigma_a = np.sqrt(np.log(1 + v2 / M1**2) / T)
d1 = (np.log(M1 / K) + 0.5 * sigma_a**2 * T) / (sigma_a * np.sqrt(T))
d2 = d1 - sigma_a * np.sqrt(T)
return np.exp(-r * T) * (M1 * norm.cdf(d1) - K * norm.cdf(d2))
(数值验证:、、、 时上式给 5.78,40 万条路径的 MC 给 5.76±0.01。)要更准,Curran (1994) 的条件化方法通常能进到 0.5% 以内,思路见下文离散监测一节。
要精确,两条路。一是 PDE:把运行平均 补进状态向量,在 上解
终值条件 ,Crank-Nicolson 倒推——注意方程里 方向没有二阶导,平均不带自己的噪声,只是被 拖着走,这是”补变量”代价小的一类。二是蒙特卡洛,它对整个路径依赖世界通吃:
def mc_asian_call(S0, K, r, sigma, T, n_paths, n_steps=200, antithetic=True):
dt = T / n_steps
drift = (r - 0.5 * sigma**2) * dt
vol = sigma * np.sqrt(dt)
if antithetic:
Z = np.random.standard_normal((n_paths // 2, n_steps))
Z = np.concatenate([Z, -Z], axis=0)
else:
Z = np.random.standard_normal((n_paths, n_steps))
log_paths = np.cumsum(drift + vol * Z, axis=1)
paths = S0 * np.exp(log_paths)
A = paths.mean(axis=1)
payoffs = np.maximum(A - K, 0)
return np.exp(-r * T) * payoffs.mean()
这里几何亚式的第二个用处来了:它和算术亚式高度相关又有精确闭式,是教科书级的控制变量——模拟里同时算两者,用几何的已知误差去修算术的估计,方差直落一两个数量级。希腊字母用似然比或路径 adjoint 方法。
障碍期权:补一个触线指示
障碍期权在标的跨过某个水平时激活或作废。四种组合:上行敲出(涨过 作废)、上行敲入(涨过 才生效)、下行敲出、下行敲入。对 的上行敲出看涨,收益是:
补进状态空间的变量是那个指示函数,它把定价域切掉了一块:PDE 解法就是把定义域限制在 、在 上钉 。敲入不用单独解,in-out 平价免费送:
同一条路径,要么触线要么没触,两个期权合起来就是香草。
闭式靠镜像原理。 布朗运动关于障碍的反射对称让触线路径的分布可以显式写出,Rubinstein 和 Reiner (1991) 据此给出了整族障碍期权的公式。以障碍 、当前 的下行敲出看涨为例,记 ,,:
前两项是香草,后两项是”镜像修正”——把从 反射回来的路径的贡献扣掉, 就是镜像测度变换的权重。其余七种类型由对称性和 in-out 平价拼装。
连续与离散监测的差是真金白银。 公式假设连续盯线;真实合约按日或按周检查。离散监测的路径”错过”了两次观察之间的触线,所以离散障碍期权触线概率更低——敲出期权更值钱、敲入更便宜。修正是 Broadie、Glasserman 和 Kou (1997) 的连续性修正:用平移过的有效障碍套连续公式,细节在下文离散监测一节统一给。
对冲才是障碍真正的难处。 价值函数在障碍上连续,但 delta 不是慢慢变小,而是在障碍附近陡峭地翻转,gamma 局部爆炸。反向敲出(障碍在实值方向)尤其凶:期权在最值钱的位置作废,做市商接近障碍时要么接受滑点减少调仓,要么用”在障碍处的数字期权”显式对冲那个不连续。有些合约干脆把产品设计得对冲友好——窗口障碍只在离散日期检查、软障碍在一个区间内平滑过渡——定价难一点,换对冲账簿睡得着觉。
回望期权:补一个运行极值
回望看涨支付 ,回望看跌支付 :收益依赖路径的上确界或下确界。补进状态空间的是运行极值,而它的分布——同样拜镜像原理所赐——与终值的联合律是显式可知的。这让浮动执行价回望(收益 ,“以最低点买入”)有精确闭式(Goldman, Sosin & Gatto, 1979)。发行时刻(),记 ,,:
前两项长得像一个 ATM 看涨,第三项是”极值溢价”——为”永远买在最低点”这个特权付的钱,量级由 控制。这是精确公式,不是近似。固定执行价回望也有闭式但更繁,离散监测下大家直接上蒙特卡洛:
def mc_lookback_call(S0, K, r, sigma, T, n_paths, n_steps=500, seed=42):
np.random.seed(seed)
dt = T / n_steps
drift = (r - 0.5 * sigma**2) * dt
vol = sigma * np.sqrt(dt)
Z = np.random.standard_normal((n_paths, n_steps))
log_paths = np.cumsum(drift + vol * Z, axis=1)
paths = S0 * np.exp(log_paths)
maxes = paths.max(axis=1)
payoffs = np.maximum(maxes - K, 0)
return np.exp(-r * T) * payoffs.mean()
两个警告。一是收敛慢: 的尾比 肥,而且离散路径系统性低估连续极值(极值多半出现在观察点之间),步数不够时偏差比方差还大——对偶变量和布朗桥修正都有帮助。二是对冲:运行极值跟着实际路径走,当前极值逼近行使价时,标准 delta 对冲的可靠性下降,做市商通常带着额外库存当缓冲。
远期起始期权:严格说不是路径依赖,但排在这儿
远期起始看涨在 才把执行价定为 ,在 到期:
Black-Scholes 下有个利落的齐次性论证:站在 看,这是一个 ATM 看涨,其价值正比于 ;今天对 取期望再折现,比例系数原封不动地传回来:
只有 到 之间的波动率进入价格—— 之前的路径被齐次性完全吸收。这正是它宝贵的原因:远期起始期权是对未来微笑的纯押注,与今天的现货偏斜脱钩,所以它是检验微笑动态模型的最干净的试金石(局部 vol 在这上面栽的跟头,见局部波动率那篇)。Heston 下它同样可解: 的特征函数保持仿射结构,半解析定价照走。
方法的层级
把上面的经验收成一个决策次序。闭式最好,可惜稀少:几何亚式、浮动执行价回望、Rubinstein-Reiner 障碍、Heston 与 Merton 的特征函数——能用就用,哪怕只当验证基准和控制变量。其次是状态增广的 PDE:补的变量维度低、动态简单时(亚式的 、障碍的域截断)稳定可靠。树方法算 PDE 的近亲,对离散监测尤其顺手。剩下的世界属于蒙特卡洛加方差缩减;拟蒙特卡洛和布朗桥再叠一层加速。生产库的常态是混合:每个产品走它那条最便宜的路,蒙特卡洛兜底。
方差缩减:蒙特卡洛的性价比工程
路径依赖定价几乎离不开 MC,方差缩减不是锦上添花,是预算问题。四件常规武器:对偶变量——每条路径配一条镜像 ,平滑收益上方差降 30-50%;控制变量——旁边同时算一个有闭式的近亲(算术亚式配几何亚式、障碍配香草、固定执行价回望配浮动),已知误差回填,常见 10-100 倍的方差缩减;重要采样——把漂移或波动率掰向收益质量集中的区域(障碍附近、深度虚值),用在刀刃上效果惊人,用错方向会放大方差;条件蒙特卡洛——能解析积掉的维度不要模拟,比如障碍期权先采极值(分布已知)再补路径其余部分。
def mc_barrier_call(S0, K, H, r, sigma, T, n_paths):
"""离散监测(日频)的上行敲出看涨,障碍 H > K。"""
n_steps = 252
dt = T / n_steps
drift = (r - 0.5*sigma**2) * dt
vol = sigma * np.sqrt(dt)
Z = np.random.standard_normal((n_paths, n_steps))
log_paths = np.cumsum(drift + vol * Z, axis=1)
paths = S0 * np.exp(log_paths)
# 任一观察点越过障碍即敲出
alive = (paths.max(axis=1) < H)
payoffs = np.where(alive, np.maximum(paths[:, -1] - K, 0), 0)
return np.exp(-r*T) * payoffs.mean()
裸奔状态下,近 ATM 的障碍期权要百万量级的路径才有 1% 的标准误;对偶加控制变量之后,五万条常常就够——同样的精度,预算差二十倍。
再往上是拟蒙特卡洛。Sobol 或 Halton 序列用低差异点列替换伪随机数,单因子亚式上常见 5-10 倍的等效加速,高维篮子递减到 2-3 倍。工作流:生成 的 Sobol 点,逆 CDF 转标准正态,搭布朗路径,采收益:
from scipy.stats import norm, qmc
def sobol_normals(n_paths, dim, seed=42):
"""Sobol 低差异序列 -> 标准正态(scrambled)。"""
sampler = qmc.Sobol(d=dim, scramble=True, seed=seed)
return norm.ppf(sampler.random(n_paths))
配套的布朗桥构造允许按任意顺序生成路径——先定终点和几个中间锚点,再逐层填细节。这对 QMC 是本质性的:它把路径的大尺度结构分给 Sobol 序列质量最好的前几维;对障碍期权还有额外红利,极值的主要不确定性被前几维捕捉。别自己写 Sobol 生成器,用经过检验的实现(scipy 的 qmc、带 Owen 扰乱的版本)。
离散监测:同一个修正,两副面孔
合约按离散时间点观察,连续时间的公式就得打折。对亚式,离散平均对连续平均的偏离是光滑的,价格差按 收敛:
系数 依赖收益结构;实务上这个展开的直接用途是 Richardson 外推——用两个 的 MC 结果外推连续极限,或者反过来。
对障碍,修正大得多也出名得多,因为离散路径会”错过”观察点之间的触线。Broadie-Glasserman-Kou (1997) 的连续性修正说:离散监测的障碍期权,近似等于把障碍平移后的连续监测期权——
上行障碍取 (往外挪)、下行取 ,常数 。直觉:离散观察少看见一些触线,等效于障碍离现在的价格更远了半步,那半步的尺寸是一个”vol-观察间隔”。日度监测下这一移动不小,直接用连续公式而不修正,是障碍定价里最常见的系统性错误。修正本身也只是近似;要更准,上布朗桥修正或条件 MC。
亚式的离散版本还有一个漂亮的精确技巧,就是前面提过的 Curran (1994)。离散算术平均
以几何平均 为条件: 是对数正态(闭式已知),而 时几乎必然 ——条件内层的期望有闭式,只剩 的部分要做一维数值积分:
def asian_curran_sketch(S0, K, r, sigma, T, n):
"""Curran (1994) 条件化方法的骨架。
1) 几何平均 G 对数正态,矩有闭式;
2) E[(A-K)^+] = E[ E[(A-K)^+ | G] ]:按 G 分解;
3) G >= K 区域: A >= G >= K,内层期望化为条件矩的闭式;
4) G < K 区域: 对 G 的对数正态密度做一维数值积分。
完整系数推导见原文;此处只给结构。
"""
...
一维积分换掉整个路径模拟,精度常到 0.5% 以内——“能解析积掉的维度不要模拟”这条原则的又一次兑现。
对冲者的账本
把视角从定价换到持仓。障碍账簿的核心监控量是距障碍距离:
或者除以 换算成”还差几个标准差”。距离一收窄,delta 急剧放大、换向,账簿从平静直接切换到不稳定。常见的操作纪律是分层调仓频率:离障碍远时每 分钟对冲一次,近了加密到 ——在跟踪误差和交易成本之间找平衡,而不是假装连续对冲可行。
卖方的实现损益,按最朴素的记账:
收进权利金,沿路支付对冲的再平衡成本,到期付掉收益。卖下行敲出看跌的典型剧本:大部分时间期权活着,你像香草卖方一样收 gamma scalping 的钱;标的跌破下障碍,期权作废,premium 落袋。坏剧本藏在敲出前的最后一段:下跌途中你一路 delta 做多对冲,若市场在触线前猛然反弹,你的账簿同时空着波动率、又踏空反弹——两头挨打。软障碍和阶梯障碍这类产品设计,就是在给这个剧本上保险。
换到随机波动率下
以上全部在 Black-Scholes 下展开;换到 Heston 或 SABR,框架不变——还是补状态变量,还是闭式/PDE/MC 三条路——但微笑被烤进了路径。方向上的经验:亚式对波动率期限结构和路径的方差聚集敏感,与同水平常数 vol 的 BS 价相比可高可低,取决于 和期限;障碍对实现的 vol-of-vol 路径敏感,触线概率被波动率的波动直接抬高或压低;回望的极值行为在随机 vol 下更极端,极值溢价相应变化。工具还是那两件: 上的二维 PDE,或者 QE 方案的蒙特卡洛——后者灵活,前者对低维收益快。
谁在用、怎么用
真实的需求端大体三类。对冲实际暴露:分批采购的炼厂、按月结算的电力用户,亚式期权贴着交付日程走,基差风险最小。结构化产品:面向零售的保本票据常用亚式或障碍组件压低期权成本——平均和敲出都让收益便宜,便宜的部分转成本金保护。表达波动率观点:障碍和亚式让你用更低的 premium 换一个带条件的敞口,代价是收益结构复杂、对冲难度上移。这类产品在零售渠道越来越常见,理解它们的定价与其说是研究技能,不如说是消费者保护。
实现提示
给生产工程师的几条实际经验。仿真器必须向量化——纯 Python 循环十万路径乘几百步是灾难,numpy 向量化(如上面的代码)差出两个数量级。控制变量要成为默认习惯:亚式配几何、障碍配香草、回望配浮动执行价,不是可选项。同参数的特征函数算一次就缓存。每个定价器都要对着已知基准验证:BS 下的 ATM 亚式对矩匹配值、障碍对 Rubinstein-Reiner、回望对 Goldman-Sosin-Gatto——闭式在这里的最大价值就是当裁判。
这个领域眼下的活跃方向:用神经网络从 MC 样本学定价函数(训练贵、求值快,台面采用还谨慎)、低维收益的多项式混沌展开、以及整本账簿估值上 GPU。方向都指向同一件事:把复杂收益的定价做得更快——理论框架早已定型,竞争在工程上。
阅读清单。 Hull, Options, Futures, and Other Derivatives, 第 10 版(2018)关于奇异期权的章节。Wilmott, Paul Wilmott on Quantitative Finance, 第 2 版(2007)关于路径依赖的 PDE 方法。Kemna & Vorst, “A Pricing Method for Options Based on Average Asset Values,” Journal of Banking & Finance (1990)。Goldman, Sosin & Gatto, “Path-Dependent Options” (1979)。Broadie, Glasserman & Kou, “A Continuity Correction for Discrete Barrier Options,” Mathematical Finance (1997)。