時間序列

模擬風險價值噸tt分佈式回報

  • February 20, 2022

我想了解風險價值以及如何使用簡單的蒙地卡羅方法模擬 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

}

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