← 返回模块
F1.4.5.3beta 可读 · 未来付费校验通过内容版本 2026-05-26

数值定价引擎:蒙特卡洛、有限差分与 FFT

1.4.5 · 高级衍生品 · 金融与量化投资

​Hook(开场场景).​ 某头部券商衍生品定价团队的工程师周一早晨拿到了三张交易工单:(A)需要在 50ETF(510050)香草欧式期权(European option)链上做隔夜重估,行权价从 2.0 到 3.5,30 个 strike 网格,到期日覆盖未来 12 个月——目前由桌面 Excel 单独计算每只期权要 4 分钟才能跑完,桌面员工抱怨重估在开盘前出不来;(B)一只挂钩沪深300 ETF(510300)的单标的美式数字票息票据,需要定价含早行权权利;(C)一只规模 5 亿元的中证500 雪球结构的 60 天市场价值(mark-to-market),每日障碍监控、需要定价精确到 0.05% 的本金。

三张单子,三种不同的定价工具。引擎的选择不是手感问题——它由两件事确定:标的状态空间的维数与损益是否依赖路径。下面给出 CN 私募 vol 桌台真正用的三引擎路由表与各自的实现细节(MC 蒙特卡洛、有限差分 FD、FFT),并把它们一一接到这三张工单上。

引擎路由表

场景路径依赖?状态维数推荐引擎原因
香草期权链全网格1FFT (Carr-Madan)一次 FFT 调用恢复整条 strike 网格
单标的美式期权否(但早行权)1有限差分 FD(Crank-Nicolson)早行权边界自然嵌入 PSOR / 罚函数
单标的离散监控雪球 / 障碍1MC + Brownian bridge离散监控偏差需 bridge 修正
多资产篮子 / 自相关型奇异3\ge 3MC(带控制变量)FD 在 3 维以上爆掉
Heston 下的香草链1 + volFFT (Carr-Madan)特征函数已知

下面对三引擎逐一展开。

引擎一:蒙特卡洛

MC 的核心想法:在风险中性测度(Q-measure)下采样标的路径,对每条路径计算损益,把贴现样本均值作为价格估计,把样本标准差除以 N\sqrt{N} 作为定价不确定性(standard error)。

# 香草欧式 call 的最小 MC 实现(GBM 风险中性测度)
import numpy as np

def mc_european_call(S0, K, r, sigma, T, n_paths=100_000, seed=7):
    rng = np.random.default_rng(seed)
    Z = rng.standard_normal(n_paths)
    ST = S0 * np.exp((r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * Z)
    payoffs = np.maximum(ST - K, 0.0)
    discounted = np.exp(-r * T) * payoffs
    price = discounted.mean()
    se = discounted.std(ddof=1) / np.sqrt(n_paths)
    return price, se

误差以 1/N1/\sqrt{N} 收敛——把误差砍半要四倍样本量。两种最常用的方差缩减(variance reduction)方法可以把同样精度下的样本量砍掉一个数量级:

​对偶变量法(antithetic variates)​​:每抽一个布朗增量 ZiZ_i,同时把 Zi-Z_i 也用上,配对成两条镜像路径。两条路径的损益负相关(在香草 call 上对应平均下降约 30–50% 的方差,免费),有效样本量约 2 倍。

​控制变量法(control variates)​​:选一个与目标损益相关、且自身有封闭解的随机量 YY(如几何平均亚式期权——GBM 下保持对数正态性,可控价)。MC 估计 Xc(YE[Y])X - c(Y - E[Y])(其中 c=Cov(X,Y)/Var(Y)c = \text{Cov}(X,Y)/\text{Var}(Y)),把已知部分扣掉。在算术亚式期权这种"长得很像几何亚式"的损益上,控制变量可以把方差缩 100 倍以上。

对路径依赖产品(亚式、回望、障碍),MC 自然扩展:模拟整条路径,按损益公式计算。对离散监控的障碍期权,Brownian-bridge 修正必须加上——离散观察会系统性低估障碍触发概率,bridge 修正给出每段路径间"在闭区间内击穿障碍"的解析条件概率。

对美式 / 百慕大期权,​​Longstaff-Schwartz 回归 MC(2001)​​给出了一种把"早行权权利"嵌入 MC 的方案:在每个可能的早行权时点 TkT_k,把"延续价值(continuation value)"E[VTk+1STk]\mathbf E[V_{T_{k+1}} | S_{T_k}] 用 in-the-money 路径上的若干基函数(典型是 1,S,S21, S, S^2 三阶多项式)做最小二乘回归,然后在每条路径上比较"立即行权" vs "回归预测的延续价值",选大者作为该时点价值。回归是整个算法的承重步骤——基函数选不好,定价就有系统性偏差。

引擎二:有限差分 PDE

Black-Scholes 模型下风险中性测度内的偏微分方程(partial differential equation, PDE)(标的服从布朗运动驱动的 GBM)是:

Vt+12σ2S22VS2+(rq)SVSrV=0\frac{\partial V}{\partial t} + \tfrac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} + (r - q) S \frac{\partial V}{\partial S} - r V = 0

(S,t)(S, t) 离散成网格 {Sj,tn}\{S_j, t_n\},期权值 VjnV_j^n,三种差分方案的差别即"用哪个时点的二阶差分":

方案时间差分点稳定性时间精度空间精度
显式(explicit)tnt_n条件稳定,需 Δt(ΔS)2/(σ2Smax2)\Delta t \le (\Delta S)^2 / (\sigma^2 S_{\max}^2)O(Δt)O(\Delta t)O(ΔS2)O(\Delta S^2)
隐式(implicit)tn+1t_{n+1}无条件稳定O(Δt)O(\Delta t)O(ΔS2)O(\Delta S^2)
Crank-Nicolson12(tn+tn+1)\tfrac{1}{2}(t_n + t_{n+1})无条件稳定O(Δt2)O(\Delta t^2)O(ΔS2)O(\Delta S^2)

显式方案 CFL 条件几乎不允许在产品中使用(典型 σSmax2\sigma S_{\max}^2Δt\Delta t 砍到微秒级)。Crank-Nicolson 是生产默认,二阶时间精度+无条件稳定,每一步需要解一个三对角线性方程组。

美式期权的早行权边界由 PSOR(projected SOR)或罚函数(penalty methods)方案处理:每一步先按欧式 PDE 推进一步,再按 Vjnmax(Vjn,intrinsic(Sj))V_j^n \leftarrow \max(V_j^n, \text{intrinsic}(S_j)) 投影回"立即行权值之上"。

维数诅咒(curse of dimensionality):FD 网格在 dd 维状态空间下大小为 MdM^dd2d \le 2 可控;d=3d = 3 已勉强;d4d \ge 4 在生产里被自动路由回 MC。这就是为什么多资产篮子 / 自相关型奇异回到 MC 的根本原因。

边界条件这一节同样关键。FD 需要在三条边上指定边界值:到期日 TT 处的边界是损益函数本身(如香草 call 是 max(SK,0)\max(S - K, 0));S=0S = 0 处对于看涨期权恒为 0;S=SmaxS = S_{\max} 处通常采用 Dirichlet 边界 V(Smax,t)=SmaxKer(Tt)V(S_{\max}, t) = S_{\max} - K e^{-r (T-t)}(远值近似无界处香草 call 趋于内在值)或 Neumann 边界 2V/S2=0\partial^2 V / \partial S^2 = 0(适用障碍期权与早行权情形)。边界选错会污染整个内域解;CN 桌台对障碍期权常常踩到的就是 SmaxS_{\max} 截断过近导致定价偏低,标准做法是把 SmaxS_{\max} 设到 5S05 \cdot S_0 以上。

引擎三:FFT / Carr-Madan

对任何随机过程,只要 logST\log S_T 在风险中性测度下的特征函数 ϕT(u)=E[eiulogST]\phi_T(u) = \mathbb E[e^{i u \log S_T}] 是闭式可得(Heston、variance-gamma、Lévy 族),就可用 Carr-Madan(1999)恒等式一次 FFT 调用得到整条 strike 网格的价格。设 CT(k)C_T(k) 为对数行权价 k=logKk = \log K 处的看涨期权价,引入指数衰减因子 α>0\alpha > 0eαkCT(k)e^{\alpha k} C_T(k) 平方可积,则:

