3. 随机过程与布朗运动
在期权定价库的工程实现中,我们最终要回答一个核心问题:资产价格在时间维度上如何演化?这个问题的数学答案,就是随机过程。本节从维纳过程出发,经过伊藤引理这一关键桥梁,落到几何布朗运动,并给出可直接编码的资产价格路径生成方案。
一、核心原理:从维纳过程到几何布朗运动
维纳过程(Wiener Process),又称布朗运动,是连续时间随机过程的基石。它满足三个条件:W(0)=0;增量独立且服从正态分布 W(t)-W(s) ~ N(0, t-s);路径连续但几乎处处不可微。离散化后,每一步增量可写为:
ΔW = ε · √Δt, ε ~ N(0,1)
普通维纳过程可以取负值,而股票价格不能为负。因此工程上采用几何布朗运动(GBM)建模资产价格:
dS = μS dt + σS dW
其中 μ 为漂移率,σ 为波动率。该随机微分方程的解为:
S(t) = S(0) · exp[(μ - σ²/2)t + σW(t)]
注意指数中的 -σ²/2 项,它来自伊藤引理,是随机微积分与普通微积分最本质的区别之一。若忽略此项,模拟出的价格路径会系统性偏高。
伊藤引理(Itô's Lemma):若 X 满足 dX = a dt + b dW,且 f(X,t) 二阶连续可微,则 df = (∂f/∂t + a∂f/∂X + ½b²∂²f/∂X²)dt + b(∂f/∂X)dW。多出的 ½b²∂²f/∂X² 项正是随机性带来的二阶修正。
二、方法流程:资产价格路径模拟的工程步骤
- 确定参数:初始价格 S0、漂移率 μ、波动率 σ、时间步长 Δt、模拟步数 N。
- 生成标准正态随机数:使用可复现的随机数生成器(如 Mersenne Twister),并设置固定种子。
- 计算对数增量:ΔlnS = (μ - σ²/2)Δt + σ√Δt·ε。
- 累加并指数还原:S(t+Δt) = S(t)·exp(ΔlnS)。
- 存储路径:以矩阵形式保存 M 条路径 × N 个时间点,供后续定价与风险计算使用。
下面是一段 Python 伪代码,展示核心循环:
import numpy as np
def simulate_gbm(S0, mu, sigma, T, N, M, seed=42):
rng = np.random.default_rng(seed)
dt = T / N
Z = rng.standard_normal((M, N))
increments = (mu - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * Z
log_paths = np.cumsum(increments, axis=1)
paths = S0 * np.exp(np.hstack([np.zeros((M,1)), log_paths]))
return paths
三、案例/场景:蒙特卡洛定价中的路径生成
假设我们要为一只欧式看涨期权定价,参数为 S0=100,K=105,r=0.03,σ=0.2,T=1年。在风险中性测度下,漂移率 μ 替换为无风险利率 r。使用上述 GBM 模拟 10 万条路径,每条路径 252 个时间步,得到终端价格分布后计算贴现期望:
paths = simulate_gbm(100, 0.03, 0.2, 1.0, 252, 100000)
ST = paths[:, -1]
payoff = np.maximum(ST - 105, 0)
price = np.exp(-0.03 * 1.0) * payoff.mean()
# 典型输出:price ≈ 6.02
该结果可与 Black-Scholes 解析解对比,用于验证随机过程实现的正确性。若两者偏差超过 0.5%,通常说明时间步长过大或随机数质量不足。
四、误区与复盘
| 常见误区 | 后果 | 修正方法 |
|---|---|---|
| 忽略 -σ²/2 项 | 价格路径系统性偏高,期权价格偏差 | 严格使用伊藤引理推导的漂移项 |
| 用普通微积分对 S 求导 | 推导 d(lnS) 时出错 | 对 lnS 应用伊藤引理 |
| Δt 过大 | 离散化误差显著,路径粗糙 | Δt ≤ 1/252,必要时用布朗桥细化 |
| 随机数种子不固定 | 结果不可复现,测试失败 | 固定 seed 并记录在配置中 |
| 直接对 S 加正态增量 | 可能出现负价格 | 改用对数增量再指数还原 |
工程建议:在定价库中,将随机过程抽象为
StochasticProcess 接口,GBM 作为其实现类。这样后续替换为 Heston、SABR 等模型时,蒙特卡洛引擎无需改动。
注意:伊藤引理中的二阶项不是可选的数学装饰,而是随机微积分的核心。任何忽略该项的推导都会在波动率较大时产生肉眼可见的定价错误。