2013-05-24 2 views
7

팬더에서 시뮬레이션 된 랜덤 워크 시리즈를 빠르게 만들려고합니다.랜덤 워크 팬더

import pandas as pd 
import numpy as np 
dates = pd.date_range('2012-01-01', '2013-02-22') 
y2 = np.random.randn(len(dates))/365 
Y2 = pd.Series(y2, index=dates) 
start_price = 100 

은 시작일에 start_price에서 시작하여 임의의 증가율로 증가하는 다른 날짜 계열을 작성하려고합니다. 의사 코드 :

Excel에서 아주 쉽게 할 수
P0 = 100 
P1 = 100 * exp(Y2) 
P2 = P1 * exp(Y2) 

,하지만 난 팬더와 dataframe/일련의 반복과 나는 또한 내 머리가 그렇게 범프없이 그것을하는 방법을 생각하지 못할.

이 시도 :이 시작

답변

11
import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 

def geometric_brownian_motion(T = 1, N = 100, mu = 0.1, sigma = 0.01, S0 = 20):   
    dt = float(T)/N 
    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 ### 
    return S 

dates = pd.date_range('2012-01-01', '2013-02-22') 
T = (dates.max()-dates.min()).days/365 
N = dates.size 
start_price = 100 
y = pd.Series(
    geometric_brownian_motion(T, N, sigma=0.1, S0=start_price), index=dates) 
y.plot() 
plt.show() 

enter image description here

이후 누적 화합물 수익을 제공한다

p = Y2.apply(np.exp)-1 
y = p.cumsum(p) 
y.plot()