Black-Scholes

Cholesky 分解降低了模擬維納過程/布朗運動的波動性

  • June 7, 2022

我正在嘗試模擬 $ 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 @ zwherez是一個多元法線向量。由於每一行eps都是這樣一個向量,eps @ L.T是正確的。

您將獲得如下所需的結果:

在此處輸入圖像描述

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