基于LSTM的股票价格预测模型

2018 年 1 月 20 日 全球人工智能 BigQuant

-欢迎加入AI技术专家社群>>

- 日薪5K-10K招兼职AI讲师>>

LSTM(Long Short Term Memory)是一种 特殊的RNN类型,同其他的RNNs相比可以更加方便地学习长期依赖关系,因此有很多人试图将其应用于 时间序列的预测问题 上。汇丰银行全球资产管理开发副总裁Jakob Aungiers在他的个人网站上比较详细地介绍了LSTM在Time Series Prediction上的运用(http://www.jakob-aungiers.com/articles/a/LSTM-Neural-Network-for-Time-Series-Prediction),本文以这篇文章的代码为基础,以Bigquant为平台,介绍一下”LSTM-for-Time-Series-Prediction“的流程。


Keras是实现LSTM最方便的python库(Bigquant平台已经装好了,不用自己安装了)

##加载转换数据
例如希望根据前seq_len天的收盘价预测第二天的收盘价,那么可以将data转换为(len(data)-seq_len)(seq_len+1)的数组,由于LSTM神经网络接受的input为3维数组,因此最后可将input+output转化为(len(data)-seq_len)(seq_len+1)*1的数组

def  load_data(instrument,start_date,end_date,field,seq_len,prediction_len,train_proportion,normalise=True):    data=D.history_data(instrument,start_date,end_date,fields)    ……    seq_len=seq_len+1      result=[]    for index in range(len(data)-seq_len):        result.append(data[index:index+seq_len])        ……        # 规范化之后        x_train = train[::-1]        y_train = train[:, -1]        x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1)) 

       # 测试数据同样处理

##构建LSTM神经网络

model = Sequential()   model.add(LSTM(input_dim=layers[0],output_dim=layers[1],return_sequences=True)) model.add(Dropout(0.2)) model.add(LSTM(layers[1],return_sequences=False)) model.add(Dropout(0.2)) model.add(Dense(input_dim=layers[1],output_dim=layers[2])) model.add(Activation("linear")) rms=optimizers.RMSprop(lr=conf.lr, rho=0.9, epsilon=1e-06) model.compile(loss="mse", optimizer=rms)


此神经网络共三层,第一层为LSTM层,输入数据维度是1,输出数据维度为seq_len;第二层也为LSTM层,输入和输出维度均为seq_len层;第三层为Dense层,输入数据维度是seq_len,输出数据维度为1,最终将input与output对应起来。
compile:编译用来配置模型的学习过程,可选参数有loss,optimizer等。模型在使用前必须编译,否则在调用fit或evaluate时会抛出异常
loss为损失函数,可用mse,mae,binary_crossentropy等;
optimizers为优化器,即优化参数的算法,可供选择为SGD(随机梯度下降法),RMSprop(处理递归神经网络时的一个良好选择),Adagrad等(具体参见http://keras-cn.readthedocs.io/en/latest/ ,网页提供Keras相关函数的详细介绍)。

model.fit(X_train,y_train,batch_size=conf.batch,nb_epoch=conf.epochs,validation_split=conf.validation_split
fit为训练函数,batch_size:整数,训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步;nb_epoch:迭代次数;validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集

模型在test_data集上的预测,根据前seq_len长度预测下一时间的close。

另外,在此基础上,若希望预测prediction_len长度的close,则可在第一个predict_close的基础上,以此predict_close和前seq_len-1个true_close为input,预测下一个close,以此类推,可预测一定长度甚至全部长度的时间序列(predict_sequences_multiple,predict_sequence_full)

##回测(以predict_sequences_multiple为例)
思路是这样:看prediction_len长度内的涨跌,若prediction_len最后一天收盘价大于第一天的收盘价,则下买单;反之,不做单或者平仓

##效果
效果不是特别好,可能和我没有优化参数有很大关系,希望能抛砖引玉,完整策略代码如下,欢迎指正和讨论:slight_smile:

补充:如果运行出错,请检查M.trade模块是否是最新版本。

附件:基于LSTM的股票价格预测模型实例


> Loading data... 
> Data Loaded. Compiling...
> Compilation Time :  9.5367431640625e-07
Train on 2121 samples, validate on 236 samples
Epoch 1/1
2121/2121 [==============================] - 15s - loss: 0.0139 - val_loss: 0.0039
Training duration (s) :  37.46438002586365

[2017-07-20 12:20:09.734573] INFO: bigquant: backtest.v7 start ..
[2017-07-20 12:20:12.030542] INFO: Performance: Simulated 561 trading days out of 561.
[2017-07-20 12:20:12.031667] INFO: Performance: first open: 2015-02-17 14:30:00+00:00
[2017-07-20 12:20:12.032472] INFO: Performance: last close: 2017-06-09 19:00:00+00:00

[2017-07-20 12:20:14.872765] INFO: bigquant: backtest.v7 end [5.138171s].

原文:https://community.bigquant.com/t/%E9%87%8F%E5%8C%96%E5%AD%A6%E5%A0%82-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E4%BA%8ELSTM%E7%9A%84%E8%82%A1%E7%A5%A8%E4%BB%B7%E6%A0%BC%E9%A2%84%E6%B5%8B%E6%A8%A1%E5%9E%8B/201

扫描图中二维码,报名加入学习

点击“阅读原文”,查看详情

登录查看更多
2

相关内容

长短期记忆网络(LSTM)是一种用于深度学习领域的人工回归神经网络(RNN)结构。与标准的前馈神经网络不同,LSTM具有反馈连接。它不仅可以处理单个数据点(如图像),还可以处理整个数据序列(如语音或视频)。例如,LSTM适用于未分段、连接的手写识别、语音识别、网络流量或IDSs(入侵检测系统)中的异常检测等任务。
专知会员服务
171+阅读 · 2020年6月4日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
77+阅读 · 2020年2月3日
【华侨大学】基于混合深度学习算法的疾病预测模型
专知会员服务
96+阅读 · 2020年1月21日
金融时序预测中的深度学习方法:2005到2019
专知会员服务
166+阅读 · 2019年12月4日
使用LSTM模型预测股价基于Keras
量化投资与机器学习
34+阅读 · 2018年11月17日
【年度系列】使用LSTM预测股票市场基于Tensorflow
量化投资与机器学习
19+阅读 · 2018年10月16日
基于LSTM深层神经网络的时间序列预测
论智
21+阅读 · 2018年9月4日
基于 Keras 用 LSTM 网络做时间序列预测
R语言中文社区
21+阅读 · 2018年8月6日
基于 Keras 用深度学习预测时间序列
R语言中文社区
23+阅读 · 2018年7月27日
时间序列深度学习:状态 LSTM 模型预测太阳黑子(下)
R语言中文社区
9+阅读 · 2018年6月15日
手把手教你用Python库Keras做预测(附代码)
数据派THU
14+阅读 · 2018年5月30日
Arxiv
6+阅读 · 2020年4月14日
Hierarchy Parsing for Image Captioning
Arxiv
6+阅读 · 2019年9月10日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
4+阅读 · 2015年8月25日
Arxiv
3+阅读 · 2015年5月16日
VIP会员
相关资讯
使用LSTM模型预测股价基于Keras
量化投资与机器学习
34+阅读 · 2018年11月17日
【年度系列】使用LSTM预测股票市场基于Tensorflow
量化投资与机器学习
19+阅读 · 2018年10月16日
基于LSTM深层神经网络的时间序列预测
论智
21+阅读 · 2018年9月4日
基于 Keras 用 LSTM 网络做时间序列预测
R语言中文社区
21+阅读 · 2018年8月6日
基于 Keras 用深度学习预测时间序列
R语言中文社区
23+阅读 · 2018年7月27日
时间序列深度学习:状态 LSTM 模型预测太阳黑子(下)
R语言中文社区
9+阅读 · 2018年6月15日
手把手教你用Python库Keras做预测(附代码)
数据派THU
14+阅读 · 2018年5月30日
相关论文
Arxiv
6+阅读 · 2020年4月14日
Hierarchy Parsing for Image Captioning
Arxiv
6+阅读 · 2019年9月10日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
4+阅读 · 2015年8月25日
Arxiv
3+阅读 · 2015年5月16日
Top
微信扫码咨询专知VIP会员