Cffex. IF1808, 1000 closing price movements by the end of the day:
# encoding:utf-8import talibfrom talib.abstract import smaimport numpy as Npimport pandas as Pdimport mathimport datetime From collections Import Dequefrom gm.api import * #掘金import Matplotlib.pyplot as Pltimport matplotlib as Mplimport MPL _finance as Mpfimport matplotlib.dates as Mpdimport Seaborn as Snsimport statsmodels.tsa.stattools as Tsimport statsmodels . API as Smfrom Statsmodels.tsa.arima_model import armafrom scipy import statsfrom statsmodels.graphics.api Import Qqplotset_token (' **************************** ') #自行填写自己的token
A time series, he may be trending, is not smooth, so if not smooth need to do differential.
ADF test Results:
95% confidence interval, p=0.0076,99% confidence interval, p=-3.5. To make a first order difference for a model, hoping to get a stationary time series
After the first order difference, the model is basically stable:
P=ts.adfuller (strike_info[' close ') [0] #print pprice_log=strike_info[' close '].diff ()
AR (p) model, PACF is truncated at lag=p, that is, the values in the PACF graph fall into the broadband area.
MA (q) model, the ACF will intercept at LAG=Q, in the same vein, the values in the ACF graph fall into the broadband area.
The model is observed using ACF (autocorrelation coefficient) or pacf (partial autocorrelation coefficient):
Fig = Plt.figure (figsize= (12,8)) Ax1=fig.add_subplot (211) FIG = SM.GRAPHICS.TSA.PLOT_ACF (strike_info[' Close '],lags= 40,AX=AX1) ax2 = Fig.add_subplot (212) FIG = SM.GRAPHICS.TSA.PLOT_PACF (strike_info[' close '],lags=40,ax=ax2) plt.show ()
The PACF chart is preferred because PACF is truncated at approximately lag=1, that is, the value of PACF falls into the broadband area
Select AR (p=1) model for self-regression fitting to get the fitting effect:
Arma_mod80 = Sm.tsa.ARMA (strike_info[' close '), (1,0)). Fit () print (ARMA_MOD80.AIC,ARMA_MOD80.BIC,ARMA_MOD80.HQIC) Resid = Arma_mod80.residprint (Sm.stats.durbin_watson (arma_mod80.resid.values)) print (Stats.normaltest (resid)) FIG = Plt.figure (figsize= (12,8)) ax = fig.add_subplot (111) FIG = Qqplot (resid, line= ' Q ', Ax=ax, Fit=true) plt.show ()
Test: Calculate the residual of the sequence, basically white noise
Fig = Plt.figure (figsize= (12,8)) Ax1 = Fig.add_subplot (211) FIG = SM.GRAPHICS.TSA.PLOT_ACF (Resid.values.squeeze (), lags =40, ax=ax1) ax2 = Fig.add_subplot (212) FIG = SM.GRAPHICS.TSA.PLOT_PACF (Resid, lags=40, AX=AX2) plt.show ()
The model with autoregressive fitting is used to predict the results as follows:
Fig=plt.figure (figsize= (15,7)) price2=strike_info=history_n (symbol= ' Cffex. IF1808 ', frequency= ' 60s ', end_time= ' 2018-07-01 ', fields= ' Symbol,close,frequency,cum_volume ', count=1000,df=true) [' Close ']price3=strike_info=history_n (symbol= ' Cffex. IF1808 ', frequency= ' 60s ', end_time=now,fields= ' Symbol,close,frequency,cum_volume ', count=1000,df=true) [' Close '] Print Len (price2) fit = arma_mod80.predict (0, 1100) plt.plot (range (1100), fit[:1100],label= ' predict ') plt.plot (Price2, Label= ' price ') plt.legend (loc=4) plt.show ()
Using Python to make time series analysis of stock futures