1. 随机漫步与布朗运动:从物理直觉到数学定义

做量化这些年,我越来越觉得布朗运动是个神奇的东西。它看起来杂乱无章,却藏着金融市场的底层密码。今天我们就从最直观的物理图像出发,一步步把它变成严谨的数学工具。

1.1 物理直觉:花粉为什么会跳舞?

1827年,植物学家布朗在显微镜下观察花粉颗粒。他本来想看细胞结构,结果发现花粉在水里不停地抖动,像喝醉了酒一样。这就是布朗运动的由来。

为什么会这样?说白了,水分子在不停地撞击花粉颗粒。每个水分子撞一下,花粉就动一下。你想想看,每秒有数亿次撞击,花粉的运动轨迹自然就变得毫无规律。

我刚开始学这个的时候,总觉得这跟股票走势有点像。后来做量化回测,发现还真有相通之处——市场里无数交易者的买卖行为,就像水分子撞击花粉一样,形成了价格的随机波动。

1.2 数学定义:从离散到连续

1900年,巴舍利耶把布朗运动用到了期权定价上。但真正给出严格数学定义的,是维纳。所以我们也叫它维纳过程。

先看离散版本。假设一个粒子在直线上随机游走:

import numpy as np
import matplotlib.pyplot as plt

def random_walk(steps=1000):
    # 每一步等概率向左或向右
    steps_direction = np.random.choice([-1, 1], size=steps)
    position = np.cumsum(steps_direction)
    return position

# 模拟三条路径
for i in range(3):
    path = random_walk(1000)
    plt.plot(path, label=f'路径{i+1}')
plt.legend()
plt.title('离散随机游走')
plt.show()

嗯,这里要注意。离散随机游走的时间步长是固定的,但布朗运动是连续时间的。怎么从离散到连续?

我们把时间间隔 Δt 无限缩小,步长也相应调整。数学上,布朗运动 B(t) 满足三个条件:

  1. B(0) = 0:从原点出发
  2. 独立增量:不同时间段的运动互不影响
  3. 正态增量:B(t) - B(s) ~ N(0, t-s)

核心理解:布朗运动的增量服从正态分布,方差等于时间间隔。这意味着时间越长,不确定性越大。

1.3 三大性质:为什么布朗运动如此特别?

我在项目中遇到过一个问题:用布朗运动模拟股价时,发现路径太"光滑"了。后来才意识到,布朗运动其实处处不可导。这就是它的第一个性质。

性质一:处处连续,处处不可导

布朗运动的路径是连续的,但你在任何一点都找不到切线。为什么?因为它的变化太快了。在任意小的时间区间内,它的变化幅度跟时间开平方成正比。

你想想看,如果 Δt 是 0.0001 秒,变化幅度大约是 0.01。导数要求 Δt 趋近于0时,变化率趋近于某个值。但布朗运动的变化率是发散的,所以导数不存在。

避坑指南:我曾经用普通微积分去处理布朗运动,结果算出来的结果全是错的。后来才明白,布朗运动不能用常规的微分规则,得用伊藤引理。

性质二:二次变分非零

这个性质很关键。普通光滑函数的二次变分是0,但布朗运动的二次变分是t。什么意思?

简单说,你把布朗运动的路径切成无数小段,每段的变化平方加起来,结果不是0,而是时间t本身。这直接导致了伊藤引理中那个额外的二次项。

函数类型 一次变分 二次变分
光滑函数 有限 0
布朗运动 无限 t

性质三:马尔可夫性

布朗运动的未来只取决于现在,跟过去无关。这就是马尔可夫性。做量化的人特别喜欢这个性质,因为它让建模变得简单。

我记得有一次做高频策略,有人想用过去一小时的价格走势预测未来。我直接告诉他:如果市场是有效的,价格走势近似布朗运动,那过去的信息已经全部反映在当前价格里了。预测?基本没戏。

1.4 知识体系:一张图看懂

下面这张图总结了布朗运动的核心逻辑。从物理直觉出发,经过数学抽象,最终落到量化应用上。

布朗运动知识体系 物理直觉 花粉颗粒随机运动 水分子撞击驱动 数学定义 B(0)=0 独立增量 + 正态增量 三大性质 处处连续不可导 二次变分非零 马尔可夫性 量化应用 期权定价 · 风险管理 · 策略回测 伊藤引理 处理布朗运动的微分规则

1.5 代码实战:验证布朗运动的性质

光说不练假把式。我们来写段代码,验证一下布朗运动的二次变分性质。

import numpy as np

def quadratic_variation(path):
    """计算布朗运动路径的二次变分"""
    increments = np.diff(path)
    return np.sum(increments ** 2)

# 模拟一条布朗运动路径
np.random.seed(42)
n = 10000
dt = 1.0 / n
B = np.random.normal(0, np.sqrt(dt), n)
B = np.cumsum(B)

# 计算二次变分
qv = quadratic_variation(B)
print(f"二次变分: {qv:.4f}")
print(f"理论值 (t=1): {1.0:.4f}")

# 试试不同分辨率
for n in [100, 1000, 10000]:
    dt = 1.0 / n
    B = np.random.normal(0, np.sqrt(dt), n)
    B = np.cumsum(B)
    qv = quadratic_variation(B)
    print(f"n={n:5d}, 二次变分={qv:.4f}")

运行结果会告诉你,不管你怎么加密时间网格,二次变分始终稳定在1附近。这就是布朗运动的独特之处。

注意:布朗运动是理想化的数学模型。真实金融市场有跳跃、有自相关性,不完全符合布朗运动的假设。但作为基础工具,它依然是量化分析的起点。

好了,这一章我们建立了布朗运动的直觉和数学框架。下一章我们会看到,为什么普通微积分在这里失效,以及伊藤引理是如何解决这个问题的。

专注资料整理