4. 几何布朗运动:股票价格建模的标准范式

聊到股票价格建模,绕不开的一个概念就是几何布朗运动。说实话,我刚入行那会儿,觉得这名字挺唬人的。什么「几何」?什么「布朗运动」?不就是个随机过程嘛。

但后来我在实盘里吃过亏。有一次用普通布朗运动去模拟某只股票的路径,结果价格跑出了负数。你想想看,股票价格怎么可能为负?那次之后,我才真正理解了为什么业界都用几何布朗运动——它保证了价格始终为正。

4.1 为什么是几何布朗运动?

普通布朗运动(也叫算术布朗运动)的公式是:

dS = μ dt + σ dW

这里 S 是价格,μ 是漂移率,σ 是波动率,dW 是维纳过程增量。问题在哪?价格变化是绝对的,不是相对的。比如股价从 100 跌到 90,和从 10 跌到 0,绝对跌幅都是 10,但意义完全不同。

几何布朗运动改成了相对变化:

dS / S = μ dt + σ dW

说白了,就是价格的变化率服从布朗运动。这样价格永远大于零,而且波动幅度会随着价格水平调整。嗯,这里要注意:这个假设在大多数情况下成立,但遇到极端行情时也会失效。

4.2 核心公式与推导

把上面的式子改写一下:

dS = μ S dt + σ S dW

这是一个随机微分方程。它的解析解是:

S(t) = S(0) * exp((μ - σ²/2)t + σ W(t))

我个人习惯把这个公式记成三部分:

  • S(0):初始价格,起点
  • exp((μ - σ²/2)t):确定性趋势,注意有个 σ²/2 的修正项
  • exp(σ W(t)):随机扰动,布朗运动驱动

为什么会有 σ²/2?我在项目中遇到过不少新手直接忽略这个修正项,结果模拟出来的期望值偏大。其实这是伊藤引理的结果,简单理解就是:波动本身会拖累价格的长期增长率。

4.3 参数估计:μ 和 σ 怎么算?

实际应用中,我们通常用历史数据来估计这两个参数。方法很简单:

  1. 计算每日对数收益率:r_i = ln(S_i / S_{i-1})
  2. 计算 r_i 的均值 μ_hat 和标准差 σ_hat
  3. 年化处理:μ_annual = μ_hat * 252,σ_annual = σ_hat * sqrt(252)

这里有个坑。我曾经用 5 年的日数据去估计某只股票的波动率,结果发现 σ 在不同时间段差异很大。后来我改用滚动窗口估计,才勉强捕捉到波动率的时变性。

注意:历史波动率是向后看的。用它预测未来,相当于开车只看后视镜。建议结合隐含波动率一起使用。

4.4 代码实现:模拟股票价格路径

下面是我常用的模拟代码。你直接复制就能跑:

import numpy as np
import matplotlib.pyplot as plt

def simulate_gbm(S0, mu, sigma, T, N, n_paths=10):
    """
    模拟几何布朗运动路径
    
    参数:
        S0: 初始价格
        mu: 年化收益率
        sigma: 年化波动率
        T: 时间长度(年)
        N: 时间步数
        n_paths: 模拟路径数
    """
    dt = T / N
    # 生成布朗运动增量
    dW = np.random.normal(0, np.sqrt(dt), (n_paths, N))
    # 计算价格路径
    S = np.zeros((n_paths, 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 * dW[:, t-1]
        )
    
    return S

# 示例:模拟苹果股票
S0 = 150.0      # 当前价格
mu = 0.12       # 预期年化收益 12%
sigma = 0.25    # 年化波动率 25%
T = 1.0         # 模拟 1 年
N = 252         # 每日数据

paths = simulate_gbm(S0, mu, sigma, T, N, n_paths=5)

# 画图
plt.figure(figsize=(10, 6))
for i in range(5):
    plt.plot(paths[i], lw=1.5, alpha=0.8)
plt.title('几何布朗运动模拟 - 5条路径')
plt.xlabel('交易日')
plt.ylabel('价格')
plt.grid(True, alpha=0.3)
plt.show()
小技巧:模拟时建议先用少量路径测试参数是否合理。我一般先跑 100 条路径,看看价格范围是否在可接受区间内。

4.5 几何布朗运动的局限性

任何模型都有假设,几何布朗运动也不例外。我总结了几条:

假设 现实问题 影响
波动率恒定 实际波动率会聚集 低估尾部风险
收益率正态分布 实际有尖峰厚尾 极端事件概率被低估
连续交易 市场有开盘收盘 跳跃风险被忽略
无交易成本 实际有滑点和手续费 高频策略失效

你想想看,如果这些假设都成立,那交易也太简单了。现实是,几何布朗运动只是一个起点。我在做统计套利时,通常用它做基准模型,然后加上跳跃扩散项或者随机波动率来改进。

4.6 在统计套利中的应用

几何布朗运动在统计套利里主要干两件事:

  • 生成模拟数据:测试配对交易策略时,用 GBM 生成合成价格序列
  • 计算理论价格:比如期权定价中的 Black-Scholes 模型就基于 GBM

我记得有一次做 ETF 配对交易,需要估计两个标的的协整关系。我先用 GBM 模拟了 10000 条路径,然后计算协整系数的分布。虽然最终实盘效果一般,但至少让我对参数的不确定性有了直观认识。

核心要点:几何布朗运动是股票价格建模的基石。它简单、直观、有解析解。但别把它当真理,它只是一个有用的近似。

好了,这一章就到这里。记住:模型是地图,不是 territory。用 GBM 做分析时,时刻问自己——如果现实偏离了假设,我的结论还站得住吗?

几何布朗运动知识体系 几何布朗运动 定义:dS/S = μdt + σdW 参数:μ 漂移率,σ 波动率 模拟:S(t)=S₀exp((μ-σ²/2)t+σW) 价格恒为正 对数正态分布 历史估计法 隐含波动率 蒙特卡洛模拟 应用:统计套利、期权定价、风险管理

公众号:蓝海资料掘金营,微信deep3321