这里有一些代码的重新编写,可以使S的符号更直观,并允许您检查答案的合理性。
起始点:在代码中,第二个deltat应该替换为np.sqrt(deltat)。Sourcehere(是的,我知道这不是最官方的,但下面的结果应该让人放心)。
关于短期利率和西格玛值的非年度化的评论可能不正确。这与你看到的向下漂移无关。你需要保持这些年利率。这些将始终是连续复合(恒定)速率。
首先,这里是一个GBM路径生成函数,它来自Yves Hilpisch-Python for Finance,chapter 11。链接中解释了这些参数,但设置与您的非常相似。
def gen_paths(S0, r, sigma, T, M, I):
dt = float(T) / M
paths = np.zeros((M + 1, I), np.float64)
paths[0] = S0
for t in range(1, M + 1):
rand = np.random.standard_normal(I)
paths[t] = paths[t - 1] * np.exp((r - 0.5 * sigma ** 2) * dt +
sigma * np.sqrt(dt) * rand)
return paths
设置初始值(但使用N=252,一年中的交易日数作为时间增量):S0 = 100.
K = 100.
r = 0.05
sigma = 0.50
T = 1