布朗運動
為什麼在模擬幾何布朗運動時會出現這種差異?
我嘗試使用 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
。