跳到正文

路径依赖期权:亚式、障碍、回望

终值收益不够用了之后怎么定价:亚式的矩匹配与控制变量、障碍的镜像公式与连续性修正、回望的极值分布,以及闭式、PDE、蒙特卡洛三条路线的分工。

第 7 篇 · 共 12 篇 约 13 分钟

香草期权只看终点:收益是 STS_T 的函数,别的都不管。路径依赖期权看整段路——平均值、是否触线、最高最低点。换个说法:STS_T 这一个状态变量不够用了,每一族路径依赖期权都要求你往状态空间里补一个变量,而补哪个变量、它的分布好不好算,直接决定了这族产品是有闭式、能上 PDE、还是只能蒙特卡洛。这条线索贯穿全文。

三大族按补的变量分:亚式补运行平均,障碍补”是否已触线”的指示,回望补运行极值。在外汇奇异和商品市场,这类产品占比很高;能不能把它们定准,是检验一个衍生品库成色的实际标准。

亚式期权:补一个运行平均

亚式期权的收益依赖期间标的的算术平均:

AT=1n∑i=1nStiA_T = \frac{1}{n}\sum_{i=1}^n S_{t_i}

看涨收益 max⁡(AT−K,0)\max(A_T - K, 0)。为什么有人要交易平均而不是终值?两个理由,都很实际。其一,平均比现货平滑,收益方差小,期权相对同 delta 的香草便宜。其二,在交易清淡的市场——石油货物、电力、新兴市场外汇远期——亚式期权贴合真实的经济暴露:按季度分批买原油的炼厂,天然的对冲就是那个季度均价上的期权,而不是某一天收盘价上的期权。

几何平均是能算的那一个。 先看简单的特例:

GT=exp⁡(1n∑i=1nln⁡Sti)G_T = \exp\left(\frac{1}{n}\sum_{i=1}^n \ln S_{t_i}\right)

对数正态变量的几何平均仍是对数正态——对数的和还是正态。所以 max⁡(GT−K,0)\max(G_T - K, 0) 有闭式(Kemna & Vorst, 1990):就是一个调低了波动率、调整了漂移的 Black-Scholes 看涨,其中

σgeo2=σ2⋅(n+1)(2n+1)6n2\sigma_{\text{geo}}^2 = \sigma^2 \cdot \frac{(n+1)(2n+1)}{6n^2}

(n→∞n \to \infty 的连续监测极限是 σ2/3\sigma^2/3——平均把方差压到三分之一,这就是亚式便宜的定量原因)。几何和算术的关系由算术-几何平均不等式逐路径成立,取期望后:

算术亚式≥几何亚式\text{算术亚式} \geq \text{几何亚式}

所以几何闭式是算术价格的下界,经验上常在 1-2% 以内——这个”便宜的近亲”等一下还有别的用处。

算术平均没有闭式,但矩是精确的。 对数正态的和不再是对数正态,分布写不出来;可写出来的是它的前两矩。一阶矩逐项取期望:

E[AT]=1n∑i=1nE[Sti]=S0⋅1n∑i=1nerti\mathbb{E}[A_T] = \frac{1}{n}\sum_{i=1}^n \mathbb{E}[S_{t_i}] = S_0 \cdot \frac{1}{n}\sum_{i=1}^n e^{r t_i}

二阶矩的代数多一步,因为交叉项不独立:

Var(AT)=1n2∑i,jCov(Sti,Stj)\text{Var}(A_T) = \frac{1}{n^2} \sum_{i, j} \text{Cov}(S_{t_i}, S_{t_j})

其中 Cov(Sti,Stj)=S02 er(ti+tj)(eσ2min⁡(ti,tj)−1)\text{Cov}(S_{t_i}, S_{t_j}) = S_0^2\, e^{r(t_i + t_j)}\big(e^{\sigma^2 \min(t_i, t_j)} - 1\big)——共同的历史只到 min⁡(ti,tj)\min(t_i, t_j) 为止。连续监测极限下二重和收成一个整洁的闭式:

E[AT2]=2S02T2[e(2r+σ2)T−1(r+σ2)(2r+σ2)−erT−1r (r+σ2)]\mathbb{E}[A_T^2] = \frac{2 S_0^2}{T^2}\left[\frac{e^{(2r+\sigma^2)T} - 1}{(r+\sigma^2)(2r+\sigma^2)} - \frac{e^{rT} - 1}{r\,(r+\sigma^2)}\right]

