2012-11-02 19 views
8

私はPythonにはまだまだ慣れていませんが、大学の論文では、いくつかのモデルを適用する必要があります。私は添付したコードで数日を過ごしましたが、私は本当に助けができません。何が間違っていますか、ドリフトを伴う標準的なブラウン運動のようなランダムなプロセスを作りません。 muやsigma(予想されるリターンやドリフト、ボラティリティ)のような私のパラメータは、ノイズプロセスの傾きだけを変える傾向があります。それは私の問題です、それはすべて雑音のように見えます。私の問題は十分に特定であると思い、ここに私のcoodeは次のとおりです。Pythonコード:幾何ブラウン運動 - 何が問題なの?

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

コードを読み取り可能にしてください。 – Mikhail

+0

@RocketDonkeyを編集していただきありがとうございます –

+0

問題はありません:) – RocketDonkey

答えて

15

Wikipediaによると、

enter image description here

だから、その

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の例(herehere)によると、それはない

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

を表示されます、

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

数学を確認してください。ただし、間違っている可能性があります。 (代わりにstandard_normalの)通常のfonctionもののガウスの法則のパラメータ化を使用して

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

利回り

enter image description here

+0

人よりもはるかに速く研究しています:) +1 – RocketDonkey

+0

こんにちは、@RocketDonkeyに感謝します。 – unutbu

+0

ああ、文献によると、それは私の処方だったが、この方法ではもっと良く見えた、ありがとう!連続的な動きのように見せるためにステップを増やす方法はありますか?ステップを増やせば、exp-funktionは株価のために莫大な価値を生みます –

0

追加実装を:すべて一緒にそれを置く

ので

、 、もう少し短いです。

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) 
+0

あなたが何を求めているかは完全には不明です。あなたが知りたいことを見つけるために必要な調査努力がないように、あなたの質問を改善してください。 – Vroomfondel

+0

何も質問していない、ちょうど別のやり方を提案している – Thabris

+0

申し訳ありません、私はこれをレビューのために提示しました。私はこれが質問だったという印象を受けました。私は答えを洗っていることを理解していなかった*顔を白くする* - 再び申し訳ありませんが、次回は2回見えます。 – Vroomfondel

関連する問題