python 股票价格预测(以中兴通讯为例)

Python 股票价格预测(以中兴通讯为例)

代码块

代码块语法遵循标准markdown代码,例如:

import pandas as pd
import tushare as ts


begin_time = '2018-06-08'
end_time = '2018-09-08'
code = "000063"
df = ts.get_hist_data(code, start=begin_time, end=end_time)
df.to_excel('/Users/wangwang/Desktop/tusharetest.xlsx')

import pandas as pd


#参数初始化
discfile = '/Users/wangwang/Desktop/tusharetest.xlsx'
forecastnum = 5

#读取数据,指定日期列为指标,Pandas自动将“日期”列识别为Datetime格式
data = pd.read_excel(discfile, index_col ='date',data='close')

#时序图
import matplotlib.pyplot as plt

#用来正常显示负号

plt.rcParams['axes.unicode_minus'] = False
data.plot()
plt.show()

#自相关图
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data).show()

#平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
print(u'原始序列的ADF检验结果为:', ADF(data['close']))

#由于返回结果p值显著大于0.05,我们对序列进行差分操作。通过实验发现两次差分后序列基本平稳,可以运用ARIMA模型进行分析。

#差分后的结果
D_data = data.diff(2).dropna()
D_data.columns = ['close difference']
D_data.plot()
plt.show()
print(u'差分序列的ADF检验结果为:', ADF(D_data['close difference']))

#白噪声检验结果
from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1))

from statsmodels.tsa.arima_model import ARIMA
#定阶
#一般阶数不超过length/10
pmax = int(len(D_data)/10)
#一般阶数不超过length/10
qmax = int(len(D_data)/10)

#bic矩阵
bic_matrix = []
for p in range(pmax+1):
  tmp = []
  for q in range(qmax+1):

#存在部分报错,所以用try来跳过报错。

    try:
      tmp.append(ARIMA(data, (p,1,q)).fit().bic)
    except:
      tmp.append(None)
  bic_matrix.append(tmp)

#从中可以找出最小值
bic_matrix = pd.DataFrame(bic_matrix)

#先用stack展平,然后用idxmin找出最小值位置。
p,q = bic_matrix.stack().idxmin()

#print(u'BIC最小的p值和q值为:%s、%s' %(p,q))
#建立ARIMA(0, 1, 1)模型

model = ARIMA(data, (p,1,q)).fit()
forecast=model.forecast(5)
print(forecast[0])













猜你喜欢

转载自blog.csdn.net/weixin_43181891/article/details/82627766