标准的对数正态矩匹配近似就到位了:用这两个矩配一个对数正态,按 Black-Scholes 定价。低 r/σr/\sigma 时通常在真值 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))

(数值验证:S0=K=100S_0 = K = 100、r=5%r = 5\%、σ=20%\sigma = 20\%、T=1T = 1 时上式给 5.78,40 万条路径的 MC 给 5.76±0.01。)要更准,Curran (1994) 的条件化方法通常能进到 0.5% 以内,思路见下文离散监测一节。

要精确,两条路。一是 PDE:把运行平均 AA 补进状态向量,在 (S,A,t)(S, A, t) 上解

∂V∂t+12σ2S2∂2V∂S2+rS∂V∂S+S−AT−t∂V∂A−rV=0\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} + rS \frac{\partial V}{\partial S} + \frac{S - A}{T-t}\frac{\partial V}{\partial A} - rV = 0

终值条件 V(S,A,T)=max⁡(A−K,0)V(S, A, T) = \max(A - K, 0),Crank-Nicolson 倒推——注意方程里 AA 方向没有二阶导,平均不带自己的噪声,只是被 SS 拖着走,这是”补变量”代价小的一类。二是蒙特卡洛,它对整个路径依赖世界通吃:

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 方法。

障碍期权:补一个触线指示

障碍期权在标的跨过某个水平时激活或作废。四种组合:上行敲出(涨过 HH 作废)、上行敲入(涨过 HH 才生效)、下行敲出、下行敲入。对 H>KH > K 的上行敲出看涨,收益是:

V(S,H,T)=1max⁡S<Hmax⁡(ST−K,0)V(S, H, T) = \mathbb{1}_{\max S < H} \max(S_T - K, 0)

补进状态空间的变量是那个指示函数,它把定价域切掉了一块:PDE 解法就是把定义域限制在 S∈[0,H]S \in [0, H]、在 S=HS = H 上钉 V=0V = 0。敲入不用单独解,in-out 平价免费送:

上行敲入看涨=香草看涨−上行敲出看涨\text{上行敲入看涨} = \text{香草看涨} - \text{上行敲出看涨}

同一条路径,要么触线要么没触,两个期权合起来就是香草。

闭式靠镜像原理。 布朗运动关于障碍的反射对称让触线路径的分布可以显式写出,Rubinstein 和 Reiner (1991) 据此给出了整族障碍期权的公式。以障碍 L≤KL \leq K、当前 S>LS > L 的下行敲出看涨为例,记 λ=(r+σ2/2)/σ2\lambda = (r + \sigma^2/2)/\sigma^2,x1=ln⁡(S/K)/(σT)+λσTx_1 = \ln(S/K)/(\sigma\sqrt{T}) + \lambda\sigma\sqrt{T},y1=ln⁡ ⁣(L2/(SK))/(σT)+λσTy_1 = \ln\!\big(L^2/(SK)\big)/(\sigma\sqrt{T}) + \lambda\sigma\sqrt{T}:

Cdo=SN(x1)−Ke−rTN(x1−σT)−S(LS)2λN(y1)+Ke−rT(LS)2λ−2N(y1−σT)C_{\text{do}} = S N(x_1) - K e^{-rT} N(x_1 - \sigma\sqrt{T}) - S\left(\frac{L}{S}\right)^{2\lambda} N(y_1) + K e^{-rT} \left(\frac{L}{S}\right)^{2\lambda - 2} N(y_1 - \sigma\sqrt{T})

前两项是香草,后两项是”镜像修正”——把从 LL 反射回来的路径的贡献扣掉,(L/S)2λ(L/S)^{2\lambda} 就是镜像测度变换的权重。其余七种类型由对称性和 in-out 平价拼装。

连续与离散监测的差是真金白银。 公式假设连续盯线;真实合约按日或按周检查。离散监测的路径”错过”了两次观察之间的触线,所以离散障碍期权触线概率更低——敲出期权更值钱、敲入更便宜。修正是 Broadie、Glasserman 和 Kou (1997) 的连续性修正:用平移过的有效障碍套连续公式,细节在下文离散监测一节统一给。

对冲才是障碍真正的难处。 价值函数在障碍上连续,但 delta 不是慢慢变小,而是在障碍附近陡峭地翻转,gamma 局部爆炸。反向敲出(障碍在实值方向)尤其凶:期权在最值钱的位置作废,做市商接近障碍时要么接受滑点减少调仓,要么用”在障碍处的数字期权”显式对冲那个不连续。有些合约干脆把产品设计得对冲友好——窗口障碍只在离散日期检查、软障碍在一个区间内平滑过渡——定价难一点,换对冲账簿睡得着觉。

