如何在R语言中使用ARIMA模型预测股票价格

743 阅读5分钟

在R中使用ARIMA模型预测股票价格

随着股票和加密货币市场领域中众多投资者的崛起。如果能创建一个可以预测市场价格的程序来帮助投资者,那就太好了。

帮助他们在是否是正确的投资时机上做出最好的决定,从而使他们能够获得更多的利润或金钱。

简介

ARIMA模型是对未来趋势进行预测的最有用和准确的时间序列模型之一。在我们的案例中,我们将使用R编程语言预测股票市场价格。

先决条件

要继续学习本教程,读者需要具备以下条件。

  • 对时间序列和各种时间序列模型的工作原理有基本了解。
  • 在你的电脑上安装有R工作室。
  • 有关于如何分析和解释图表的基本知识。

在R中导入雅虎金融数据

在本教程中,我们将使用亚马逊的股票价格来演示股票价格预测,我们将使用NASDAQ 符号。AMZN,将使用R中的quantmod包导入雅虎财经。

数据将由OHLC(开盘价、最高价、最低价和收盘价)类型组成,但为了简单起见,我们将使用收盘价来使我们的模型成为一个单变量时间序列。

我们需要安装quantmond包,使用。

install.packages("quantmod")

installing quantmod

安装完quantmod包后,使用这段代码library(quantmod) ,打开库来激活它。

activating quantmod

然后要导入亚马逊数据,使用getSymbols() 函数。

importing amazon data

股票制图

为了开始分析股票,我们需要在预测前加入技术指标,如移动平均线、布林带(20,sd=1)、14天的相对强弱指数和移动平均收敛分歧(12,25)作为分析的技术工具。

stock charting

graph

为了使我们的分析更容易,我们将对数据进行对数转换,以描绘出股票的增长率,并将单位价值进行缩放,如下图所示。

绘制数据的对数转换图。

log

log transformation

该股票显示出上升的趋势,但也有轻微的下降趋势,显示出有很高的波动性,这意味着该数据和大多数金融数据一样是非平稳的。

因此,我们可以假设它是一个随机漫步;意味着当前的价格等于当时(t-1)的价格加上白噪声,因此,为了在ARIMA模型中拟合数据,我们应该在一个特定的滞后期对数据进行区分。

differencing log data

分析数据的相关性

我们分析自动相关函数(ACF)和部分自动相关进行分析,看看今天的价格和昨天的价格之间是否有任何关联。

对数据进行差分,使其成为静止的

现在我们知道我们的数据不是静止的,我们需要通过在一定的滞后期对其进行微分,使其成为静止的,以便符合我们的ARIMA模型。

使数据静止是很重要的,因为它可以帮助我们预测我们的数据过去的统计属性在未来会保持不变。在这里,对数转换后的数据将被差分1个滞后期以使其静止。

我们要确保用缺失值之后的观察值来填补缺失值。

differencing data to be stationary

使用单位根检验做静止检验

在对数据进行滞后1的微分并使我们的数据静止后,我们将使用单位根检验来测试数据是否静止。

我们将使用Augmented Dickey Fuller检验来测试。这将测试静止数据的假说。

如果得出的P值低于0.05,我们将拒绝无效假设,并得出结论,数据是静止的。我们将测试我们的差分数据。

要做到这一点,使用库(tseries)激活tseries 包,然后我们使用adf 测试。

adf<-adf.test(AMAZON_diff, alternative=c(“stationary”,”explosive”), k=0)

adf

doing stationary test

p值为0.01,意味着我们的数据现在是静止的,没有单位根,适合我们的ARIMA模型。

为了检查我们的数据是否适合自回归模型和MA过程,我们将使用acfpacf 函数生成ACF和PACF相关图,如下所示。

我们需要把我们的训练数据分成几个子集,从第一期开始到第3355期,也就是2013年1月3日到2022年3月12日,来训练我们的模型。

接下来,用以下方法安装caTools库。

install.packages(“caTools”)

激活caTools库。

library(caTools)

为了选择我们的训练数据,我们将使用。

train_data<-AMAZON_diff[1:3355]

differencing log data

建立ARIMA模型

R中的ARIMA模型在 "预测 "包中找到,我们将首先安装,然后激活,如下所示。

install.packages(“forecast”)

library(forecast)

Auto.arima 是用来生成ARIMA模型的。

generating ARIMA model

为了检查我们最适合的ARIMA模型的摘要,我们使用。

summary(arima_mode)

summary for our model

然后我们检查我们的ARIMA模型的任何残差,通过Ljung-Box检验,我们得出结论,P值>0.05(不显著)。这意味着模型的残差是独立的,不是自动相关的。这意味着我们不需要用Garch这样的模型来做波动率模型,Garch常用于有异方差问题的金融数据。

checking for residuals

假设ARIMA(0,0,2)是我们的模型,未来几天显示出一条直线,表明我们的ARIMA模型很适合,因为它应该遵循正态分布,应该是静止的。

我们的ARIMA模型的残差图显示了我们对100的预测。

residuals form ARIMA

拟合ARIMA模型和预测

现在,为了将模型拟合到训练数据集中,我们使用。

arima<-arima(train_data, order=c(0, 0, 2)

summary(arima)

fitting our model

现在,我们可以使用forecast 包进行未来100天的预测,h=100。

我们可以使用plot(forecast) 绘制我们的预测。

plotting our forecast

然后用checkresiduals(arima) 来检查我们模型中的残差。

checking residual

our arima

我们的预测将是。

our forecast

这表明在接下来的100天里,AMAZON的股票价格会有一个上升的过程,在接下来的几天里会有一个轻微的下调,然后几乎是稳定的上升。

现在,投资者知道了亚马逊股票未来100天的预期走势,就可以在买入和卖出方面做出正确的决定,以实现利润最大化和避免损失。你可以通过使用h="time" ,对你想要的时间段进行预测。

结语

我们学习了如何使用R编程语言预测亚马逊股票价格,进行金融建模,然后在预测中使用时间序列模型。有各种自动化的功能可以适合于模型,当输入足够的数据时,会给出准确的结果。