导语:本文介绍了LSTM的相关内容和在股票价格预测上的应用。

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平台已经装好了,不用自己安装了)

from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.models import Sequential
from keras import optimizers

加载转换数据

例如希望根据前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之间的浮点数,用来指定训练集的一定比例数据作为验证集

predicted = model.predict(data)
predicted = np.reshape(predicted, (predicted.size,))

模型在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最后一天收盘价大于第一天的收盘价,则下买单;反之,不做单或者平仓

效果

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

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

附件:基于LSTM的股票价格预测模型实例(文章结尾获取策略源码)

本文由BigQuant宽客学院推出,版权归BigQuant所有,转载请注明出处。

参考资料:

  • LSTM策略主体参考http://www.jakob-aungiers.com/articles/a/LSTM-Neural-Network-for-Time-Series-Prediction,在一些地方做了一些更改,使之能在bigquant平台上使用以及能够自己调整更多参数
  • 对keras有兴趣者可参考http://keras-cn.readthedocs.io/en/latest/,这里有对keras每个函数的详细介绍

原码链接:《基于LSTM的股票价格预测模型

BigQuant人工智能量化投资平台

基于LSTM的股票价格预测模型【附源码】相关推荐

  1. 058基于Springboot医院管理系统【附源码】

    大家好,最近在网上又找到了一个学习项目,在此写一篇博文记录一下,在java项目的专栏中我会持 续的更新在网上获取到的java学习项目,这个专栏是我的项目收集专栏吧.在博文中我也会陆续的加入项目的演示视 ...

  2. java基于Redis实现排行榜功能-附源码

    java基于Redis Zset实现排行榜功能 前言 做之前要思考的问题? Zset怎么存储需要的多个字段? 话不多说先上效果图 数据存储格式 代码 源码下载 闲暇之余,整理了一下之前利用Redis ...

  3. 多因子系列(二):基于机器学习选股策略(附源码)

    在第一篇中,我们实现了一个简单单因子的策略模型,但是在实际中,我们是远远不会满足于一个因子甚至几个因子的. 市场上目前挖掘出来的因子成千上万个,如何有效筛选出比较好的几个因子构建一个选股模型呢? 手动 ...

  4. SpringSession实战项目(基于SpringBoot项目)【附源码】

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨怀瑾握瑜 来源链接: https://www. ...

  5. 实战 | 计算器/数码管数字识别 基于OpenCV和EasyOCR/PaddleOCR(附源码)

    点击下方卡片,关注"OpenCV与AI深度学习"公众号! 视觉/图像重磅干货,第一时间送达! 导读 本文主要介绍一个计算器显示数字识别的OCR实例,基于OpenCV和EasyOCR ...

  6. java基于springboot二手车交易管理系统附源码

    二手车交易管理系统是基于java编程语言,mysql数据库,springboot框架设计,本系统主要分为用户和管理员两个角色,其中用户的功能有用户注册和登陆系统,用户查网站新闻,查看二手车,在线预定, ...

  7. 基于springboot万花筒系统 毕业设计-附源码345600

    摘要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代.在 ...

  8. 基于SSM养老院管理系统毕业设计-附源码221609

    摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设养老院管 ...

  9. java基于springboot美食推荐管理系统附源码风格

    美食推荐管理系统是基于java编程语言,springboot框架,mysql数据库开发,本系统主要分为用户和管理员两个角色,其中用户注册登陆后可以查看美食,教程,社区,资讯公告,收藏,评论:管理员对用 ...

最新文章

  1. (传送门)linux命令总结dd命令详解
  2. 零基础学前端之css3高级特效
  3. Python中的字典dict
  4. 行!看到抖音上Python程序员晒得工资条,我沉默了......
  5. linux 命令行看图片,骚操作:用终端打开图片
  6. cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
  7. 下列计算机设备中运行最慢的是,下列4种存储设备中,读写速度最慢的是( )。A.内存条B.硬盘C. CPU内部寄存器D. Cache - 试题答案网问答...
  8. 海洋工作室——网站建设专家:全数据库比较工具
  9. Activity 切换 动画
  10. 移动端安全 - 安卓Android - 工具相关
  11. 【BZOJ 4551】【TJOI2016】【HEOI2016】树
  12. 在Ubuntu16.04 安装RabbitVCS
  13. 基于SSL/TLS双向安全连接设备CA证书认证
  14. 学计算机轻松的表情包,轻松的表情包
  15. 众达两化融合贯标日记08~培训23001标准
  16. 【公告】淘宝 npm 域名即将切换 npmmirror 重构升级
  17. C/C++编程刷题分享—常见的经典面试题一
  18. PTA 7-4 平面向量加法
  19. 模板的超详细的案例讲解(上)
  20. 材料模拟计算超算云平台上线,发布会推出两项优惠政策

热门文章

  1. 这下好了大盘暴跌了前几天让卖出的指标灵验了
  2. 比特同步和帧同步的区别
  3. 首款数字银行卡来了,刷脸带动银行数字化转型 游遍全球
  4. 十二种值得深交的男生和十一种值得深交的女生
  5. U8流程财务段的处理
  6. 阿里巴巴B2B测试用例编写规范
  7. (数理方程)Matlab模拟琴弦振动发声并显示振动图像(matlab)_人工智能
  8. 【论文翻译】ORB-SLAM: A Versatile and Accurate Monocular SLAM System
  9. 《Grasshopper参数化设计教程》实操 Part A Level 1
  10. Cadence Allegro 17.4学习记录开始25-PCB Editor 17.4软件PCB中布线操作基础