我有使用历史数据基于极值理论成功计算VaR的代码.我试图在多个模拟价格路径上运行相同的代码(即计算每条路径的VaR),然后取这些VaR的中位数或平均值.
我在网上找到的每个例子都有模拟函数在期末返回价格,然后他们多次复制函数X. 这对我来说很有意义,除了我基本上需要计算每个模拟路径的风险值.下面是我到目前为止的代码.我可以说代码在使用历史数据时有效(即"evt"函数工作正常,当lossOnly,u和evtVar行不在函数中时,数据表正确填充).但是,我一直在尝试在第二个函数中实现模拟并尝试各种组合,这些组合都失败了.
library('RODBC')
library('nor1mix')
library('fExtremes')
library('QRM')
library('fGarch')
#function for computing the EVT VaR
evt <- function(data,u){
#fit excess returns to gpd to get estimates
gpdfit = tryCatch({
gpdfit <- gpdFit(data,u,type="mle")
}, warning = function(w) {
gpdfit <- gpdFit(data,u,type="mle",optfunc="nlminb")
return(gpdfit)
}, error = function(e) {
gpdfit <- gpdFit(data,u,type="pwm",optfunc="nlminb")
return(gpdfit)
}, finally = {})
#now calculate VaRs
xi <- gpdfit@fit$par.ests["xi"]
beta <- gpdfit@fit$par.ests["beta"]
Nu <- length(gpdfit@data$exceedances)
n <- length(data)
evtVar95 <- (u+((beta/xi)*(((n/Nu)*.05)^(-xi) - 1.)))*100
evtVar99 <- (u+((beta/xi)*(((n/Nu)*.01)^(-xi) - 1.)))*100
evtVar997 <- …Run Code Online (Sandbox Code Playgroud)