随机过程与金融建模
一、随机过程的基本概念
1. 布朗运动(Brownian Motion)
- 定义:
布朗运动(Wiener 过程)是一种连续时间随机过程,通常用 W ( t ) W(t) W(t) 表示,其基本性质包括:- W ( 0 ) = 0 W(0)=0 W(0)=0;
- 对于任意 0 ≤ t 1 < t 2 < ⋯ < t n 0 \le t_1 < t_2 < \cdots < t_n 0≤t1<t2<⋯<tn,增量 W ( t i + 1 ) − W ( t i ) W(t_{i+1})-W(t_i) W(ti+1)−W(ti) 彼此独立;
- 每个增量
W
(
t
+
Δ
t
)
−
W
(
t
)
W(t+\Delta t)-W(t)
W(t+Δt)−W(t) 服从正态分布,均值为 0,方差为
Δ
t
\Delta t
Δt,即
W ( t + Δ t ) − W ( t ) ∼ N ( 0 , Δ t ) W(t+\Delta t)-W(t) \sim N(0, \Delta t) W(t+Δt)−W(t)∼N(0,Δt)
2. 泊松过程(Poisson Process)
- 定义:
泊松过程是一种描述单位时间内事件发生次数的随机过程,常用 N ( t ) N(t) N(t) 表示。其基本性质包括:- N ( 0 ) = 0 N(0)=0 N(0)=0;
- 增量
N
(
t
+
Δ
t
)
−
N
(
t
)
N(t+\Delta t)-N(t)
N(t+Δt)−N(t) 服从参数为
λ
Δ
t
\lambda \Delta t
λΔt 的泊松分布,即
P ( N ( t + Δ t ) − N ( t ) = k ) = ( λ Δ t ) k k ! e − λ Δ t P(N(t+\Delta t)-N(t)=k)=\frac{(\lambda\Delta t)^k}{k!} e^{-\lambda\Delta t} P(N(t+Δt)−N(t)=k)=k!(λΔt)ke−λΔt - 各个不相交时间区间内事件发生次数相互独立。
注:在金融建模中,泊松过程常用于描述跳跃风险或突发事件,而布朗运动则是最常用的连续随机过程。
二、Geometric Brownian Motion (GBM) 与股票价格建模
1. GBM 模型介绍
-
模型形式:
在金融中,常用几何布朗运动(Geometric Brownian Motion, GBM)来描述股票价格 S ( t ) S(t) S(t) 的演变,其随机微分方程(SDE)为:
d S ( t ) = μ S ( t ) d t + σ S ( t ) d W ( t ) dS(t) = \mu S(t) \, dt + \sigma S(t) \, dW(t) dS(t)=μS(t)dt+σS(t)dW(t)
其中:- μ \mu μ 是股票的漂移率(预期收益率),
- σ \sigma σ 是股票价格的波动率,
- W ( t ) W(t) W(t) 为标准布朗运动。
-
解析解:
利用伊藤引理可得 GBM 的解析解为:
S ( t ) = S ( 0 ) exp { ( μ − σ 2 2 ) t + σ W ( t ) } S(t) = S(0) \exp\left\{ \left(\mu - \frac{\sigma^2}{2}\right)t + \sigma W(t) \right\} S(t)=S(0)exp{(μ−2σ2)t+σW(t)}
这表明股票价格是指数形式变化,随机性来源于布朗运动 W ( t ) W(t) W(t)。
2. 随机微分方程(SDE)
- 定义:
随机微分方程(Stochastic Differential Equation, SDE)是一类用来描述受随机扰动的动态系统的微分方程。上式就是一个典型的 SDE,用于描述金融资产价格的随机演变。 - 数值求解方法:
常用的数值方法包括欧拉-马尔科夫(Euler–Maruyama)方法,其离散化公式对于 GBM 为:
S t + Δ t = S t + μ S t Δ t + σ S t Δ t ε S_{t+\Delta t} = S_t + \mu S_t \Delta t + \sigma S_t \sqrt{\Delta t}\, \varepsilon St+Δt=St+μStΔt+σStΔtε
其中 ε ∼ N ( 0 , 1 ) \varepsilon \sim N(0,1) ε∼N(0,1)。
三、案例分析与计算过程
案例:利用 GBM 模型模拟股票价格变化
假设参数:
- 初始股票价格: S ( 0 ) = 100 S(0) = 100 S(0)=100 美元
- 漂移率: μ = 0.1 \mu = 0.1 μ=0.1(10% 年收益率)
- 波动率: σ = 0.2 \sigma = 0.2 σ=0.2(20% 年波动率)
- 模拟时长: T = 1 T = 1 T=1 年
- 时间步长: Δ t = 1 252 \Delta t = \frac{1}{252} Δt=2521(假设一年 252 个交易日)
计算步骤:
- 离散化时间区间:
将 1 年分成 252 个时间步,每步 Δ t ≈ 0.00397 \Delta t \approx 0.00397 Δt≈0.00397 年。 - 生成标准正态随机数:
对于每一步生成独立的 ε ∼ N ( 0 , 1 ) \varepsilon \sim N(0,1) ε∼N(0,1)。 - 迭代更新股票价格:
采用欧拉-马尔科夫方法:
S t + Δ t = S t + μ S t Δ t + σ S t Δ t ε S_{t+\Delta t} = S_t + \mu S_t \Delta t + \sigma S_t \sqrt{\Delta t}\, \varepsilon St+Δt=St+μStΔt+σStΔtε
或者直接利用 GBM 的解析解:
S ( t ) = 100 × exp { ( 0.1 − 0. 2 2 2 ) t + 0.2 W ( t ) } S(t) = 100 \times \exp\left\{ \left(0.1 - \frac{0.2^2}{2}\right)t + 0.2\, W(t) \right\} S(t)=100×exp{(0.1−20.22)t+0.2W(t)}
其中 W ( t ) W(t) W(t) 可由累加生成的正态随机变量构成,满足 W ( t + Δ t ) = W ( t ) + Δ t ε W(t+\Delta t) = W(t) + \sqrt{\Delta t}\, \varepsilon W(t+Δt)=W(t)+Δtε。
计算示例结果:
由于涉及随机性,每次模拟结果不同。例如一次模拟可能得到股票价格在 1 年末约为 115 美元,但结果需要通过多次运行统计分布。
四、课堂活动
活动目的:
- 通过 Python 编程模拟 GBM 模型,直观观察股票价格的随机演变。
- 分析不同参数(如波动率 σ \sigma σ 与漂移率 μ \mu μ)对股票价格走势的影响。
- 讨论随机过程在金融市场中的实际应用,如波动率建模和风险管理。
活动安排:
- 模拟任务:
学生需编写 Python 代码模拟股票价格路径,并绘制股票价格随时间的变化图。 - 计算过程讨论:
- 讨论欧拉-马尔科夫方法的步骤和参数选择。
- 分析模拟结果:例如,多次模拟后观察股票价格的分布、平均值与标准差。
- 讨论实际应用:
- 讨论 GBM 模型的局限性与改进,如在波动率建模中加入跳跃项、随机波动率等。
五、Python 代码实现示例
以下给出一个利用 Python 模拟单条股票价格路径的代码示例,同时绘制出股票价格随时间变化的图表:
import numpy as np
import matplotlib.pyplot as plt
# 参数设置
S0 = 100 # 初始股票价格
mu = 0.1 # 漂移率(年收益率10%)
sigma = 0.2 # 波动率(20%)
T = 1.0 # 模拟时长(1年)
N = 252 # 时间步数(交易日数)
dt = T / N # 时间步长
# 时间向量
t = np.linspace(0, T, N+1)
# 初始化股票价格数组
S = np.zeros(N+1)
S[0] = S0
# 模拟标准布朗运动增量:epsilon ~ N(0,1)
np.random.seed(42) # 为可重复性设定随机种子
epsilon = np.random.normal(0, 1, N)
# 采用欧拉-马尔科夫方法更新股票价格
for i in range(1, N+1):
S[i] = S[i-1] + mu * S[i-1] * dt + sigma * S[i-1] * np.sqrt(dt) * epsilon[i-1]
# 或者直接采用 GBM 的解析解(累加布朗运动)
# 计算 W(t)
W = np.concatenate(([0], np.cumsum(np.sqrt(dt) * epsilon)))
S_analytic = S0 * np.exp((mu - 0.5 * sigma**2) * t + sigma * W)
# 绘制结果
plt.figure(figsize=(10, 6))
plt.plot(t, S, label="Euler-Maruyama 模拟", lw=2)
plt.plot(t, S_analytic, label="解析解模拟", lw=2, linestyle='--')
plt.title("Geometric Brownian Motion 模拟股票价格")
plt.xlabel("时间 (年)")
plt.ylabel("股票价格")
plt.legend()
plt.grid(True)
plt.show()
# 打印最终股票价格(例如 1 年末价格)
print("1 年末模拟股票价格 (Euler-Maruyama) = {:.2f}".format(S[-1]))
print("1 年末模拟股票价格 (解析解) = {:.2f}".format(S_analytic[-1]))
代码说明:
- 我们设定初始股票价格为 100 美元,年收益率 10%,波动率 20%,一年 252 个交易日。
- 使用欧拉-马尔科夫方法模拟股票价格路径,同时给出基于 GBM 解析解的结果进行对比。
- 绘制的图表展示了股票价格随时间的变化趋势,并打印出一年末的股票价格。
六、总结与讨论
- 随机过程基本概念:
- 介绍了布朗运动和泊松过程的基本定义及其在金融建模中的作用。
- GBM 模型及 SDE:
- 阐明了几何布朗运动的数学形式、解析解及其应用,说明了如何用随机微分方程描述股票价格演变。
- 模拟与应用:
- 通过 Python 编程示例,让学生直观地观察股票价格的随机路径,并讨论不同参数对价格波动的影响。
- 课堂讨论:
- 分析随机过程在波动率建模、风险管理等金融应用中的重要性,探讨 GBM 模型的局限性和扩展方向(如跳跃扩散模型)。
通过本课学习,不仅掌握了随机过程与金融建模的基本理论,还通过实际编程和案例分析,理解了如何利用 GBM 模型描述和模拟股票价格的随机演变,为后续更复杂的金融工程建模打下坚实基础。