回望期权:补一个运行极值

回望看涨支付 max⁡(max⁡t≤TSt−K,0)\max(\max_{t \leq T} S_t - K, 0),回望看跌支付 max⁡(K−min⁡t≤TSt,0)\max(K - \min_{t \leq T} S_t, 0):收益依赖路径的上确界或下确界。补进状态空间的是运行极值,而它的分布——同样拜镜像原理所赐——与终值的联合律是显式可知的。这让浮动执行价回望(收益 ST−min⁡tStS_T - \min_t S_t,“以最低点买入”)有精确闭式(Goldman, Sosin & Gatto, 1979)。发行时刻(S=Smin⁡=S0S = S_{\min} = S_0),记 a1=(r+σ2/2)T/σa_1 = (r + \sigma^2/2)\sqrt{T}/\sigma,a2=a1−σTa_2 = a_1 - \sigma\sqrt{T},a3=a1−2rT/σa_3 = a_1 - 2r\sqrt{T}/\sigma:

C=S0N(a1)−S0e−rTN(a2)−S0σ22r[N(−a1)−e−rTN(−a3)]C = S_0 N(a_1) - S_0 e^{-rT} N(a_2) - S_0 \frac{\sigma^2}{2r} \left[N(-a_1) - e^{-rT} N(-a_3)\right]

前两项长得像一个 ATM 看涨,第三项是”极值溢价”——为”永远买在最低点”这个特权付的钱,量级由 σ2/2r\sigma^2/2r 控制。这是精确公式,不是近似。固定执行价回望也有闭式但更繁,离散监测下大家直接上蒙特卡洛:

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()

两个警告。一是收敛慢:max⁡tSt\max_t S_t 的尾比 STS_T 肥,而且离散路径系统性低估连续极值(极值多半出现在观察点之间),步数不够时偏差比方差还大——对偶变量和布朗桥修正都有帮助。二是对冲:运行极值跟着实际路径走,当前极值逼近行使价时,标准 delta 对冲的可靠性下降,做市商通常带着额外库存当缓冲。

远期起始期权:严格说不是路径依赖,但排在这儿

远期起始看涨在 T1T_1 才把执行价定为 ST1S_{T_1},在 T2>T1T_2 > T_1 到期:

收益=max⁡(ST2−ST1,0)\text{收益} = \max(S_{T_2} - S_{T_1}, 0)

Black-Scholes 下有个利落的齐次性论证:站在 T1T_1 看,这是一个 ATM 看涨,其价值正比于 ST1S_{T_1};今天对 ST1S_{T_1} 取期望再折现,比例系数原封不动地传回来:

C=S0[N(d1)−e−r(T2−T1)N(d2)],d1,2=(r±σ2/2)(T2−T1)σT2−T1C = S_0\left[N(d_1) - e^{-r(T_2 - T_1)} N(d_2)\right], \qquad d_{1,2} = \frac{(r \pm \sigma^2/2)(T_2 - T_1)}{\sigma\sqrt{T_2 - T_1}}

只有 T1T_1 到 T2T_2 之间的波动率进入价格——T1T_1 之前的路径被齐次性完全吸收。这正是它宝贵的原因:远期起始期权是对未来微笑的纯押注,与今天的现货偏斜脱钩,所以它是检验微笑动态模型的最干净的试金石(局部 vol 在这上面栽的跟头,见局部波动率那篇)。Heston 下它同样可解:ST2/ST1S_{T_2}/S_{T_1} 的特征函数保持仿射结构,半解析定价照走。

方法的层级

把上面的经验收成一个决策次序。闭式最好,可惜稀少:几何亚式、浮动执行价回望、Rubinstein-Reiner 障碍、Heston 与 Merton 的特征函数——能用就用,哪怕只当验证基准和控制变量。其次是状态增广的 PDE:补的变量维度低、动态简单时(亚式的 AA、障碍的域截断)稳定可靠。树方法算 PDE 的近亲,对离散监测尤其顺手。剩下的世界属于蒙特卡洛加方差缩减;拟蒙特卡洛和布朗桥再叠一层加速。生产库的常态是混合:每个产品走它那条最便宜的路,蒙特卡洛兜底。

方差缩减:蒙特卡洛的性价比工程

