首页 > 编程语言 >基于LSTM的股票价格预测模型【附源码】

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

时间:2023-12-01 09:11:06浏览次数:49  
标签:model seq 股票价格 len train LSTM data 源码

导语

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

LSTM的股票价格预测

LSTM(Long Short Term Memory)是一种 特殊的RNN类型,同其他的RNNs相比可以更加方便地学习长期依赖关系,因此有很多人试图将其应用于 时间序列的预测问题 上。

汇丰银行全球资产管理开发副总裁Jakob Aungiers在他的个人网站上比较详细地介绍了LSTM在Time Series Prediction上的运用(https://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的股票价格预测模型实例(文末策略源码)

 

参考资料:

  • 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的股票价格预测模型

From:BigQuant量化知识库

 

 

 

标签:model,seq,股票价格,len,train,LSTM,data,源码
From: https://www.cnblogs.com/bigquant/p/17867867.html

相关文章

  • 基于SpringBoot的在线视频教育平台-计算机毕业设计源码+LW文档
    一、选题背景及选题意义(国内外研究现状、初步设想及拟解决的问题):选题背景及意义:在线教育顾名思义,是以网络为介质的教学方式,通过网络,学员与教师即使相隔万里也可以开展教学活动;此外,借助网络课件,学员还可以随时随地进行学习,真正打破了时间和空间的限制,对于工作繁忙,学习时间不固定的......
  • Springboot017学生读书笔记共享-计算机毕业设计源码+LW文档
    摘要本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶......
  • 第三方实验室LIMS管理系统源码
    LIMS实验室信息管理系统源码LIMS系统的功能根据实验室的规模和任务而有所不同,其系统主要功能包括:系统维护、基础数据编码管理,样品管理、数据管理、报告管理、报表打印、实验材料管理、设备管理等。它可以取代传统的手工管理模式而给检测实验室带来巨大的变化,提高检测实验室的整体......
  • 预约系统源码解析:打造智能定制化预约服务的技术奇迹
    在当今数字化时代,预约系统的重要性日益凸显,而预约系统源码的开放将为各行业带来更加灵活、智能的预约解决方案。本文将深入探讨预约系统源码的技术内幕,为开发者提供实用的代码示例,助力打造智能定制化的预约服务。技术栈概览预约系统源码采用了现代化的技术栈,其中包括前端使用React......
  • 构建智能预约体验:深度解析预约系统源码的代码精髓
    随着数字化时代的发展,预约系统在各行业中扮演着越来越重要的角色。本文将深入研究预约系统源码,通过代码示例分析其技术要点,为开发者提供实用的指导,助力构建智能、高效的预约体验。技术栈综述预约系统源码采用了现代化的技术栈,主要包括前端使用React框架,后端采用Node.js和Express框......
  • 视频直播源码,去掉Button自带边框
    视频直播源码,去掉Button自带边框实现html代码 <view><buttonclass="contactBtn"open-type="contact"@contact="handleContact"session-from="sessionFrom">意见反馈</button></view> ​css代码.contactBtn{border:none......
  • 成品直播源码推荐,实现文字加载效果 文字跳动
    成品直播源码推荐,实现文字加载效果文字跳动实现<viewv-elseclass="status-working"><textclass="letterletter1">充</text><textclass="letterletter2">电</text><textclass="letterletter3">中</text>......
  • 直播商城源码,验证码 获取码输入框实现
    直播商城源码,验证码获取码输入框实现功能实现及原理输入格-自动切换实现对每个input输入框操作利用定时器和标记 代码实现 /** *输入框及光标 */constfirstFocus=ref(true)constsecondFocus=ref(false)constthirdFocus=ref(false)constfourFocus=ref(fa......
  • Spring源码学习之Web数据绑定器WebDataBinder
    WebDataBinder1.描述特殊的数据绑定器用于从web请求参数到JavaBean对象的数据绑定。专为web环境,但不依赖于ServletAPI;作为更具体的DataBinder变体的基类,例如ServletRequestDataBinder。2.注意:数据绑定会暴露对象图中不打算被外部客户端访问或修改的部分,从而导致安全问题。因......
  • LIMS实验室信息管理系统源码,支持二次开发
    LIMS实验室信息管理系统源码,支持二次开发LIMS实验室信息管理系统是一种软件类型,旨在通过跟踪与样品、实验、实验室工作流程和仪器相关的数据,提高实验室产能和效率。覆盖实验室从合同审批、委托下单、样品管理、生产调度、检测记录、报告管理、财务开票结算等全业务的过程管理。1、......