Ich versuche, Code für eine geometrische Brownsche Bewegung mit Daten anstelle von zufällig generierten Zahlen basierend auf 0 zu schreiben. Die Daten werden entweder als Pandas -Serie oder als Numpy Array eingeleitet. Egal welchen Datensatz ich den Code füttere, ich bekomme immer wieder NP.comPlex128 (0J) als die letzten paar tausend Variablen im Array. Es soll randomisiert werden, also sollte es nicht weiter zu 0 zurückkehren. Wo ist der Fehler in meinem Code oder in Mathematik? < /P>
Code: Select all
def geometric_brownian_motion(data):
mu = data.mean()
sigma = data.std()
S0 = data[len(data) - 1]
T = 1
dt = T / len(data)
n = len(data)
t = np.linspace(0, T, n)
W = np.random.standard_normal(size=n)
S = []
S.append(S0)
for i in range(1, n):
S_temp = S[0] * np.exp((mu - 0.5 * sigma ** 2) * dt + sigma * np.sqrt(dt) * W[i - 1])
S.append(S_temp)
S = np.array(S)
return S