第2章:随机游走——离散时间下的价格模拟

各位好,欢迎来到第二章。

上一章我们聊了布朗运动的基本概念。说实话,那个连续时间的模型虽然漂亮,但在实际交易中,我们拿到的数据都是离散的——每分钟、每小时、每天的价格。所以这一章,我们来聊聊更贴近实战的东西:随机游走

我个人习惯把随机游走叫做「离散版的布朗运动」。你想想看,真实世界里哪有什么连续路径?都是一个个离散的脚印。

2.1 随机游走的定义

随机游走,说白了就是一个粒子在一条直线上,每一步随机向左或向右移动。在金融里,我们用它来模拟价格的变化。

数学上,一个简单的随机游走可以这样定义:

S₀ = 0  (初始位置)
Sₜ = Sₜ₋₁ + εₜ  (每一步加上一个随机扰动)

其中 εₜ 是独立同分布的随机变量,通常取 +1 或 -1,概率各为 0.5。

嗯,这里要注意:每一步的移动是独立的。这意味着过去的价格变化不影响未来的变化方向。这个假设在金融里争议很大,但作为入门模型,它足够好用。

核心要点:

  • 随机游走是马尔可夫过程——未来只取决于现在,与过去无关
  • 每一步的增量是独立同分布的
  • 期望值为零,方差随时间线性增长

2.2 随机游走与布朗运动的关系

这两者到底是什么关系?我直接说结论:布朗运动是随机游走在时间间隔趋近于零时的极限

你想想看,如果我们把随机游走的步长缩小、步频加快,会发生什么?

特征 随机游走(离散) 布朗运动(连续)
时间 离散:t = 0, 1, 2, ... 连续:t ∈ [0, ∞)
步长 固定大小(如 ±1) 无穷小增量
路径 锯齿状,不连续 连续但处处不可导
方差 σ²·n(n为步数) σ²·t

我在项目中遇到过一个问题:用随机游走模拟价格时,步长选多大合适?后来我发现,步长决定了波动率的尺度。如果你用日数据,步长应该对应日波动率;如果用分钟数据,步长要相应缩小。

避坑指南:我曾经在模拟期权定价时,直接用随机游走替代布朗运动,结果发现价格路径的波动率对不上。后来才意识到,需要根据时间步长调整步长大小,才能让离散模型收敛到连续模型。

2.3 Python实现简单随机游走

好了,理论说完了,我们来写代码。我个人习惯用 NumPy 来做这类模拟,效率高、代码简洁。

import numpy as np
import matplotlib.pyplot as plt

def simple_random_walk(steps=1000, p=0.5):
    """
    生成简单随机游走路径
    
    参数:
        steps: 步数
        p: 向上移动的概率
    
    返回:
        positions: 每一步的位置数组
    """
    # 生成随机步长:+1 或 -1
    increments = np.where(np.random.rand(steps) < p, 1, -1)
    # 累积求和得到位置
    positions = np.cumsum(increments)
    # 加上初始位置 0
    positions = np.concatenate(([0], positions))
    
    return positions

# 生成一条路径
path = simple_random_walk(steps=500)
print(f"最终位置: {path[-1]}")
print(f"路径标准差: {np.std(path):.2f}")

运行这段代码,你会看到每次结果都不一样。这就是随机性的魅力——也是金融市场的残酷现实。

我们还可以生成多条路径,看看它们的统计特性:

def multiple_walks(n_paths=100, steps=500):
    """生成多条随机游走路径"""
    paths = np.zeros((n_paths, steps + 1))
    
    for i in range(n_paths):
        paths[i] = simple_random_walk(steps)
    
    return paths

# 生成100条路径
paths = multiple_walks(100, 500)

# 计算均值和方差
mean_path = np.mean(paths, axis=0)
var_path = np.var(paths, axis=0)

print(f"终点均值: {mean_path[-1]:.2f} (理论值: 0)")
print(f"终点方差: {var_path[-1]:.2f} (理论值: {500})")

你会发现,路径越多,均值越接近0,方差越接近步数。这就是大数定律在起作用。

注意:随机游走的方差随时间线性增长。这意味着价格的不确定性会越来越大。如果你用随机游走做长期预测,置信区间会宽得吓人。这也是为什么长期股价预测基本不靠谱的原因之一。

2.4 知识体系结构图

下面我用一张图来总结本章的核心逻辑:

随机游走知识体系 随机游走 定义 Sₜ = Sₜ₋₁ + εₜ 与布朗运动的关系 离散 → 连续极限 Python实现 NumPy + 可视化 独立增量 马尔可夫性 方差线性增长 Var(Sₜ) = t 步长→0 频率→∞ 收敛到布朗运动 Donsker定理 单条路径 np.cumsum 多条路径 统计验证 核心:离散时间下的价格模拟基础模型

2.5 实战中的避坑指南

最后,分享几个我在实际项目中踩过的坑:

  • 步长选择要匹配时间尺度:用日数据模拟时,步长代表日收益率的标准差。别拿周波动率去模拟日数据,那会失真。
  • 路径数量要足够多:我刚开始做蒙特卡洛模拟时,只跑了100条路径,结果统计结果波动很大。后来我习惯至少跑10000条,才能得到稳定的统计量。
  • 注意边界效应:随机游走没有上下限,但真实价格有涨跌停限制。如果你模拟的是A股,记得加上边界条件。

好了,这一章就到这里。随机游走虽然简单,但它是理解更复杂模型的基础。下一章我们会在这个基础上加入漂移项,看看如何模拟有趋势的价格走势。


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