基于模型构建的策略通常会选择模型预测最高的前N%买入,即上中最右边一列是真正会用于交易的地方,
使用全部的特征进行预测,预处理流程如下:
平稳的时间序列数据需要满足以下三个条件:滑动窗口内的序列值均值为固定常数:Ext=eE_{xt}=eExt=e滑动窗口内的序列值方差为固定常数:Varxt=vVar_{xt}=vVarxt=v序列存在自相关性,协方差只与时间间隔有关:Cov=c∗kCov=c*kCov=c∗k其中,e,v,c都是常数;k代表时间间隔也是常数非平稳的时间序列数据:与平稳相对的,统计指标会随时间变化
这里我们选择LSTM模型来进行建模,原因是深度学习中类似LSTM结构与激活函数等非线性变化,可以很好的突破“平稳”的前提假设,用魔法打败魔法。但与之对应的,我们需要尽可能多的构造有效性较高的数据,以提升模型的效果。
最终预测效果
趋势:长期的趋势季节性:存在固定且已知的周期变化趋势周期性:存在不固定的周期变化趋势噪声:一定的随机性
过去5日换手率均值过去10日换手率均值过去5日涨跌幅过去10日涨跌幅MACD指标DIF值MACD指标DEA值MACD值阿隆指标DOWN值阿隆指标UP值
LSTM训练流程
但是因为股票序列本身就是时序数据,因此在计量经济学中很早就以股票数据为例,讲解时间序列数据的分析的案例。这里我们使用LSTM,一种很常用的时间序列数据的分析模型,对股价进行预测。
其中,训练集训练效果如下所示:
我们发现,预测效果相对较好的地方呈现“X”的形状,产生这个原因的解释是:
时序数据的基本假设称为“平稳时间序列假设”:
对全部数据进行标准化切分数据:训练集:2015-2020年的后复权股票数据验证集:训练集中最后的10%的数据测试集:2020-2023年的后复权股票数据优化器:Adamloss函数:MSEBatchsize:64
预测之后,我们对测试集的结果与预测的结果分别进行等频的数据分箱,分为10个有固定数量的区间,然后绘制的胜率效果如下:
input_size:x的特征维度hidden_size:隐藏层的特征维度num_layers:lstm隐层的层数,默认为1
时间序列的数据通常被认为是由以下几个因素构成的:
传统的线性模型,由于需要使用最小二乘法与最大似然估计对数据进行拟合,因此前提假设需要满足“序列平稳”,而相对于使用截面数据,机器学习的前提假设是样本点之间“独立同分布”。而对于金融数据来讲,截面因子逻辑上讲其实并不满足独立同分布,序列想要满足相对平稳的要求往往要用到周线数据+2阶差分,因此在应用层面,无法满足我们细粒度的研究,尤其是在量化应用上,交易机会瞬息万变,研究粒度越小越好。
LSTM建模代码
这里我们构造的特征简单一些,与使用SVM的特征一样:
特征构造
训练150次
LSTM量化建模
模型训练/验证效果
博主使用pytorch构造LSTM模型,模型代码如下:
时间序列数据处理的特点
验证集的效果如下所示:
文章为作者独立观点,不代表股票交易接口观点