3. 几何布朗运动:股票价格建模的标准范式
聊到期权定价,就绕不开一个核心问题:股票价格到底是怎么走的?
你想想看,如果我们能精确预测明天的股价,那期权定价就太简单了。但现实是,股价充满了随机性。那怎么用数学来描述这种随机性呢?
嗯,这就是几何布朗运动(GBM)要解决的问题。我个人习惯把它叫做“金融界的随机游走标准模型”。
3.1 为什么是几何布朗运动?
先说说布朗运动本身。它最早是用来描述花粉颗粒在水中的随机运动。后来被数学家们抽象成了维纳过程。
但直接用布朗运动来建模股价,有个问题。股价不能为负,对吧?而且股价的波动幅度,跟股价本身的大小有关。比如100块的股票,一天波动1块很正常;但1块的股票,一天波动1块就太夸张了。
所以就有了几何布朗运动。它加了一个“几何”前缀,说白了就是:股价的对数收益率服从正态分布。这样一来,股价本身永远为正,而且波动率跟股价成比例。
核心公式:
dS = μS dt + σS dW
其中:
- S:股票价格
- μ:漂移率(期望收益率)
- σ:波动率
- dW:维纳过程的增量
这个公式看着简单,但内涵很深。我在项目中遇到过不少新手,上来就把μ当成无风险利率,结果定价全偏了。μ其实是风险中性下的期望收益率,在BSM框架里,它等于无风险利率r。
3.2 离散化与模拟
实际应用中,我们没法用连续时间公式直接算。得把它离散化,才能在计算机上跑。
最常用的方法是欧拉离散化。把时间切成小段,每段Δt,然后递推:
import numpy as np
def simulate_gbm(S0, mu, sigma, T, N, seed=42):
"""
模拟几何布朗运动路径
参数:
S0: 初始股价
mu: 漂移率
sigma: 波动率
T: 时间长度(年)
N: 时间步数
"""
np.random.seed(seed)
dt = T / N
# 生成标准正态随机数
Z = np.random.standard_normal(N)
# 初始化价格数组
S = np.zeros(N + 1)
S[0] = S0
# 递推计算
for t in range(1, N + 1):
S[t] = S[t-1] * np.exp(
(mu - 0.5 * sigma**2) * dt +
sigma * np.sqrt(dt) * Z[t-1]
)
return S
# 示例:模拟一条路径
S0 = 100.0
mu = 0.05
sigma = 0.2
T = 1.0
N = 252 # 交易日数量
path = simulate_gbm(S0, mu, sigma, T, N)
print(f"最终价格: {path[-1]:.2f}")
避坑指南:
我曾经在模拟时直接用 dS = μS dt + σS dW 这个形式做离散化,结果发现模拟出来的价格路径经常出现负值。后来才意识到,应该用对数形式的精确解:
S(t+Δt) = S(t) * exp((μ - 0.5σ²)Δt + σ√Δt * Z)
这个公式保证了股价永远为正,而且模拟精度更高。
3.3 为什么是“几何”的?
你可能好奇,为什么叫“几何”布朗运动?
我解释一下。普通的布朗运动,增量是加性的。比如今天股价100,明天变成100 + 随机增量。但几何布朗运动,增量是乘性的。今天100,明天变成100 * 随机乘数。
这个乘数服从对数正态分布。所以股价本身也服从对数正态分布。你想想看,对数正态分布有个特点:它不会出现负值,而且右尾很长,正好符合真实股价的特征。
| 特征 | 普通布朗运动 | 几何布朗运动 |
|---|---|---|
| 增量形式 | 加性:S + 随机项 | 乘性:S × 随机乘数 |
| 价格范围 | 可能为负 | 永远为正 |
| 收益率分布 | 正态分布 | 对数正态分布 |
| 适用场景 | 利率建模 | 股票、指数 |
3.4 核心性质:伊藤引理的应用
说到几何布朗运动,就不得不提伊藤引理。这是随机微积分里最重要的工具之一。
假设股价S服从GBM,我们想求ln(S)的随机微分方程。用伊藤引理:
设 f(S) = ln(S)
则 df = (∂f/∂S) dS + (1/2)(∂²f/∂S²) (dS)²
计算偏导:
∂f/∂S = 1/S
∂²f/∂S² = -1/S²
代入GBM的dS = μS dt + σS dW:
df = (1/S)(μS dt + σS dW) + (1/2)(-1/S²)(σ²S² dt)
= μ dt + σ dW - (1/2)σ² dt
= (μ - σ²/2) dt + σ dW
这个结果很漂亮。ln(S)的漂移率是μ - σ²/2,而不是μ。这就是为什么在模拟时,我们要用μ - 0.5σ²作为漂移项。
注意:
很多初学者会忽略这个“-0.5σ²”项。但它在期权定价中至关重要。比如在蒙特卡洛模拟中,如果忘了这个修正项,模拟出来的期权价格会系统性偏高或偏低。
3.5 知识体系总览
为了让你更直观地理解几何布朗运动在期权定价中的位置,我画了一张图:
3.6 实际应用中的注意事项
最后,我想分享几个实际项目中的经验:
- 波动率不是常数。GBM假设σ是常数,但真实市场里波动率会变化。我建议在做长期模拟时,考虑使用随机波动率模型。
- 时间步长要合理。Δt太大,模拟精度不够;Δt太小,计算量太大。一般用交易日(252天/年)或更细的分钟级数据。
- 随机数质量很重要。普通的伪随机数可能不够用,可以考虑用Sobol序列等低差异序列,能提高收敛速度。
- 别忘了分红。如果股票有分红,需要在漂移项中扣除分红率q,变成dS = (r - q)S dt + σS dW。
我的一个小技巧:
在做蒙特卡洛模拟时,我习惯先跑1000条路径看看分布形状。如果发现尾部太厚或者有异常值,多半是随机数生成出了问题。这时候检查一下种子设置和随机数生成器,往往能解决问题。
好了,几何布朗运动就讲到这里。它是期权定价的基石,理解了它,后面的BSM公式推导就会顺畅很多。
公众号:蓝海资料掘金营,微信deep3321