第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 知识体系结构图
下面我用一张图来总结本章的核心逻辑:
2.5 实战中的避坑指南
最后,分享几个我在实际项目中踩过的坑:
- 步长选择要匹配时间尺度:用日数据模拟时,步长代表日收益率的标准差。别拿周波动率去模拟日数据,那会失真。
- 路径数量要足够多:我刚开始做蒙特卡洛模拟时,只跑了100条路径,结果统计结果波动很大。后来我习惯至少跑10000条,才能得到稳定的统计量。
- 注意边界效应:随机游走没有上下限,但真实价格有涨跌停限制。如果你模拟的是A股,记得加上边界条件。
好了,这一章就到这里。随机游走虽然简单,但它是理解更复杂模型的基础。下一章我们会在这个基础上加入漂移项,看看如何模拟有趋势的价格走势。
公众号:蓝海资料掘金营,微信deep3321