Black-Scholes
Cholesky 分解降低了模擬維納過程/布朗運動的波動性
我正在嘗試模擬 $ n $ 給定指定相關矩陣的 相關幾何布朗運動 (GBM) $ \Sigma $ 按照這個使用 Cholesky 分解的過程。
但是,當我在 Python 中實現程式碼時,高度相關的程式碼之一( $ \rho=0.99 $ )維納過程幾乎沒有波動性,如下圖紅線所示。
我希望相關性 $ \rho=1 $ 暗示這兩個過程將是相同的,並且對於 $ \rho=-1 $ ,我希望“鏡子”在 0 左右。
該圖顯示了實現 $ W $ 穿過 $ t $ .
注意:在我的嘗試中,我盡量避免使用任何循環。
# PARAMETERS n = 2 # number of assets T = 5 # number of years N = 252 # number of steps pr. year (T) r = np.array([0.03, 0.03]) # drift-rate q = np.array([0.0, 0.0]) # divivend-rate S0 = np.array([1.0, 1.0]) # initial value sigma = np.array([0.2, 0.2]) # diffusion-coefficients corr_mat = np.array([[1.0, 0.99], [0.99, 1.0]]) # correlation-matrix # Calculate step size dt = 1 / (T * N) # Vector of time index t = np.array(range(N*T+1)).reshape((N * T + 1, 1)) * dt # == PERFORM SIMULATION == # Draw normal distributed random variables eps = np.random.normal(loc=0, scale=np.sqrt(dt), size=(N * T, n)) # Use Cholesky decomposition to get the matrix R satisfying: corr_mat = L x L^* L = np.linalg.cholesky(corr_mat) # Transform into realizations of correlated Wiener processes W = eps @ L # Calculate realizations of each stock as the realization of a GBM # S_t = S0 * exp{ ((r-q) - ½sigma)*dt + sigma * W} S = np.exp( (((r - q) - np.power(sigma, 2) / 2) * dt).T + W * sigma.T ) S = np.vstack([np.ones(S.shape[1]), S]) S = S0 * S.cumprod(axis=0)
修復以下部分
# Transform into realizations of correlated Wiener processes W = eps @ L.T
本來應該是
L @ z
wherez
是一個多元法線向量。由於每一行eps
都是這樣一個向量,eps @ L.T
是正確的。您將獲得如下所需的結果: