tushare ID:469868

tushare官网:https://tushare.pro

一、获取数据

本文选取了上证指数作为研究对象,利用python从tushare接口调取了其1998年至2021年的月度数据,操作R软件对上证指数进行ARIMA建模。

训练集:1998年-2018年

预测集:2019年-2021年

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
import tushare as ts
token='your token'
pro=ts.pro_api(token)#上证指数
df = pro.index_monthly(ts_code='000001.SH', start_date='19980101', end_date='20211230')
df.index=pd.to_datetime(df.trade_date)
index_df=df.sort_index()
index_df.to_csv('./上证指数.csv')

二、ARIMA建模

建模过程主要是用R软件进行

library(tseries)
library(forecast)# 读取数据
da = read.csv('/Users/yangyuting/Documents/sametime-baidu/我的量化策略/pycharm文件/Python金融量化-笔记/tushare任务/上证指数.csv', header = T, na.strings=c("NA"))
head(da)
str(da)# 所有数据收盘价
data.all <- ts(da$close,frequency=12,start=c(1998,1))
#可以拆掉最后3年来做样本的训练集,再将最后3年做样本的测试集
data1 <-ts(as.vector(da$close[1:251]),frequency=12,start=c(1998,1))

1.平稳性检验

#时序图
plot(data1)

data1的明显存在一个向上的趋势,用1阶差分方法消除趋势

s1<-diff(data1,1)
plot(s1)

