Python时间序列--股票预测(七)

   日期:2020-05-04     浏览:113    评论:0    
核心提示:1.数据获取import pandas as pdimport datetimeimport panpython

1.数据获取

import pandas as pd
import datetime
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
#可以适用接口从雅虎获取股票数据
start=datetime.datetime(2000,1,1)
end=datetime.datetime(2015,12,31)
prices=web.DataReader('002578.SZ','yahoo',start,end)
prices.head()
#存入本地
prices.to_csv('data/yahoo.csv')
#从本地读取数据 本文用的是本地数据,未用接口数据
stock = pd.read_csv('data/yahoo.csv', index_col=0, parse_dates=[0])
stock.head(10)

2.训练数据

#下采样 日频数据太多
stock_week = stock['Close'].resample('W-MON').mean()
#训练数据
stock_train = stock_week['2000':'2015']

3.数据平稳性检测

#绘出数据折线图,查看数据是否平稳
stock_train.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("Stock Close")
sns.despine()


从图中可以很明显看出数据是不平稳的。

4.一阶差分

stock_diff = stock_train.diff()
stock_diff = stock_diff.dropna()

plt.figure()
plt.plot(stock_diff)
plt.title('一阶差分')
plt.show()

ACF&PACF确定q、p

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

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

一阶差分后,ACF&PACF基本上都落在了0轴上,表明一阶差分就够用了。并且可确定pqd的的取值都为1。

5.模型训练

model = ARIMA(stock_train, order=(1, 1, 1),freq='W-MON')
model_pred = model.fit()

6.残差检测

from statsmodels.graphics.api import qqplot
#残差
resid=model_pred.resid.values
fig=plt.figure(figsize=(12,8))
fig=qqplot(resid,line='q',fit=True)

Q-Q图显示符合标准正态分布,模型可用来预测。

7.预测

pred = result.predict('20140609', '20160701',dynamic=True, typ='levels')
plt.figure(figsize=(6, 6))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(stock_train)


股票预测一般是不能准确是预测具体的值,但可以预测走势。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服