2013-05-24 23 views
7

Próbuję szybko stworzyć symulowaną losową serię walk w pandach.Losowe spacery pandy

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 

chciałby zbudować kolejną serię data rozpoczęcia w Cena_wyjściowa na początek datę i rośnie przez przypadkowych stóp wzrostu. Kod pseudo:

P0 = 100 
P1 = 100 * exp(Y2) 
P2 = P1 * exp(Y2) 

bardzo łatwe do zrobienia w programie Excel, ale nie mogę myśleć o sposób to zrobić bez iteracja nad dataframe/seria z pand i ja też wpadać moja głowa robi.

próbowali:

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

to powinno dać narastająco związek zwrot od momentu włączenia

Odpowiedz

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