1

我想用历史方法计算月底的 VaR。我的时间序列将从 2000 年初开始直到现在。计算应该在 2005 年开始,以便有足够的数据。在 xts 中按月进行了类似的滚动计算,我尝试为我的案例修改代码。每个月末的 VaR 应该使用过去的数据。

这是我的代码(这里从 2012 年开始,否则需要很长时间):

library(quantmod)
getSymbols("^GSPC",return.class = "zoo",from = "2012-01-01",to = Sys.Date())
sp500 <- Ad(GSPC)
ldr_sp500 <- Return.calculate(sp500, method = "log")
ldr_sp500 <- na.omit(ldr_sp500)
idx <- index(ldr_sp500)[endpoints(ldr_sp500, 'months')]
out <- lapply(idx, function(i) {
    as.xts(rollapplyr(as.zoo(ldr_sp500), 30, VaR))
})
sapply(out, NROW)

首先,我的代码中有一个很大的错误。宽度应该是多少?是否也可以将输出作为动物园对象?我是这种功能的初学者......当我不想使用历史方法而是使用高斯方法时:

apply.monthly(as.xts(ldr_sp500), VaR, method="gaussian")

似乎这适用于非重叠时期......

4

1 回答 1

1

在您的代码中,函数 inlapply不使用其参数i:您一遍又一遍地计算相同的事物(该期间每一天的 VaR)。

另外,默认的方法VaRmodified:你需要指定method="historical"

如果您想从当月的每日收益中计算风险价值,您使用 use 的建议apply.monthly实际上是有效的:

apply.monthly(ldr_sp500, VaR, method="historical")

如果您想要一个扩展窗口:

library(quantmod)
library(PerformanceAnalytics)
getSymbols("^GSPC", from = "2012-01-01" )
x <- Return.calculate( Ad(GSPC), method = "log" )
idx <- index(x)[endpoints(x, 'months')]
result <- sapply( idx,
  function(i) VaR( x[paste0("/",i)], method = "historical" )
)
xts( result, idx )
于 2013-05-18T17:17:52.707 回答