模擬風險價值噸tt分佈式回報
我想了解風險價值以及如何使用簡單的蒙地卡羅方法模擬 VaR。但我只想要一個確認,歡迎任何評論,因為我沒有這個計算的全貌。
假設我有一個年度資產,有一段保證金風險:
library(quantmod) getSymbols("WILL5000IND",src="FRED") wilsh <- na.omit(WILL5000IND) wilsh <- wilsh["2016-01-01/2016-12-31"] names(wilsh) <- "TR" y = wilsh n=length(y) logret <- diff(log(wilsh))[-1]
現在我計算經驗VaR $ \alpha = 0.05 $
alpha <- 0.05 rvec <- as.vector(logret) quantile(rvec,alpha)
結果:
5% -0.01253343
將數據擬合到一個 $ t $ -分佈並通過最大概似法計算參數為:
t.fit <- fitdistr(rvec, "t") round(t.fit$estimate,6) mu = t.fit$estimate[1] sd = t.fit$estimate[2] df = t.fit$estimate[3]
現在的風險價值 $ t $ - 分配回報是
q = qt(alpha,df=df) varfit = as.numeric(mu + sd *sqrt((n-2)/n)*q) varfit
結果:
-0.01183847
現在,如果我是正確的,我想模擬未來一天的風險價值,所以我正在做:
rvecs <- rep(0,100000) library(metRology) for (i in 1:2) { rvecs <- rvecs+rt.scaled(100000, mean=t.fit$estimate[1], sd=t.fit$estimate[2], df=t.fit$estimate[3]) } VaRsim = quantile(rvecs,alpha);VaRsim
結果:
5% -0.01659703
我不知道我的模擬是否正確,因為結果(來自蒙地卡羅的結果並不完全相同)。我也不知道我的方法是否正確。
有什麼幫助嗎?
從你的陳述來看,
現在,如果我是正確的,我想模擬未來一天的風險價值,所以我正在做:
看起來您想要預測風險價值,而不僅僅是從學生 t 分佈的模擬中估計它。如果你想預測你的參數蒙地卡羅風險價值,你可以遵循下面描述的框架。
一般來說,我對你的 for 循環感到困惑,因為它似乎是多餘的。如果您想驗證您是否正確地完成了計算,從而重新模擬了按比例計算的回報 $ t $ -distribution using
rt.scaled
,您需要模擬更多的樣本,嘗試大約 200 萬個樣本。預測參數 Monte Carlo VaR:
基於模型預測參數化蒙特卡羅 VaR 的思想 $ f(\theta) $ ,在於從“預測”模型中模擬大量收益(或對數損失)樣本, $ f(\theta_{t\vert t-1}) $ 然後估計 $ \alpha $ -對您的模擬數據進行分位數。這裡 $ \theta_{t\vert t-1} $ 表示時間的條件參數 $ t $ 鑑於當時可用的資訊 $ t-1 $ 並且是(通常)每天遞歸變化的唯一事物。下面描述一個通用框架。
框架:
**1.**將您的價格序列轉換為對數回報(或對數損失)。
**2.**據此估計模型參數 $ \theta_{t\vert t-1} $ 使用今天可用的資訊(又名。 $ \mathcal{F}_{t-1} $ ) 通過例如。移動視窗或擴展視窗。範例如下:
- **移動視窗:**視窗長度為 1000,log-return 系列為 $ r_1,\ldots, r_{2000} $ , 使用前 1000 個數據點來估計 $ \hat{\theta}{1001 \vert 1000} $ 並在您的模型中使用估計的參數, $ f(\hat{\theta}{1001 \vert 1000}) $ , 來模擬大量的對數返回樣本。當時 $ t=1001 $ , 從序列中估計參數 $ {r_2,\ldots,r_{1001}} $ 從而保持視窗長度固定並使用這些參數來模擬大量對數返回樣本。這是遞歸完成的。
- 擴展視窗:遵循與****移動視窗幾乎相同的想法,而不是固定視窗長度,我們只是逐漸增加它:對於時間 $ t=1000 $ 估計從 $ {r_1,\ldots,r_{1000}} $ , 為了 $ t=1001 $ 做 $ {r_1,\ldots, r_{1001}} $ 等等。
**3.**對於每一天,找出前一天 $ VaR_{t\vert t-1}(\alpha) $ 預測為 $ \alpha $ -模擬數據上的分位數,即。 $ VaR_{t\vert t-1}(\alpha) = F^{-1}\alpha(\theta{t \vert t-1}) $ . 在你的情況下, $ F^{-1}\alpha(\mu{t \vert t-1}, \sigma_{t\vert t-1}) $ 是學生 t 分佈的分位數函式,其中 $ \mu $ 和 $ \sigma $ 分別表示尺度和位置參數。
如果您想評估樣本外的 VaR 性能,您可以使用故障率或無條件和有條件的覆蓋測試(例如參見*本文*的預測部分)。
移動和擴展視窗的程式碼說明:
下面的程式碼說明了移動和擴展視窗。在兩個 for 循環中,我們估計學生 t 分佈的參數,其中第一個 for 循環(移動視窗)將視窗長度固定為 500,而後者(擴展視窗)將視窗長度增加 1每次迭代。我鼓勵您仔細閱讀並了解它的工作原理。我希望它有所幫助。
#your own code, extended data from 2016 till 2019 library(quantmod) getSymbols("WILL5000IND",src="FRED") wilsh <- na.omit(WILL5000IND) wilsh <- wilsh["2016-01-01/2019-12-31"] n=length(wilsh) logret <- diff(log(wilsh))[-1] * 100 #initialize window length and matrices: win_length <- 500 est_pars_moving <- matrix(0, ncol = 3, nrow = n - window_length) est_pars_expanding <- matrix(0, ncol = 3, nrow = n - window_length) #Moving window estimation: for(i in (win_length+1):n){ est_pars_moving[(i-win_length), ]<-fitdistr(rvec[(i- win_length):(i-1)], "t")$estimate } #Expanding window estimation: for(i in (win_length+1):n){ est_pars_expanding[(i-win_length), ] <- fitdistr(rvec[1:(i-1)], "t")$estimate }