布朗運動

為什麼在模擬幾何布朗運動時會出現這種差異?

  • January 21, 2020

我嘗試使用 SDE 定義和封閉形式解決方案來模擬 GBM。我通過這些方法獲得的路徑非常不同。有人可以幫我弄清楚我的錯誤嗎?在此處輸入圖像描述

import numpy as np
import matplotlib.pyplot as mp
import statsmodels.api as sm

time_step = 1e-6
N = 30000

np.random.seed(987654321)
A = np.zeros((N,1))
A[0] = 2
B = np.zeros((N,1))
B[0] = 2
volvol = 40.0

s = np.sqrt(time_step)

y = np.exp(-volvol**2.0/2 * time_step + volvol * s * np.random.normal(0, 1, N))
y1 = np.random.normal(0, s, N)

for i in np.arange(1, N, 1):
  A[i] = A[i-1] * y[i]

for i in np.arange(1, N, 1):
   print(B)
   dB = volvol * B[i - 1] * y1[i]
   B[i] = B[i-1]+ dB

mp.plot(A, label = 'exp')
mp.plot(B, label = 'SDE')

mp.legend(loc='lower right', ncol=1, fancybox=True, shadow=True, prop={'size': 6})
mp.grid()
mp.show()[![enter image description here][1]][1]

以下是您需要在程式碼中更正的內容:

儘管您正在設置種子,但您會生成兩次隨機數,因此它們並不相同。嘗試這個:

rand = np.random.randn(N)
y = np.exp(-volvol**2.0/2 * time_step + volvol * s * rand)
y1 = rand

您還需要將 sigma 乘以 SDE 版本中時間步長的平方根:

dB = volvol * B[i-1] * y1[i] * s

這應該足以獲得相同的結果。

除此之外,您的波動率為 4000%。sigma 應該是0.4而不是40.0

引用自:https://quant.stackexchange.com/questions/50780