简单的股票预测实战(利用ARIMA))

利用ARIMA模型对股票的收盘价进行预测

先导入库并设置画图参数

%matplotlib inline
import pandas as pd
#import pandas_datareader 获取各种数据集库
import datetime
import matplotlib.pylab as plt
import seaborn as sns
from matplotlib.pylab import style
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

style.use('ggplot')    
plt.rcParams['font.sans-serif'] = ['SimHei'] 
plt.rcParams['axes.unicode_minus'] = False  

导入数据,先大致看下:

stockFile = 'data/T10yr.csv'
stock = pd.read_csv(stockFile, index_col=0, parse_dates=[0]) #读数据,时间为索引
stock.head(10)

在这里插入图片描述

我们选择一列收盘价close进行预测并画图看下收盘价的浮动情况

#选择对收盘价进行预测
stock_week = stock['Close'].resample('W-MON').mean() #close列重采样
stock_train = stock_week['2000':'2015']

#看下收盘价的浮动
stock_train.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("Stock Close")
sns.despine()

在这里插入图片描述

发现数据浮动比较大,所以应该差分处理,实际应用中,一阶差分即可

#一阶差分操作
stock_diff = stock_train.diff()
stock_diff = stock_diff.dropna()
#画图
plt.figure()
plt.plot(stock_diff)
plt.title('一阶差分')
plt.show()

在这里插入图片描述

现在数据变得平稳了,这时需要确定ARIMA模型的p、q参数,所以画ACF和PACF图

acf = plot_acf(stock_diff, lags=20)
plt.title("ACF")
acf.show()

在这里插入图片描述

q选1

pacf = plot_pacf(stock_diff, lags=20)
plt.title("PACF")
pacf.show()

在这里插入图片描述

p选1

此时p,d,q的参数都已经确定,用训练集训练model即可

#训练model,传入训练数据,order(p,d,q),以周为单位
model = ARIMA(stock_train, order=(1, 1, 1),freq='W-MON')

result = model.fit() #fit一下
#print(result.summary())

#进行预测
#需要指定起始时间(必须是训练数据中的)和终止时间(无所谓)
pred = result.predict('20140609', '20160701',dynamic=True, typ='levels')
print (pred)

2014-06-09 2.463559
2014-06-16 2.455539
2014-06-23 2.449569
2014-06-30 2.444183
2014-07-07 2.438962

2016-06-06 1.923405
2016-06-13 1.918250
2016-06-20 1.913094
2016-06-27 1.907939
2016-07-04 1.902784
Freq: W-MON, Length: 109, dtype: float64

这时已经得到了预测的收盘价值,画图和真实值比较一下

#画图看下预测值和真实值的差异
plt.figure(figsize=(6, 6))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(stock_train)

在这里插入图片描述

发现虽然有偏差,但是大体的方向是对的。

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值