路径依赖定价几乎离不开 MC,方差缩减不是锦上添花,是预算问题。四件常规武器:对偶变量——每条路径配一条镜像 −Z-\mathbf{Z},平滑收益上方差降 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 倍。工作流:生成 [0,1]d[0,1]^d 的 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 扰乱的版本)。

离散监测:同一个修正,两副面孔

合约按离散时间点观察,连续时间的公式就得打折。对亚式,离散平均对连续平均的偏离是光滑的,价格差按 1/n1/n 收敛:

Vdiscrete(n)=Vcontinuous+c1n+O(n−2)V_{\text{discrete}}(n) = V_{\text{continuous}} + \frac{c_1}{n} + O(n^{-2})

系数 c1c_1 依赖收益结构;实务上这个展开的直接用途是 Richardson 外推——用两个 nn 的 MC 结果外推连续极限,或者反过来。

对障碍,修正大得多也出名得多,因为离散路径会”错过”观察点之间的触线。Broadie-Glasserman-Kou (1997) 的连续性修正说:离散监测的障碍期权,近似等于把障碍平移后的连续监测期权——

VdiscreteH(n)≈VcontinuousHeff,Heff=H e±βσT/nV^{H}_{\text{discrete}}(n) \approx V^{H_{\text{eff}}}_{\text{continuous}}, \qquad H_{\text{eff}} = H\, e^{\pm \beta \sigma \sqrt{T/n}}

上行障碍取 ++(往外挪)、下行取 −-,常数 β=−ζ(1/2)/2π≈0.5826\beta = -\zeta(1/2)/\sqrt{2\pi} \approx 0.5826。直觉:离散观察少看见一些触线,等效于障碍离现在的价格更远了半步,那半步的尺寸是一个”vol-观察间隔”。日度监测下这一移动不小,直接用连续公式而不修正,是障碍定价里最常见的系统性错误。修正本身也只是近似;要更准,上布朗桥修正或条件 MC。

亚式的离散版本还有一个漂亮的精确技巧,就是前面提过的 Curran (1994)。离散算术平均

Adiscrete=1n∑iStiA_{\text{discrete}} = \frac{1}{n}\sum_{i} S_{t_i}

以几何平均 GG 为条件:GG 是对数正态(闭式已知),而 G≥KG \geq K 时几乎必然 A≥KA \geq K——条件内层的期望有闭式,只剩 G<KG < K 的部分要做一维数值积分:

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% 以内——“能解析积掉的维度不要模拟”这条原则的又一次兑现。

对冲者的账本

把视角从定价换到持仓。障碍账簿的核心监控量是距障碍距离:

Dist(S,H)=ln⁡(S/H)\text{Dist}(S, H) = \ln(S / H)

或者除以 σΔt\sigma\sqrt{\Delta t} 换算成”还差几个标准差”。距离一收窄,delta 急剧放大、换向,账簿从平静直接切换到不稳定。常见的操作纪律是分层调仓频率:离障碍远时每 KK 分钟对冲一次,近了加密到 K/10K/10——在跟踪误差和交易成本之间找平衡,而不是假装连续对冲可行。

卖方的实现损益,按最朴素的记账:

P&L=premium−∑iΔti (Sti+1−Sti)−payoffT\text{P\&L} = \text{premium} - \sum_i \Delta_{t_i}\,\big(S_{t_{i+1}} - S_{t_i}\big) - \text{payoff}_T

收进权利金,沿路支付对冲的再平衡成本,到期付掉收益。卖下行敲出看跌的典型剧本:大部分时间期权活着,你像香草卖方一样收 gamma scalping 的钱;标的跌破下障碍,期权作废,premium 落袋。坏剧本藏在敲出前的最后一段:下跌途中你一路 delta 做多对冲,若市场在触线前猛然反弹,你的账簿同时空着波动率、又踏空反弹——两头挨打。软障碍和阶梯障碍这类产品设计,就是在给这个剧本上保险。

换到随机波动率下

以上全部在 Black-Scholes 下展开;换到 Heston 或 SABR,框架不变——还是补状态变量,还是闭式/PDE/MC 三条路——但微笑被烤进了路径。方向上的经验:亚式对波动率期限结构和路径的方差聚集敏感,与同水平常数 vol 的 BS 价相比可高可低,取决于 ρ\rho 和期限;障碍对实现的 vol-of-vol 路径敏感,触线概率被波动率的波动直接抬高或压低;回望的极值行为在随机 vol 下更极端,极值溢价相应变化。工具还是那两件:(S,v)(S, v) 上的二维 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)。