用R语言简单的认识一下股票数据

浏览: 5237

最近坐个公交车闲得无聊就有了些想法和思路;今天来分享一个关于股市数据的应用,这里我用一些我前面所学的一些关于时序的皮毛的处理方式去呈现给大家,本人正除于菜鸟期,怕误人子弟,有错误还请大牛指出,这里谢谢啦!

1.1问题描述和目标

相信大家为了股票的价格的涨跌折磨的生不如死,能够预测到股票价格能够给我们带来在股市上的决策的参考,将风险最小化,减少在股市上的损失;

1.2数据说明

为此我们使用西班牙著名企业迪亚天天的股市价格数据作为我们的模型数据,这个数据集怎么获取呢,首先你要安装quantmod包,并且使用getSymbols获取,这个数据集包含了从2007年1月3日开始到昨天也就是2016年8月17日的股票价格数据,该数据集包含了7个变量,其中一个是日期变量,另外六个是关于股票价格有关的开盘价格,当日最高价格,当日最低价格,收盘价格,股票交易量;和调整后的价格;

DIA.Open  当日开盘价格

DIA.High   当日最高价格

DIA.Low    当日最低价格

DIA.Close  当日收盘价格

DIA.Volume 当日股票交易量

DIA.Adjusted 当日调整后的价格

1.3数据加载到R中

我们前面说过了,这个数据集是使用getSymbols函数获取的,这个函数能够帮助我们获取到系统时间的昨日价格数据;下面我们使用

install.packages("quantmod")
library(quantmod)
getSymbols("DIA")
head(DIA)

结果如下

Clipboard Image.png

能出现上面的结果这就说明了我们的数据已经成功的获取了;

1.4原数据集数据可视化和概括

首先我先使用summary函数来得到一些概括的信息,大致知道一下这个数据集的数据信息,我觉得这个步骤很有必要,这是带我们认识数据的第一步;从summary函数的结果上看,我们大致可以得到了数据集的信息,例如,从时间跨度上,我们可以知道是从2007年01日03日开始,结束语2016年08月17日,最高的开盘价格是最低开盘价格的3倍,历史最高价格是186.88,历史最低价格64.78等,这些信息大家可以自己去寻找;

summary(DIA)

Clipboard Image.png

我们对此开盘价格的走势画一个折线图,观测一下开盘价格的走势,从画图的结果上看我们可知迪亚天天的开盘的价格在08年的时候大幅下将,然后在一直波动中不断增长;

Clipboard Image.png

1.5构造一个我们想要的数据集

单纯的预测价格意义其实并不大,为此我构造一个我需要关注的价格波动,那就是当日的收盘价格和当日开盘价格的波动作为我们应该关注的,为此我还选择用当天的开盘价格和收盘价格的折中来作为当天的价格,日期的信息为此我要确定是周几的信息我也保存了下来,所以我们需要构造一个新的数据集,必须包含原数据集和新构造的数据:当日价格波动,当日价格,周几;为此我重新构造一个包含原数据集和新增的三列列数据集,并给命名

DIA$price <- (DIA$DIA.Open +DIA$DIA.Close)/2#得到当天价格
DIA$diff_price <- (DIA$DIA.Close -DIA$DIA.Open)#得到当日价格波动
new_dia <- data.frame(DIA$DIA.Open,DIA$DIA.High,DIA$DIA.Low,DIA$DIA.Close,DIA$DIA.Volume,DIA$DIA.Adjusted,DIA$price,DIA$diff_price,factor(format(index(DIA),format="%a")))#factor(format(index(DIA),format="%a"))这个表达式是获取周几的信息并转化为因子列的代码;
names(new_dia) <-c("open","high","low","close","volume","adjusted", 'price',"diff_price","date")

为此我们需要查看一下我们构造的数据是怎么样的,首先使用str函数查看一下数据集的字段结构如何,然后使用head函数查看前六行的数据,看来数据已经构造成功了,数据集的总共有九个变量,date变量是因子变量,剩下都是数值变量;

str(new_dia)
head(new_dia)

Clipboard Image.png

Clipboard Image.png

为此我们看一下这个数据波动(DIFF_PRICE)的趋势和分布,重下面的两幅图可知,价格波动还算平稳,基本是在0左右分布,算是类正态分布;

