2012-11-02 3 views
8

저는 파이썬을 처음 접했지만 대학의 한 논문에서 필자는 파이썬을 사용하여 일부 모델을 적용해야합니다. 내가 첨부 한 코드로 며칠을 보냈지만, 정말 도움이되지 못합니다. 무엇이 잘못 되었나요, 드리프트가있는 표준 갈색 운동처럼 보이는 임의의 프로세스를 생성하지 않습니다. 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() 
+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 이후

, 나는 그것이

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

하지 나타납니다 이들의 MATLAB 예 (herehere)에 따라, t 지금

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

해야한다고 생각하는 시간 수평선을 나타냅니다 ,

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

enter image description here

+0

남자, 당신보다 훨씬 빨리 연구하겠습니다. +1 – RocketDonkey

+0

ㅎ, 고맙습니다. – unutbu

+0

글쎄, 문학에 따르면 제 수식 이었지만이 방법이 훨씬 나아졌습니다. 덕분에 많이 받았습니다! 연속 동작과 유사하게 보이도록 단계를 늘릴 수있는 방법이 있습니까? 단계를 늘리면 exp-funktion이 주가에 막대한 가치를 창출합니다 –

0

가우스 법의 매개 변수화를 사용하여 추가 구현을 산출하지만 일반 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) 
+0

당신이 무엇을 요구하고 있는지 완전히 불분명합니다. 귀하가 알고 싶은 것을 찾기 위해 필요한 조사 노력이 없도록 귀하의 질문을 개선하십시오. – Vroomfondel

+0

아무것도 묻지 않고, 다른 방법을 제안하고 있습니다. – Thabris

+0

죄송합니다. 그래서 검토를 위해이 사실을 알려 주었고, 나는 이것이 질문이라는 인상 아래에있었습니다. 나는 얼굴을 붉게하는 대답 *을 다시 검토하고 있다는 것을 이해하지 못했습니다. - 죄송합니다. 다음에 두 번 보일 것입니다. – Vroomfondel