|
library(ggplot2)
library(tidyr)
library(dplyr)
library(TTR)
library(moments)
library(ncg)
library(FMStable)
library(tseries)
library(rugarch)
library(openxlsx)
setwd("E:/毕业设计/代码/R代码/低频模型")
data <- read.csv("input_2018.csv", stringsAsFactors = F, header = T)
innerData = data %>% filter(date<20180301)
outerData = data %>% filter(date>=20180301)
returns = data$returns
alldays = length(returns)
innerReturns = innerData$returns
innerDays = length(innerReturns)
outerReturns = outerData$returns
outerDays = length(outerReturns)
garch.spec = ugarchspec(variance.model = list(model='sGARCH',garchOrder=c(1,1)),
mean.model=list(armaOrder = c(3,0,1),include.mean = TRUE),
distribution.model = "sstd")
garch.fit = ugarchfit(data=innerReturns,spec=garch.spec,out.sample=outerDays)
windowsWides = innerDays##1452
foreVolatility = matrix(nrow = outerDays,ncol=1)
for (i in 1:outerDays){
returnsE = returns[i:(i+windowsWides-1)]
garch.fit = ugarchfit(data=returnsE,spec=garch.spec,solver="solnp")
fore = ugarchforecast(garch.fit,n.ahead=1)
foreVolatility[i] = fore@forecast[["sigmaFor"]]
}
plot(foreVolatility)
rvData <- read.xlsx("预测结果CJ_2018.xlsx") ##读取真实RV
rv = rvData$RV
rv = rv^0.5
t =1:267
plot(t,rv,type="p",xlab="日期",ylab="波动率",ylim=c(0,4),xlim = c(0,267) ,col='red',pch=c("."),cex=2)
lines(t,foreVolatility,type="o",col="green",pch=c("."))
legend("topleft",c("RV","foreVolatility"),col=c("red","green"),lty = c(0,1),pch=c(".","."),bty = "n",text.width=0.6,cex=0.6)
|