1

我有 S&P500 的每日数据,并将接近收盘的回报存储在my_data$Return中。我的目标是在此期间每天重新调整 GARCH(1,1)(因此从 2004 年 1 月 1 日的startDate开始),然后计算 30 天的预测。换句话说,我需要模拟我使用期间每个时间点的 GARCH(1, 1) 30 天预测。为了做到这一点,我使用了myFit函数来校准模型并进行预测。然后此函数由apply.fromstart调用,以便我可以从startDate开始每天应用它。

如果我启动它,R 会抱怨,因为ugarchfit需要至少 100 个数据点才能运行。

library(quantmod)
library(PerformanceAnalytics)
library(rugarch)

symbolLst <- c("^GSPC","^VIX")
startDate = as.Date("2004-01-01")
myForHorizon = 30

myData <- new.env() 
getSymbols(symbolLst, env = myData, src = "yahoo", from = startDate)

args = eapply(myData, 
              function(x){OHLC(x)})

my_data = do.call(cbind,
                  args,
                  envir = myData)

my_data$Return <- ClCl(myData$GSPC) 
my_data$Return[is.na(my_data$Return)] <- 0

spec = ugarchspec(
  variance.model=list(garchOrder=c(1,1)))

myFit <- function(myVector)
{
  myVec <- myVector
  fit = ugarchfit(spec=spec, data=myVec)
  forecast = ugarchforecast(fit, n.ahead=myForHorizon)
  myForecast = sigma(forecast)[myForHorizon,] * sqrt(252) * 100
  return(myForecast)
}

forecastVec <- apply.fromstart(my_data$Return, FUN=myFit)

我看到该函数需要至少 100 个数据,但如何更改函数以避免错误?我还尝试将最后一行替换为:

forecastVec <- rollapply(my_data$Return, width = 252, FUN=myFit)

R显示错误,因为求解器无法收敛。另外,rollapply不允许我使用扩展窗口,而这是我想做的。事实上,我在这里申请了 1 年的滚动窗口。

关于如何在此期间每天获取预测的任何想法?

非常感谢您的帮助。

4

0 回答 0