17
18kobj = Kline().add_xaxis(data.index.strftime(“%Y-%m-%d”).tolist()).add_yaxis(“贵州茅台-日K线图”,kldata.tolist()).set_global_opts(
19 yaxis_opts=opts.AxisOpts(is_scale=True),
20 xaxis_opts=opts.AxisOpts(is_scale=True),
21 title_opts=opts.TitleOpts(title=“”))
22kobj.render()
贵州茅台股票日K线图如图。
为给定时间序列的财务图表,代码中对象data包含6个属性,依次为Open(开盘价)、High(最高价)、Low(最低价)、Close(收盘价)、Volume(成交量)、Adjusted(复权收盘价)。基于收盘价的重要性,可从收盘价的历史数据中分割训练集、验证集、测试集,使用适当的特征,建立预测模型,并实施预测。
向量自回归(VAR)模型就是非结构化的多方程模型,它的核心思想不考虑经济理论,而直接考虑经济变量时间时序之间的关系,避开了结构建模方法中需要对系统中每个内生变量关于所有内生变量滞后值函数建模的问题,通常用来预测相关时间序列系统和研究随机扰动项对变量系统的动态影响。VAR模型类似联立方程,将多个变量包含在一个统一的模型中,共同利用多个变量信息,比起仅使用单一时间序列的ARIMA等模型,其涵盖的信息更加丰富,能更好地模拟现实经济体,因而用于预测时能够提供更加贴近现实的预测值。此处拟基于贵州茅台股票数据,建立VAR的预测模型。使用后30天的数据作为验证集,剩余的数据用于建立预测模型。本节从VAR模型的平稳性检验出发,依次完成VAR模型的定阶及建模预测,最终通过分析验证集上的准确率来评估预测效果。
只有平稳的时间序列才能够直接建立VAR模型,因此在建立VAR模型之前,首先要对变量进行平稳性检验。通常可利用序列的自相关分析图来判断时间序列的平稳性,如果序列的自相关系数随着滞后阶数的增加很快趋于0,即落入随机区间,则序列是平稳的;反之,序列是不平稳的。另外,也可以对序列进行ADF检验来判断平稳性。对于不平稳的序列,需要进行差分运算,直到差分后的序列平稳后,才能建立VAR模型。此处首先提取用于建立预测模型的基础数据,并对其进行单位根检验,对应的Python代码如下:
1import statsmodels.tsa.stattools as stat
2import pandas_datareader.data as web
3import datetime as dt
4import pandas as pd
5import numpy as np
6
7data = web.DataReader(‘600519.ss’,‘yahoo’, dt.datetime(2014,1,1),dt.datetime(2019,9,30))
8subdata = data.iloc[:-30,:4]
9for i in range(4):
10 pvalue = stat.adfuller(subdata.values[:,i], 1)[1]
11 print(“指标 “,data.columns[i],” 单位根检验的p值为:”,pvalue)
12# 指标 High 单位根检验的p值为:0.9955202280850401
13# 指标 Low 单位根检验的p值为:0.9942509439755689
14# 指标 Open 单位根检验的p值为:0.9938548193990323
15# 指标 Close 单位根检验的p值为:0.9950049124079876
可以看到,p值都大于0.01,因此都是不平稳序列。现对subdata进行1阶差分运算,并再次进行单位根检验,对应的Python代码如下:
1subdata_diff1 = subdata.iloc[1:,:].values - subdata.iloc[:-1,:].values
2for i in range(4):
3 pvalue = stat.adfuller(subdata_diff1[:,i], 1)[1]
4 print(“指标 “,data.columns[i],” 单位根检验的p值为:”,pvalue)
5# 指标 High 单位根检验的p值为:0.0
6# 指标 Low 单位根检验的p值为:0.0
7# 指标 Open 单位根检验的p值为:0.0
8# 指标 Close 单位根检验的p值为:0.0
如结果所示,对这4个指标的1阶差分单独进行单位根检验,其p值都不超过0.01,因此可以认为是平稳的。
接下来就是为VAR模型定阶,可以让阶数从1逐渐增加,当AIC值尽量小时