从图上看,基本围绕了0在振动,基本平稳,进一步使用adf检验,看一下是否存在单位根(验证平稳性,若存在则不平稳

#单位根检验通过(p<0.05,显著拒绝存在单位根),说明序列平稳
adf.test(s1)

# 白噪声检验(α=0.05
for (i in 1:2){print(Box.test(s1, lag = 6*i, type = 'Ljung'))
}
# p-value < 0.05 拒绝原假设,说明为非白噪声

所以,一阶差分后的序列是平稳非白噪声序列,可以开始建模了

2.模型定阶

#定阶
#tsdisplay来观察,它包含了时序图,以及acf、pacf两个相关图
tsdisplay(s1)

图形显示acf图,q=3之后拖尾(太后面的不用管),pacf图超出虚线较多,但从整体上看,从16阶之后截断。而上面的线可以大概看到(2,4,6,9)这五个数超出虚线甚多,所以,可以每个都测试一下。
形成(2,1,0)(4,1,0),(6,1,0),(9,1,0) 然后判断一下各自的AIC值,取最小值即可。

acf图可以看出有点像是存在一个12阶的季节性影响因素,然后通过作滞后12阶的图看一下是否消除

tsdisplay(diff(s1,12))

图形可以看出,已经消除了季节性的影响,所以ARIMA季节参数中周期应该为12,由于季节性图的acf图和pacf上看到最后一个超出虚线的阶数均为1,季度参数可以这么设置(1,1,1)[12]

#拟合模型,看一下哪个模型最好,注意,拟合模型使用的data是原始数据,并不是差分之后的数据!
arima(data1,order=c(2,1,3),seasonal=list(order=c(1,1,1),period=12))#AIC=3285.45
arima(data1,order=c(4,1,3),seasonal=list(order=c(1,1,1),period=12))#AIC=3280.19
arima(data1,order=c(6,1,3),seasonal=list(order=c(1,1,1),period=12))#AIC=3285.84
arima(data1,order=c(8,1,3),seasonal=list(order=c(1,1,1),period=12))#AIC=3278.03

从上面的拟合可以看出,选择(8,1,3)(1,1,1)[12]的模型AIC值最小,也可以使用auto.arima函数来自动确定这些参数:

auto.arima(data1)
#ARIMA(0,1,0)     AIC=3417.06 

auto.arima函数确定的参数的AIC值较大,所以ARIMA(8,1,3)(1,1,1)[12]模型较好。我们来看看预测效果。

fit1<-stats::arima(data1,order=c(8,1,3),seasonal=list(order=c(1,1,1),period=12))tsdiag(fit1)

记得加上stats::,不然会报错!!!

然后使用tsdiag看一下各自的结果,
ARIMA(8,1,3)[12]图中表明残差标准差基本都在[-1,1]之间,残差的自回归都为0(两虚线内),Ljung-Box检验的p都在0.05之上,结果不错。

#预测
f.p1<-forecast(fit1,h=36,level=c(99.5))#看一下fit1【即(1,1,0)(1,1,1)[12]】的效果
plot(f.p1,ylim=c(100,700))
lines(f.p1$fitted,col="green")
lines(air,col="red")

从上面的图(红色为全部真实数据,绿色为利用上证指数计算出来的原始数据拟合值,蓝色段为预测值),可以看出,预测效果一般。怎么继续优化的话,我后续学会了再来更新。

上证指数ARIMA模型预测(R软件)相关推荐

  1. R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列

    R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列 目录

  2. R语言与数据分析练习:使用ARIMA模型预测网站访问量

    R语言与数据分析练习:使用ARIMA模型预测网站访问量 使用ARIMA模型预测网站访问量 一.实验背景: 随着流量的增大,某网站的数据信息量也在以一定的幅度增长 基于该网站2016年9月~2017年2 ...

  3. R时间序列分析|SP500股指的ARIMA模型预测与残差ARCH效应分析

    R时间序列分析|S&P500股指的ARIMA模型预测与残差ARCH效应分析 前言 一.数据及分析目的 二.数据探索 三.ARIMA模型构建 四.残差分析 五.模型预测 前言 由于R语言对新手并 ...

  4. R语言时间序列分析之ARIMA模型预测

    R语言时间序列分析之ARIMA模型预测 今天学习ARIMA预测时间序列. 指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求.但是,如果你想使用指数平滑法计算出预测区 ...

  5. R语言使用ARIMA模型预测股票收益时间序列

    "预测非常困难,特别是关于未来".丹麦物理学家尼尔斯·波尔(Neils Bohr),最近我们被要求撰写关于arima的研究报告,包括一些图形和统计输出. 很多人都会看到这句名言.预 ...

  6. r语言 python 股票_R语言使用ARIMA模型预测股票收益

    原文链接:http://tecdat.cn/?p=2831 "预测非常困难,特别是关于未来".丹麦物理学家尼尔斯·波尔(Neils Bohr) 很多人都会看到这句名言.预测是这篇博 ...

  7. R语言拟合ARIMA模型并使用拟合模型进行预测推理、使用autoplot函数可视化ARIMA模型预测结果、可视化包含置信区间的预测结果

    R语言拟合ARIMA模型并使用拟合模型进行预测推理.使用autoplot函数可视化ARIMA模型预测结果.可视化包含置信区间的预测结果 目录

  8. python用ARIMA模型预测CO2浓度时间序列实现

    全文下载链接:http://tecdat.cn/?p=20424 时间序列为预测未来数据提供了方法.根据先前的值,时间序列可用于预测经济,天气的趋势.时间序列数据的特定属性意味着通常需要专门的统计方法 ...

  9. r语言没有forecast这个函数_R语言学习日记——时间序列分析之ARIMA模型预测

    指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求.但是,如果你想使用指数平滑法计算出预测区间,那么预测误差必须是不相关的, 而且必须是服从零均值. 方差不变的正态分 ...

  10. arima模型_时间序列分析(R)‖ARIMA模型预测实例

    背景 十九大报告,对教育方面做出了详细说明.近年来,随着研究生招生规模的逐渐扩大,报名参加硕士研究生考试的人数也逐年增加.大多数关于研究生的文章是以研究生的现状.研究生的教育.研究生的就业等方面为主题 ...

最新文章

  1. R语言使用forestplot包绘制森林图:编码创建森林图仿真数据、汇总线修改、元素位置调整、垂直线、字体、风格、置信区间、线型、图例、刻度、标签等
  2. Python学习前的计划
  3. python web-python web入坑指南
  4. Python中一些高效的数据操作
  5. 阿里云Linux创建docker容器
  6. 网关冗余工作原理(总结)
  7. python3操作excel(xls与xlsx版本的爱恨情仇)
  8. idea2020新建一个jsp页面_有关idea2019版的jsp配置小教程
  9. 控制台接收信息转发_微信语音信息无法转发?原来这才是正确的转发姿势,看完涨知识了...
  10. windows api中定义的基本数据类型简介(转)
  11. Tensorflow模型变量保存
  12. arm linux logrotate,交叉编译zlog日志工具:zlog+cronolog+crontab+logrotate
  13. CactiEZ中文解决方案和使用教程
  14. 基于Jquery和xml文件来实现省市区3级联查
  15. html 百分比 rem,rem的坑,为什么要设置成百分比,为什么又是62.5%
  16. 【转】很实用的编程英语词库,共收录一千五百余条词汇
  17. 超强实用:中国各地特产风味大搜捕!
  18. MySQL查询之内存临时表
  19. springAOP支持的通知类型
  20. poi导出excel详解

热门文章

  1. 蓝牙耳机连接电脑没有声音解决办法
  2. c语言程序进制,C语言编程:进制转换器
  3. Chrome中播放时视频编码为.h264和音频编码为acc,采样率为48000,双通道的视频文件时音画不同步
  4. Turbo C 2.0
  5. 滤波器: 滤波器设计软件
  6. PYTORCH-KALDI语音识别工具包
  7. Java程序设计教程(第3版)雍俊海 全书例程-1
  8. 一个完整的C语言程序
  9. 中国氮化镓(GaN)行业“十四五”前景预测及投资风险预测报告2021年版
  10. 【牛腩新闻发布系统】牛腩小结