par(mfrow=c(1,2))
plot(new_dia$diff_price,type="l")
hist(new_dia$diff_price,prob=TRUE)
lines(density(d),lwd=3)

Clipboard Image.png

我在看一下价格的波动分布是否会受到周几的影响,为此我们用ggplot2包里的函数画出了它的分布分页图;从肉眼上看,结果的差异度并不是很大;

library(ggplot2)
p <- ggplot(new_dia,aes(diff_price))+geom_histogram()
p + facet_grid(.~date)

Clipboard Image.png

为此我们在看一下股票成交量的趋势情况和波动,从趋势看成交量略有微微的下降趋势,而大部分都分布在1千万左右;

par(mfrow=c(1,2))
 plot(new_dia$volume,type="l")
 hist(new_dia$volume)

我们在尝试看一下交易量是否受星期几的影响,这时候我们载入ggplot2包,使用分页功能画出交易量分布图,从分页图上看交易量分布差异其实并不是很大,差异是在交易的频率上有些差异;

library(ggplot2)
p <- ggplot(new_dia,aes(volume))+geom_histogram()
p +facet_grid(.~date)

Clipboard Image.png

1.6获取预测模型

因为我们定义的任务是要预测价格的波动,所以在时序预测处理上我们有多种方法,在下才疏学浅就只说其中一两个;

1.6.1arima模型

为什么选择这个,以为这里无法使用指数平滑法,因为指数平滑法是要求数据必须是带有趋势,有周期性的变化;这里数据平稳,所以我们这里就使用ARIMA模型去拟合这些数据,过程有些简单,

1.6.2时序数据平稳检验

前面我们提到我们使用的数据必须是平稳的;所以我们使用一下tseries包里的adf.test函数检验一下时序数据是否平稳,从结果上看得到的Z值明显小于P值,因此我们可以认为时序数据是平稳的;

library(tseries)
adf.test(new_dia$diff_price)

Clipboard Image.png

1.6.3自相关函数图和偏自相关图

我要选择ARIMA模型还得看一下自相关函数图和偏自相关函数他,;我们使用acf函数和pacf来看看,从这两幅图来看我们很容易发现自相系数和偏自相关系数都很快的衰减为0,自相关系数在2阶的时候快速衰减为0;偏自相关系数不要被这幅图给蒙骗,Y轴没做什么处理,所以看上去比例很大,不过看看系数值的范围就应该知道偏自相关系数始终维持在0附近,因此我们选用AR(2)模型;

par(mfrow=c(1,2))
acf(new_dia$diff_price)
pacf(new_dia$diff_price)


Clipboard Image.png

如果你还是拿不定自己的注意的话可以使用一下forecast包提供的aotu.arima函数,这个可对一个单变量时间序列拟合出最佳的arima的模型

library(forecast)
model_arima<-auto.arima(new_dia$diff_price)
model_arima

Clipboard Image.png

从上面的结果可以得到我们需要选用ARIMA(2,0,2),通俗的来说也就是AR(2),MA(2),经过0阶差分结合的一个ARIMA模型;这时候我们使用ARIMA模型生成预测值,生成30期的数据。

pre_arima <- forecast(model_arima,h=30)
plot(pre_arima)

Clipboard Image.png

从预测的结果上看未来一段时间的股票价格波动都会维持0左右,图中也标明了误差的大小;

1.7案例总结

这篇文章写了好几天,灵感是从坐公交车上得到的,所以问题其实很多,第一个问题就是,指标数据选取太过简单,不严谨,这也算是在下对金融知识了解的不够,第二个问题就是,没有对数据集分为测试数据和训练数据,这样就无法得到模型的预测效果;第三个问题,模型过程选取过于简单,也少了模型效果的对比,这还是在下对时序方面知识了解的不是很深,这方面我会努力,第四个问题,这个文章有点写的模板化了,本来想写一下对周几的一些特征规则选取,但碍于这个文章主题所以也就没把内容加进去;目前我发现的问题就是这些,欢迎大家指正;

推荐 9
本文由 夏尔康 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

8 个评论

辛苦了,图文并茂
一目了然,很耐看
还好!这次写的不够好
谢谢!
写的很详细。
谢谢SENG总
转了,很Good
很详细,辛苦了

要回复文章请先登录注册