Случайная прогулка панд
Я пытаюсь быстро создать серию имитируемых случайных блужданий в пандах.
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 в начальную дату и растущий случайными темпами роста. псевдокод:
P0 = 100
P1 = 100 * exp(Y2)
P2 = P1 * exp(Y2)
это очень легко сделать в Excel, но я не могу придумать, как это сделать, не перебирая кадры / ряды с пандами, и я тоже бьюсь над этим.
пытался:
p = Y2.apply(np.exp)-1
y = p.cumsum(p)
y.plot()
это должно дать совокупный доход с начала
1 ответ
Решение
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()