ARIMA和ARIMA-GARCH模型预测股票价格-R语言

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、ARIMA-GARCH是什么?

二、使用步骤

1.引入库

2.读入数据

3.平稳性检验

4.数据差分,平稳性检验

5.将数据分割成训练样本和测试样本

6.ARIMA模型参数识别

7.残差独立性和正态性检验

 8.检验 Arch 效应

 9.利用ARIMA模型的残差对GARCH模型参数识别

 10.ARIMA(5,1,5)-GARCH(1,1)模型选择并预测

11.残差独立性和正态性检验

12.模型评价

总结


前言

一、ARIMA-GARCH是什么?

ARIMA-GARCH是一种时间序列分析方法,结合了ARIMA模型(Autoregressive Integrated Moving Average)和GARCH模型(Generalized Autoregressive Conditional Heteroskedasticity)。它是用于预测和建模金融时间序列数据中的波动性和趋势的方法。

ARIMA模型用于描述时间序列数据的趋势和季节性成分,它包括自回归(AR)和移动平均(MA)成分,以及差分(I)操作,用于处理非平稳性。ARIMA模型通过拟合历史数据的趋势和季节性来预测未来的数值。

GARCH模型则是用于建模时间序列数据中的条件异方差(conditional heteroscedasticity),即条件方差的变化。GARCH模型基于过去的观测值和条件方差的反馈,可以捕捉时间序列数据中的波动性特征。它是一种常用的金融时间序列建模方法,特别适用于描述金融资产价格的波动性。

ARIMA-GARCH模型结合了ARIMA模型和GARCH模型的优势,可以同时考虑时间序列数据的趋势和波动性。通过使用ARIMA-GARCH模型,可以更准确地预测金融资产价格的未来走势和波动性,从而提供更可靠的决策依据。

总之,ARIMA-GARCH模型是一种结合了趋势和波动性建模的时间序列分析方法,广泛应用于金融领域的预测和风险管理任务中。

二、使用步骤

1.引入库

2.读入数据

3.平稳性检验
 

 p值大于0.05,序列不平稳,股票数据进行对数差分,以表示收益率

4.数据差分,平稳性检验

 P值小于0.05,满足平稳性检验

5.将数据分割成训练样本和测试样本

6.ARIMA模型参数识别

可见ARIMA模型为(5,1,5)

7.残差自相关性和正态性检验

 

 

残差满足独立性不满足正态性 

 8.检验 Arch 效应

 小于0.05说明有Arch 效应,可以进行GARCH模型

 9.利用ARIMA模型的残差对GARCH模型参数识别

 

 可见GARCH(2,1)优于GARCH(1,2)优于GARCH(1,1)但为了模型的复杂度,任选用GARCH(1,1)

 10.ARIMA(5,1,5)-GARCH(1,1)模型选择并预测

11.残差自相关性和正态性检验

 由标准残差的ACF图和QQ图可知残差满足正态性和独立性检验。

12.模型评价

#需要加载的包
# 加载所需库
library(tseries)   # 时间序列分析
library(fGarch)    # GARCH模型
library(TSA)
library(forecast)
library(parallel)
library(rugarch)
library(timeSeries)
library(fBasics)
library(mice)
library(MTS)
library(FinTS)
library(openxlsx)
library(tidyverse)
data=read.xlsx("C:\\Users\\86182\\Desktop\\时间序列\\工商银行.xlsx")
stock_price=data[,5]
head(stock_price)
#转化为时间序列
t1=ts(stock_price,frequency = 252)
plot(t1,ylab="Closing price")
#平稳性检验
adf.test(t1)
#平稳化,进行对数差分
dlnt1=diff(log(t1))
adf.test(dlnt1)
plot(dlnt1,ylab="")
# 拆分数据为训练集和测试集
train_data2 <- dlnt1[1:2035]   # 用于定阶,肉眼
train_data <- stock_price[1:2035]   # 将前2035个数据用于训练
test_data <- stock_price[2036:length(stock_price)]   # 从第2036个数据开始作为测试数据
# 模型建立
## ARIMA模型参数识别
# ARIMA模型拟合
arima_model2 <- auto.arima(train_data)
arima_model2
#ARIMA模型预测
arima_forecast2 <- forecast(arima_model2, h = length(test_data)) # 预测未来的股票价格
arima_forecast2
accuracy2 <- accuracy(arima_forecast2$mean, test_data) # 评估预测结果的准确性
accuracy2


#检验残差正态性与独立性
qqnorm(arima_forecast2$residuals)
qqline(arima_forecast2$residuals)
shapiro.test(arima_forecast2$residuals)#不满足正态性检验
#Ljung-Box检验的p值都在0.05之上,结果不错。
Box.test(arima_forecast2$residuals)#不存在自相关性,满足独立性

#如果不做GARCH模型,到这结束了





#检验 Arch 效应
McLeod.Li.test(y=train_data2)
ArchTest(train_data)#小于0.05说明有Arch 效应,可以进行GARCH模型

# GARCH模型拟合,利用残差找GARCH参数
squared_residuals=arima_forecast2$residuals^2#定义残差的平方,为garch模型的参数识别做准备
garch_model <- garchFit(~1+garch(1, 1), data = squared_residuals, trace = FALSE)   # GARCH模型拟合
summary(garch_model)
garch_model2 <- garchFit(~garch(1, 2), data =squared_residuals, trace = FALSE)   # GARCH模型拟合
summary(garch_model2)
garch_model3 <- garchFit(~garch(2, 1), data = squared_residuals, trace = FALSE)   # GARCH模型拟合
summary(garch_model3)


#将ARIMA-GARCH参数带入
myspec1=ugarchspec(variance.model = list(model = "sGARCH", 
                                         garchOrder = c(1, 1)),
                   mean.model = list(armaOrder = c(5,1,5),archm=T),
                   distribution.model = "sstd")

myfit1=ugarchfit(myspec1,data = train_data)# GARCH模型拟合和参数自动寻优
myfit1


# 进行未来的预测,假设预测步长为1,生成未来波动率值
garch_forecast  <- ugarchforecast(myfit1, n.ahead = length(test_data))
garch_forecast#第一列为预测值第二列是波动率
test_data

#残差独立性检验和正态性
plot(myfit1,which=9)
plot(myfit1,which=10)
#残差厚尾,用标准化 t 分布 garch 模型
myfit3<-garchFit(~garch(1,1),
                 data = train_data2,
                 cond.dist = "sstd",
                 include.mean = F,trace = F)
summary(myfit3)
plot(myfit3,which=13)
plot(myfit3,which=10)

# 提取生成的未来预测值序列
forecasted_values <- as.numeric(garch_forecast@forecast$seriesFor)
# 输出预测值序列
print(forecasted_values)
# 模型评估
accuracy <- accuracy(forecasted_values, test_data)  #评估预测结果的准确性
accuracy


总结

感觉ARIMA-GARCH模型对股票的拟合情况在未来几天可能还行,时间一长就失效了。代码可能存在错误,望指正。

  • 17
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值