前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模拟布朗运动

模拟布朗运动

作者头像
用户3577892
发布2020-06-11 09:29:46
1.3K0
发布2020-06-11 09:29:46
举报
文章被收录于专栏:数据科学CLUB数据科学CLUB
  • 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()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学CLUB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Simulation of Brownian Motion
    • Brownian Motion
      • Geometric Brownian Motion (GBM)
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档