我有 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 年的滚动窗口。
关于如何在此期间每天获取预测的任何想法?
非常感谢您的帮助。