Python代码:几何布朗运动 - 有什么不对?(Python Code: Geometric Br

2019-08-02 06:03发布

我是很新,Python,但在大学的论文中,我需要应用一些机型,采用最好的Python。 我花了几天与我连接的代码,但我真的不能帮,什么是错的,这不是创建一个随机过程,它看起来像带漂移标准的布朗运动。 像mu和sigma(预期收益或漂移和波动性),我的参数往往会改变什么,但噪声过程的斜率。 这是我的问题,这一切看起来像噪声。 希望我的问题是不够具体,这里是我的coode:

import math
from matplotlib.pyplot import *
from numpy import *
from numpy.random import standard_normal

'''
geometric brownian motion with drift!

Spezifikationen:

    mu=drift factor [Annahme von Risikoneutralitaet]
    sigma: volatility in %
    T: time span
    dt: lenght of steps
    S0: Stock Price in t=0
    W: Brownian Motion with Drift N[0,1] 
'''

T=1
mu=0.025
sigma=0.1
S0=20
dt=0.01

Steps=round(T/dt)

t=(arange(0, Steps))
x=arange(0, Steps)
W=(standard_normal(size=Steps)+mu*t)### standard brownian motion###
X=(mu-0.5*sigma**2)*dt+(sigma*sqrt(dt)*W) ###geometric brownian motion####
y=S0*math.e**(X)

plot(t,y)

show()

Answer 1:

根据维基百科 ,

所以看来

X=(mu-0.5*sigma**2)*t+(sigma*W) ###geometric brownian motion#### 

而不是

X=(mu-0.5*sigma**2)*dt+(sigma*sqrt(dt)*W)

由于T代表的时间跨度,我觉得t应该是

t = np.linspace(0, T, N)

现在,根据这些Matlab的例子( 这里和这里 ),它出现

W = np.random.standard_normal(size = N) 
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###

不,

W=(standard_normal(size=Steps)+mu*t)

请检查数学,不过,我可能是错的。


所以,把他们放在一起:

import matplotlib.pyplot as plt
import numpy as np

T = 2
mu = 0.1
sigma = 0.01
S0 = 20
dt = 0.01
N = round(T/dt)
t = np.linspace(0, T, N)
W = np.random.standard_normal(size = N) 
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
X = (mu-0.5*sigma**2)*t + sigma*W 
S = S0*np.exp(X) ### geometric brownian motion ###
plt.plot(t, S)
plt.show()

产量



Answer 2:

采用高斯定律的参数化的另外的实施虽然正常fonction(而不是standard_normal),有点短。

import numpy as np

T = 2
mu = 0.1
sigma = 0.01
S0 = 20
dt = 0.01
N = round(T/dt)
# reversely you can specify N and then compute dt, which is more common in financial litterature

X = np.random.normal(mu * dt, sigma* np.sqrt(dt), N)
X = np.cumsum(X)
S = S0 * np.exp(X)


文章来源: Python Code: Geometric Brownian Motion - what's wrong?