基于R语言对股市价格预测的ARIMA建模

获取数据

tushare ID=399224

利用ARIMA对股市价格进行拟合后预测,本次实验的数据源于tushare

首先导入本次实验所需要的所有包

require(zoo)     #na.trim
require(TTR)     #ROC
require(quantmod)
require(parallel)
require(xts)
require(Tushare)
require(fBasics)
require(tseries)
require(tsoutliers)
source("load_data.R")

本次实验以沪深300指数为例,下面读出从2015年1月1日至今的沪深300指数

df   <-get_data(data_function="index_daily",code="399300.SZ",start="20180101")
table<-to_zoo_format(df)

数据来自tushare平台

如果没有账号点击此处免费创建:https://tushare.pro/register?reg=399224

get_data函数来自于load_data.R文件:

require(zoo)    #na.trim
require(TTR)    #ROC
require(Tushare)
#///
#=================================#获取股票数据#================================
#///
get_data<-function(data_function='daily',code,start="",end="") {api <- Tushare::pro_api(token = 'YOUR TOKEN')#<<--输入你的TOKENdf  <- api(api_name = data_function, ts_code = code, start_date = start,end_date=end)df$trade_date <- as.character(df$trade_date)df$open <- as.character(df$open)df$high <- as.character(df$high)df$low <- as.character(df$low)df$close <- as.character(df$close)df$vol <- as.character(df$vol)df$open <- as.double(df$open)df$high <- as.double(df$high)df$low <- as.double(df$low)df$close <- as.double(df$close)df$vol <- as.double(df$vol)for (i in 1:length(df[,1])){df[i,"trade_date"] <- paste(substr(df[i,"trade_date"], 1, 4),substr(df[i,"trade_date"], 5, 6),substr(df[i,"trade_date"], 7, 8),sep="-")}df
}#///
#========================#读取tushare表格并转换#================================
#///
to_zoo_format <- function(company.raw)
{z <- zoo( cbind(    company.Open=company.raw$open,company.High=company.raw$high,company.Low=company.raw$low,company.Close=company.raw$close,company.Volume=company.raw$vol#,#company.Adjusted=company.raw$Adj_C),as.Date(company.raw$trade_date) )ret <- as.xts(z)ret
}

平稳性、白噪声的检验

平稳性的检验

方法1:可以根据时序图上看或者通过向光性的图中看出

先输出沪深300指数的K线图:


计算出对数收益率后输出时序图:

table.rtn <- diff(log(table$company.Close))chartSeries(table.rtn,theme="white")

方法2:平稳序列通常具有短期相关性。该性质用自相关系数来描述就是随着延迟期数的增加,平稳序列的自相关系数会很快的衰减到0,特别,关于延迟的相关系数的计算公式如下
∑i=1n−h(xi−μ^)(xi+h−μ^2)/∑i=1n(xi−μ^)2\sum_{i=1}^{n-h}({x_i}-\hat{\mu})({x_{i+h}-{\hat{\mu}}^2})/\sum_{i=1}^{n}(x_i-\hat{\mu})^2 i=1∑n−h​(xi​−μ^​)(xi+h​−μ^​2)/i=1∑n​(xi​−μ^​)2
其中
μ^=Mean[{x1,...,xn}]\hat{\mu}=Mean[\{x_1,...,x_n\}] μ^​=Mean[{x1​,...,xn​}]

在R语言当中可以使用tseries包的“adf.test”函数或者fUnitRoot包的adfTest函数

平稳性的检验方法还有DF-GLS检验KPSS检验PP检验NP检验

ts <- na.omit(table.rtn)#由于差分后会产生空值,需要去除数据中的空值后进行adf检验
adf.test(ts, alternative = c("stationary", "explosive"))
Augmented Dickey-Fuller Test
data:  ts
Dickey-Fuller = -12.112, Lag order = 11, p-value = 0.01
alternative hypothesis: stationary

观察结果可知序列为平稳序列

判断是否是白噪音

白噪声没有研究的意义!

bartlett定理

如果一个时间序列是纯随机的,得到一个观察期数为n的观察序列,那么该序列的延迟非零期的样本自相关系数将近似服从均值为零,方差为序列观察期数倒数的正态分布
ρk^∼N(0,1n),∀k≠0\hat{\rho_k}{\ }{\sim}{\ } N (0,\frac{1}{n}), \forall k\neq0 ρk​^​ ∼ N(0,n1​),∀k​=0
在R语言中可以使用Box.test函数来检验白噪音

# Ljung-Box统计量
##白噪音检验
for(i in 1:2) print(Box.test(ts,type = "Ljung-Box",lag=6*i))
#p<α 时拒绝零假设,α 为显著性水平。即认为序列不为白噪音
 Box-Ljung testdata:  ts
X-squared = 21.363, df = 6, p-value = 0.001579Box-Ljung testdata:  ts
X-squared = 36.163, df = 12, p-value = 0.000305

ARIMA模型建立

这里使用R里自带的auto.arima函数或者可以从ACF图与PACF图中确定p与q

绘制ACF与PACF图:

#部分自相关
par(mfrow = c(1,2))
acf(ts) # conventional ACF
pacf(ts) # pACF

model<-auto.arima(ts)
summary(model)
Series: ts
ARIMA(2,0,3) with zero mean Coefficients:ar1      ar2      ma1     ma2     ma30.1441  -0.9579  -0.1081  0.9186  0.0725
s.e.  0.0259   0.0146   0.0348  0.0220  0.0253sigma^2 estimated as 0.0002171:  log likelihood=4729.3
AIC=-9446.61   AICc=-9446.56   BIC=-9414.01Training set error measures:ME       RMSE         MAE     MPE     MAPE     MASE         ACF1
Training set 0.0001872011 0.01471155 0.009980353 96.6115 201.7083 0.687844 0.0006095027

系统识别出的是ARIMA(2,0,3)模型,接下来我们使用系统识别出的模型来进行下面的步骤

对模型残差序列进行白噪音检验:

for(i in 1:2) print(Box.test(model$residual,lag=6*i))
 Box-Pierce testdata:  model$residual
X-squared = 2.8779, df = 6, p-value = 0.824Box-Pierce testdata:  model$residual
X-squared = 7.5982, df = 12, p-value = 0.8157

得到的结果为白噪音,下面对模型进行向后十步预测

library(forecast)
x.fore<-forecast(model,h=10)
x.fore
#系统默认输出预测图R
plot(x.fore)
     Point Forecast       Lo 80      Hi 80       Lo 95      Hi 95
1690  -0.0004786939 -0.01936027 0.01840288 -0.02935557 0.02839818
1691   0.0010980512 -0.01779570 0.01999181 -0.02779745 0.02999356
1692   0.0002677879 -0.01863697 0.01917254 -0.02864454 0.02918012
1693  -0.0010132974 -0.01992841 0.01790181 -0.02994146 0.02791487
1694  -0.0004024963 -0.01933085 0.01852585 -0.02935091 0.02854592
1695   0.0009127025 -0.01802218 0.01984759 -0.02804571 0.02987111
1696   0.0005170486 -0.01843268 0.01946677 -0.02846405 0.02949815
1697  -0.0007998362 -0.01975315 0.01815347 -0.02978642 0.02818675
1698  -0.0006105246 -0.01957952 0.01835847 -0.02962110 0.02840005
1699   0.0006782508 -0.01829229 0.01964879 -0.02833469 0.02969119

基于R语言对股市价格预测的ARIMA建模相关推荐

  1. 基于R语言的时间序列分析预测

    数据来源: R语言自带 Nile 数据集(尼罗河流量) 分析工具:R-3.5.0 & Rstudio-1.1.453 #清理环境,加载包 rm(list=ls()) library(forec ...

  2. 基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比(生信数基实验作业)

    基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比 0 引言 全基因组选择是 21 世纪动植物育种的一种重要的选择策略,其核心就是全基因组预测,即基于分布在整个基因组上的多样性分 ...

  3. python对电影进行预测评分_基于R语言构建的电影评分预测模型

    原标题:基于R语言构建的电影评分预测模型 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数据分析 ...

  4. 基于R语言极值统计学及其在相关领域中的应用

    受到气候变化.温室效应以及人类活动等因素的影响,自然界中极端高温.极端环境污染.大洪水和大暴雨等现象的发生日益频繁:在人类社会中,股市崩溃.金融危机等极端情况也时有发生:今年的新冠疫情就是非常典型的极 ...

  5. R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列

    原文链接:http://tecdat.cn/?p=23934 在本文中,我们将尝试为苹果公司的日收益率寻找一个合适的 GARCH 模型(点击文末"阅读原文"获取完整代码数据). 相 ...

  6. 055B ENMTools教程-基于R语言对MaxEnt模型优化-MaxEnt调参教程--更新日期2021-9

    055B-1 视频附带资料下载和密码:软件-数据-文献下载-持续更新 055B-2 ENMTools软件下载安装 055B-3 R软件和工具包安装 055B-4 生物气候因子的精度说明与选择方法(理论 ...

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

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

  8. 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

    详情链接 :基于R语言.MaxEnt模型融合技术的物种分布模拟.参数优化方法.结果分析制图与论文写作 内容介绍:  第一章 .理论篇 以问题导入的方式,深入掌握原理基础 : 什么是MaxEnt模型? ...

  9. 广义相加模型(GAM)与向前逐步选择算法(基于R语言)

    广义相加模型(GAM)与向前逐步选择算法(基于R语言) 一.题目 (a)使用College数据集,以Outstate作为响应变量,其余作为预测变量,使用逐步回归得到一组合适的预测变量的子集. (b)将 ...

最新文章

  1. VS2005 制作安装程序的一些网络教程
  2. php proc open 返回,PHP用proc_open新建子进程使用管道通信非阻塞执行PHP脚本
  3. 一文看懂70年的人工智能简史
  4. springboot 获取application参数_LOOK ! SpringBoot的外部化配置最全解析
  5. 浅谈sass与less区别优缺点
  6. debian linux 内核 3.14-1 显示器 很暗,Ubuntu 与 Linux Mint 用户安装 Kernel 3.14.1 内核
  7. 记录请求的耗时(拦截器、过滤器、aspect)
  8. vue.js踩坑之单向数据流
  9. 几个常用方法有效优化ASP.NET的性能
  10. error: dst ref refs/heads/zhCN_v0.13.1 receives from more than one src.
  11. 架构-大数据架构-阿里
  12. win无线网卡怎么进入监听模式_win10系统卸载网卡驱动的操作方法
  13. Java学习(10) —— 常用类
  14. .db-shm和.db-wal文件
  15. 学习单片机必须要学的八大知识点,你知道吗?
  16. wps可以登录网页版_wps网页版入口_WPS个人免费版_点点游
  17. 1000:有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数:
  18. 【重庆科技学院学报(自然科学版)】投稿经验分享
  19. 编码时,不要让字母和数字产生混淆,影响开发判断
  20. 前端开发规范:CSS 代码规范指南

热门文章

  1. 【原创】IOS游戏辅助--天天酷跑助手的实现
  2. Python实现将位图描摹为彩色矢量 svg 图片的源代码,Python实现位图转彩色矢量代码
  3. 向量的平面投影 ProjectOnPlane
  4. excel中的文本转换成数值
  5. 中级软考有没有必要考?
  6. List如何在遍历时删除元素
  7. 如何升级npm管理的各依赖版本
  8. 执笔写流年,焚纸闻墨香
  9. python:实现由列表表示的队列算法(附完整源码)
  10. 计算机考研各科目分值分布,考研各个科目的分值