- Simulation of Brownian Motion
- Geometric Brownian Motion (GBM)
Simulation of Brownian Motion
模拟布朗运动和其他连续鞅
代码语言:javascript复制import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
import warnings
warnings.filterwarnings("ignore")
Brownian Motion
因为布朗运动每一个的增量都服从正态分布,因此可以直接生成。
代码语言:javascript复制plt.figure(figsize=(10, 4.5))
delta_t = 0.01
rd = np.cumsum(np.sqrt(delta_t) * np.random.randn(999))
rd = np.insert(rd, 0, 0)
t = np.arange(0, 10, 0.01)
plt.plot(t, rd);plt.title('标准布朗运动的轨道')
plt.show()
Geometric Brownian Motion (GBM)
几何布朗运动是如下SDE的解:,其中是布朗运动 给定初始值,有
给定不同的的值,模拟一条的轨道。,其中
代码语言:javascript复制plt.figure(figsize=(11, 17))
for i in range(4):
plt.subplot(4, 1, i 1)
mu, sigma = 0.1, 0.5
t = np.arange(0, 10, 0.01)
delta_t = 0.01
path = [10]
for i in range(1, t.size):
path.append(path[-1] mu * path[-1] * delta_t
sigma * path[-1] * np.sqrt(delta_t) * np.random.randn())
plt.plot(t, path, label=f'$mu={mu}, sigma={sigma}$')
plt.suptitle(f'$S_0=10, mu={mu}, sigma={sigma}$的几何布朗运动的轨道', y=0.91); plt.show()
代码语言:javascript复制plt.figure(figsize=(11, 17))
for i in range(4):
plt.subplot(4, 1, i 1)
mu, sigma = 0.5, 0.8
t = np.arange(0, 10, 0.01)
delta_t = 0.01
path = [10]
for i in range(1, t.size):
path.append(path[-1] mu * path[-1] * delta_t
sigma * path[-1] * np.sqrt(delta_t) * np.random.randn())
plt.plot(t, path, label=f'$mu={mu}, sigma={sigma}$')
plt.suptitle(f'$S_0=10, mu={mu}, sigma={sigma}$的几何布朗运动的轨道', y=0.91); plt.show()
通过这个轨道图,也容易看出,几何布朗运动是对股票价格的良好模拟,能代表CAMP模型中股票的期望收益率,而是股票风险的度量!
对于任意时间,是一个对数正态分布随机变量。(服从正态分布) 所以具有概率密度函数这意味着我们可以得到在任意时间上的分布
代码语言:javascript复制mu, sigma = 0.2, 0.8
t = np.arange(0, 1, 0.01)
delta_t = 0.01
distribution = []
for _ in range(10000):
path = [10]
for i in range(1, t.size):
path.append(path[-1] mu * path[-1] * delta_t
sigma * path[-1] * np.sqrt(delta_t) * np.random.randn())
distribution.append(path[-1])
代码语言:javascript复制sns.distplot(distribution, kde=False, norm_hist=True)
plt.title(f'$mu={mu}, sigma={sigma}, S_1$的分布')
plt.show()