python 股票價格預測(以中興通訊為例)
阿新 • • 發佈:2019-01-26
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])