9

私は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()
4

2 に答える 2

22

ウィキペディアによると、

ここに画像の説明を入力してください

だから、

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()

収量

ここに画像の説明を入力してください

于 2012-11-02T21:19:40.733 に答える
0

ガウスの法則のパラメーター化を使用した追加の実装ですが、(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)
于 2017-11-01T12:28:11.370 に答える