CT(k)=eαkπ0Re ⁣[eiukerTϕT(u(α+1)i)α2+αu2+i(2α+1)u]duC_T(k) = \frac{e^{-\alpha k}}{\pi} \int_0^\infty \text{Re}\!\left[ e^{-i u k} \cdot \frac{e^{-rT} \phi_T(u - (\alpha + 1) i)}{\alpha^2 + \alpha - u^2 + i (2\alpha + 1) u} \right] du

把右边按 trapezoid 或 Simpson 离散,得到的离散和恰好是 FFT 的标准形式。整个香草链——所有 KK 一次性出价——只要一次 FFT。

实际意义:对 50ETF(510050)或沪深300 ETF(510300)的香草链每日重估,Heston 标定一次(几秒)+ FFT 一次(毫秒级)即可重估上百个 strike + 多到期日。这正是工单 A 的最优引擎。

CN region 区域案例(case):雪球 60 天 MtM

把三引擎接到工单 C(5 亿元雪球 60 天市值):

  1. 标定:用 50ETF(510050)+ 沪深300 ETF(510300)期权链的当前隐含波动率曲面,拟合 Heston 参数(FFT 反推 vanilla 价格 → 标定)。该步骤本身用 FFT 调用反复跑。
  2. 估值:对单标的(CSI 500)雪球,因为有每日离散监控的下敲入障碍 + 多个月度敲出现金或无 call,路径依赖 + 1 维状态,最适合 MC + Brownian bridge 修正。私募 vol 桌台的标准设置是 100 万条路径,几何亚式控制变量,运行时间约 4 分钟。
  3. 误差预算:100 万路径下,雪球价格的 standard error 在 0.04%–0.06% 本金量级,正好接近工单要求的 0.05%。若客户要求 0.02%,砍掉一半误差要四倍样本,运行时间升到 16 分钟——超出工作窗口,此时桌台会把控制变量加上对偶变量法,或预先把已敲出概率与残值映射成查表,把后续路径只跑剩余生存路径。
  4. T+1 结算约束让 CN 雪球的对冲再平衡只能在次日开盘做,所以 MtM 报告必须在收盘后 30 分钟内出,否则风控部门没时间审批次日对冲订单。这是引擎调度的硬约束。

练习

Exercise

你用 100,000 条路径估出一只香草欧式 call 的 MC 价格为 ¥5.20,样本标准差 9.50。问:(1)当前 standard error 是多少?(2)要把 standard error 砍到 0.01 需要多少条路径(仍只用普通 MC)?(3)若改用对偶变量法把每路径方差砍掉 40%,需要的路径数变为多少?

提示
SE = sigma / sqrt(N)。当前 SE = 9.50 / sqrt(100000) ≈ 0.030。要砍到 0.01,N 需是当前 N 的 9 倍:N ≈ 900,000。
提示
对偶法把每路径方差砍 40%,所需路径数按 sigma^2 缩放:N_antithetic ≈ 900,000 × 0.6 ≈ 540,000。注意对偶法本身已经把"每抽一次 Z 用两条路径",所以实际样本数还要再除以 2 才是抽样次数。

通往下一课的过渡

到这里你已经能根据路径依赖+维数把任意衍生品产品路由到正确引擎(MC / FD / FFT),写出香草 MC 的最小实现并用对偶/控制变量加速,知道 Crank-Nicolson 为何是 FD 的生产默认,并理解 Carr-Madan 恒等式如何用一次 FFT 出整条 strike 链。前三课覆盖了整个股票期权(含 vol 衍生品)世界的产品 → 交易 → 实现这条链。下一课转去看另外三个本质不同的衍生品资产类别:利率(vanilla 互换、caps/floors、swaptions——CN 在 FR007 IRS 与国债期货 CFFEX 上的实务)、信用(CDS、CRMW、信用利差)与结构化产品(再次回到雪球,但这次把它跟下面要讲的零息债 + 数字票息 + 短下敲入 put 的拆解对齐)。三引擎全部适用——只是产品换了。