看来X=(mu-0.5*sigma**2)*t+(sigma*W) ###geometric brownian motion####
而不是X=(mu-0.5*sigma**2)*dt+(sigma*sqrt(dt)*W)
因为T代表时间范围,我认为t应该是t = np.linspace(0, T, N)
现在,根据这些Matlab示例(here和here),它出现了W = np.random.standard_normal(size = N)
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
不是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()
收益率