基于LSTM神经网络的通用股票预测源代码+模型+数据集

news2024/12/25 12:27:45

基于神经网络的通用股票预测模

下载地址:基于LSTM神经网络的通用股票预测源代码+模型+数据集

0 使用方法 How to use

    1. 使用getdata.py下载数据,或者使用自己的数据源,将数据放在stock_daily目录下
    1. 使用data_preprocess.py预处理数据,生成pkl文件,放在pkl_handle目录下(可选)
    1. 调整train.py和init.py中的参数,先使用predict…py训练模型,生成模型文件,再使用predict.py进行预测,生成预测结果或测试比照图

0.1 predict.py参数介绍 Introduction to predict.py parameters

    1. –model: 模型名称,目前支持lstm和transformer
    1. –mode: 模式,目前支持train,test和predict
    1. –pkl: 是否使用pkl文件,目前支持1和0
    1. –pkl_queue: 是否使用pkl队列模式,以增加训练速度,目前支持1和0
    1. –test_code: 测试代码,目前支持股票代码
    1. –test_gpu: 是否使用gpu测试,目前支持1和0
    1. –predict_days: 预测天数,目前支持数字

0.2 init.py部分参数介绍 Introduction to some parameters in init.py

    1. TRAIN_WEIGHT: 训练权重,目前支持小于等于1的数字
    1. SEQ_LEN: 序列长度,目前支持数字
    1. BATCH_SIZE: 批量大小,目前支持数字
    1. EPOCH: 训练轮数,目前支持数字
    1. LEARNING_RATE: 学习率,目前支持小于等于1的数字
    1. WEIGHT_DECAY: 权重衰减,目前支持小于等于1的数字
    1. SAVE_NUM_ITER: 保存模型间隔,目前支持数字
    1. SAVE_NUM_EPOCH: 保存模型间隔,目前支持数字
    1. SAVE_INTERVAL: 保存模型时间间隔(秒),目前支持数字
    1. OUTPUT_DIMENSION: 输出维度,目前支持数字
    1. INPUT_DIMENSION: 输入维度,目前支持数字
    1. NUM_WORKERS: 线程数,目前支持数字
    1. PKL: 是否使用pkl文件,目前支持True和False
    1. BUFFER_SIZE: 缓冲区大小,目前支持数字
    1. symbol: 股票代码,目前支持股票代码或Generic.Data表示全部已下载的数据
    1. name_list: 需要预测的内容名称
    1. use_list: 需要预测的内容开关,1表示使用,0表示不使用

1 项目介绍 Project Introduction

New

  • 20230402

    1. 修改dataset读取方式,使用data queue以及buffer,减少IO次数,提高训练速度
    1. 将全局变量移动到init.py中,方便修改
  • 20230328

    1. 修改预处理数据文件格式,增加ts_code和date两个字段,方便后续使用
    1. 修改lstm和transformer模型,以支持混合长度输入
    1. 在transformer模型,增加了 decoder层,期望增加预测精度
  • 20230327

    1. 修改了部分运行逻辑,配合load pkl预处理文件,极大的提高了训练速度
    1. 修正了一个影响极大的关于数据流方向的bug
    1. 尝试使用新的模型
    1. 增加了一个新的指标,用于评估模型的好坏
  • 20230325

    1. 增加数据预处理功能,并能将预处理好的queue保存为pkl文件,减少IO损耗
    1. 修改不必要的代码
    1. 简化逻辑,减少时间负责度,方向是以空间换时间
    1. 增加常见的指标,增加预测精度
  • 20230322

    1. 增加输出内容控制,可以自行定义输出的内容和数量
    1. 修改读取数据源为本地csv文件
    1. 修改IO逻辑,使用多线程读取指定文件夹下的csv文件,并存储到内存中,反复训练,减少IO次数
    1. 修改lstm, transformer模型
    1. 增加下载数据功能,请使用自己的api token

获取下载数据的api token: Get the api token to download data:

    1. 在https://tushare.pro/ 网站注册,并按要求获取足够的积分(到2023年3月为止,只需要修改下用户信息,就足够积分了,以后不能确定)
    1. 在https://tushare.pro/user/token 页面可以查看自己的api token
    1. 在本项目根目录建立一个api.txt,并将获得的api token写入这个文件
    1. 使用本项目getdata.py,即可自动下载日数据

股票行情是引导交易市场变化的一大重要因素,若能够掌握股票行情的走势,则对于个人和企业的投资都有巨大的帮助。然而,股票走势会受到多方因素的影响,因此难以从影响因素入手定量地进行衡量。但如今,借助于机器学习,可以通过搭建网络,学习一定规模的股票数据,通过网络训练,获取一个能够较为准确地预测股票行情的模型,很大程度地帮助我们掌握股票的走势。本项目便搭建了**LSTM(长短期记忆网络)**成功地预测了股票的走势。

首先在数据集方面,我们选择上证000001号,中国平安股票(编号SZ_000001)数据集采用2016.01.01-2019.12.31股票数据,数据内容包括当天日期,开盘价,收盘价,最高价,最低价,交易量,换手率。数据集按照0.1比例分割产生测试集。训练过程以第T-99到T天数据作为训练输入,预测第T+1天该股票开盘价。(此处特别感谢Tushare提供的股票日数据集,欢迎大家多多支持)

训练模型及结果方面,我们首先采用了LSTM(长短期记忆网络),它相比传统的神经网络能够保持上下文信息,更有利于股票预测模型基于原先的行情,预测未来的行情。LSTM网络帮助我们得到了很好的拟合结果,loss很快趋于0。之后,我们又采用比LSTM模型更新提出的Transformer Encoder部分进行测试。但发现,结果并没有LSTM优越,曲线拟合的误差较大,并且loss的下降较慢。因此本项目,重点介绍LSTM模型预测股票行情的实现思路。

2 LSTM模型原理 Principles of LSTM model

2.1 时间序列模型 Time Series Model

时间序列模型:时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大小的值改变顺序后输入模型产生的结果是不同的。

2.1 从RNN到LSTM From RNN to LSTM

RNN:递归神经网络RNN每一次隐含层的计算结果都与当前输入以及上一次的隐含层结果相关。通过这种方法,RNN的计算结果便具备了记忆之前几次结果的特点。其中,为输入层,o为输出层,s为隐含层,而t指第几次的计算,V,W,U为权重,第t次隐含层状态如下公式所示:

S t = f ( U ∗ X t + W ∗ S t − 1 )  (1) St = f(U*Xt + W*St-1) (1) St=f(UXt+WSt1) (1)
RNN

可见,通过RNN模型想要当前隐含层状态与前n次相关,需要增大计算量,复杂度呈指数级增长。然而采用LSTM网络可解决这一问题。

LSTM(长短期记忆网络)LSTM (Long Short-Term Memory Network):

LSTM是一种特殊的RNN,它主要是Eileen解决长序列训练过程中的梯度消失和梯度爆炸问题。相比RNN,LSTM更能够在长的序列中又更好的表现。
请添加图片描述

请添加图片描述

  • LSTM内部有三个阶段:忘记阶段、选择记忆阶段、输出阶段 LSTM has three stages: the forget stage, the select memory stage, and the output stage.

    • **忘记阶段:**通过计算来作为门控,控制上一个状态的 需要遗忘的内容。

    • **选择记忆阶段:**对输入进行选择记忆,门控信号由进行控制,输入内容由[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传进行表示。

    • **输出阶段:**决定当前状态输出的内容,通过 控制,并且还对上一阶段得到的进行放缩。

    请添加图片描述

3LSTM预测股票模型实现 LSTM prediction model implementation for stock forecasting

1、数据集准备

1. Data set preparation

  • 数据集分割:数据集按照0.1比例分割产生测试集。训练过程以第T-99到T天数据作为训练输入,预测第T+1天该股票开盘价。

  • 对数据进行标准化:训练集与测试集都需要按列除以极差。在训练完成后需要进行逆处理来获得结果。

t r a i n ( [ : , i ] ) = ( t r a i n ( [ : , i ] ) ) − m i n ( t r a i n [ : , i ] ) / ( m a x ( t r a i n [ : , i ] ) − m i n ( t r a i n [ : , i ] ) ) ( 2 ) train([:,i])=(train([:,i]))-min(train[:,i])/(max(train[:,i])-min(train[:,i])) (2) train([:,i])=(train([:,i]))min(train[:,i])/(max(train[:,i])min(train[:,i]))2

t e s t ( [ : , i ] ) = ( t e s t ( [ : , i ] ) ) − m i n ( t r a i n [ : , i ] ) / ( m a x ( t r a i n [ : , i ] ) − m i n ( t r a i n [ : , i ] ) ) ( 3 ) test([:,i])=(test([:,i]))-min(train[:,i])/(max(train[:,i])-min(train[:,i])) (3) test([:,i])=(test([:,i]))min(train[:,i])/(max(train[:,i])min(train[:,i]))3

2、模型搭建

2. Model construction

使用pytorch框架搭建LSTM模型,torch.nn.LSTM()当中包含的参数设置

  • 输入特征的维数: input_size=dimension(dimension=8)

  • LSTM中隐层的维度: hidden_size=128

  • 循环神经网络的层数:num_layers=3

  • batch_first: TRUE

  • 偏置:bias默认使用

全连接层参数设置:

  • 第一层:in_features=128, out_featrues=16

  • 第二层:in_features=16, out_features=1 (映射到一个值)

3、模型训练

3. Model training

  • 经过调试,确定学习率lr=0.00001

  • 优化函数:批量梯度下降(SGD)

  • 批大小batch_size=4

  • 训练代数epoch=100

  • 损失函数:MSELoss均方损失函数,最终训练模型得到MSELoss下降为0.8左右。

请添加图片描述

4、模型预测

4. Model prediction

测试集使用已训练的模型进行验证,与真实数据不叫得到平均绝对百分比误差(MAPELoss)为0.04,可以得到测试集的准确率为96%。

请添加图片描述

5、模型成果

5. Model results

下图是对整体数据集最后一百天的K线展示:当日开盘价低于收盘价则为红色,当日开盘价高于收盘价为绿色。图中还现实了当日交易量以及均线等信息。

请添加图片描述

LSTM模型进行预测的测试集结果与真实结果对比图,可见LSTM模型预测的结果和现实股票的走势十分接近,因此具有很大的参考价值。

请添加图片描述

LSTM模型训练过程中MSELoss的变化,可以看到随着训练代数的增加,此模型的MSELoss逐渐趋于0。

请添加图片描述

4结语

4 Conclusion

本项目使用机器学习方法解决了股票市场预测的问题。项目采用开源股票数据中心的上证000001号,中国平安股票(编号SZ_000001),使用更加适合进行长时间序列预测的LSTM(长短期记忆神经网络)进行训练,通过对训练集序列的训练,在测试集上预测开盘价,最终得到准确率为96%的LSTM股票预测模型,较为精准地实现解决了股票市场预测的问题。

在项目开展过程当中,也采用过比LSTM更加新提出的Transformer模型,但对测试集的预测效果并不好,后期分析认为可能是由于在一般Transformer模型中由encoder和对应的decoder层,但在本项目的模型中使用了全连接层代替decoder,所以导致效果不佳。在后序的研究中,可以进一步改进,或许可以得到比LSTM更加优化的结果。

下载地址:基于LSTM神经网络的通用股票预测源代码+模型+数据集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于RK3568的Linux驱动开发——GPIO知识点(一)

authordaisy.skye的博客_CSDN博客-Qt,嵌入式,Linux领域博主系列基于RK3568的Linux驱动开发—— GPIO知识点(二)_daisy.skye的博客-CSDN博客 gpio bank RK3568 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0-A7、B0-B7、 C0-C7、 D0…

CSS基础样式

1.高度和宽度 .c1{height:300px;width:500px; } 注意事项: 宽度,支持百分比 行内标签:默认无效 块级标签:默认有效(右侧区域就算是空白,也不给占用) 2.块级和行内标签 css样式:标签…

软件工程实验:用例图设计

目录 前言 实验目的 实验要求 实验步骤 结果展示 总结 前言 软件工程导论实验是一门旨在培养学生掌握软件开发过程中的基本方法和技能的课程。本实验的主题是用例图设计,用例图是一种描述系统功能需求的图形化工具,它可以帮助分析和设计系统的行为…

初识Tkinter弹窗

Tkinter弹窗 Tkinter是什么 Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口。作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面&#xff…

【蓝桥杯省赛真题17】python删除字符串 青少年组蓝桥杯python编程省赛真题解析

目录 python删除字符串 一、题目要求 1、编程实现 2、输入输出 二、解题思路

Qt创建SDK库(dll动态库)并调用SDK库(dll动态库)

Qt创建SDK库(dll动态库)并调用SDK库(dll动态库) 一、项目场景 在日常的项目中,我们经常会遇到调用别人的数学库、线程库、图形库等操作。这些库通常就被称为SDK,SDK全称是Software Development Kit(软件开发工具包),…

【C++ 五】结构体

结构体 文章目录 结构体前言1 结构体基本概念2 结构体定义和使用3 结构体数组4 结构体指针5 结构体嵌套结构体6 结构体做函数参数7 结构体中 const 使用场景8 结构体案例8.1 案例一8.2 案例二 总结 前言 本文包含结构体基本概念、结构体定义和使用、结构体数组、结构体指针、结…

gitlab CI CD基础概念

gitlab CI CD基础概念 本文目录 gitlab CI CD基础概念基础概念Pipelines:流水线JobsStage .gitlab-ci.yml使用模式1:官网gitlab 本地gitlab runner使用模式2:docker gitlab docker gitlab runner 基础概念 开发模式转变:瀑布模…

【MySQL】(5)聚合函数

文章目录 聚合函数COUNT 函数SUM 函数AVG 函数MAX 函数 MIN 函数 group by 子句简介示例:scott 数据库单列分组多列分组 having 子句总结 聚合函数 在 MySQL 中,聚合函数是用于计算多行数据的统计信息的函数,例如总和、平均值、最大值、最小…

图扑数字孪生工厂合集 | 智慧工厂可视化,推动行业数字化转型

前言 图扑软件基于 HTML5(Canvas/WebGL/WebVR)标准的 Web 技术,满足了工业物联网跨平台云端化部署实施的需求,以低代码的形式自由构建三维数字孪生、大屏可视化、工业组态等等。从 SDK 组件库,到 2D 和 3D 编辑&#…

LeetCode算法小抄--花式遍历二叉树

LeetCode算法小抄--花式遍历二叉树花式遍历二叉树翻转二叉树[226. 翻转二叉树](https://leetcode.cn/problems/invert-binary-tree/)填充节点的右侧指针[116. 填充每个节点的下一个右侧节点指针](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/)将…

OpenCV实例(一)人脸检测

OpenCV实例(一)人脸检测 1.人脸检测和识别概述2.使用OpenCV进行人脸检测2.1静态图像中的人脸检测2.2视频中的人脸检测 作者:Xiou 1.人脸检测和识别概述 计算机视觉使很多任务成为现实,其中两项任务就是人脸检测(在图…

psql Centos7安装postgresql-12

之前在centos7上下的postgresql,它的数据库实例在 “var/lib/pgsql/” 下。这就导致了系统用户的"postgres"的家目录跟postgresql数据库目录不在同一目录下。因此,今天趁着有闲暇时间把数据库装到"postgres"目录下,顺便把…

罗丹明荧光染料标记叶酸,FA-PEG2000-RB,叶酸-聚乙二醇-罗丹明; Folic acid-PEG-RB

FA-PEG-RB,叶酸-聚乙二醇-罗丹明 中文名称:叶酸-聚乙二醇-罗丹明 英文名称:FA-PEG-RB, Folic acid-PEG-RB 性状:粉红色固体或液体,取决于分子量 溶剂:溶于水和DMSO、DMF等常规性有机溶剂 保存条件:-2…

学习系统编程No.17【vscode实战】

引言: 北京时间:2023/4/11/7:25,昨天11点洗澡,洗完直接睡,导致现在头发愈发不能看,So,平头时刻将要来临,头发太长真的很不方便,昨天已经更文啦!这个星期一定…

miss_01(简单密码学及音频隐写)

下载附件,解压时提示输入密码 使用010editor打开,发现deFlags值被修改 (如果frFlags 或者 deFlags 的值不为0就会导致zip的伪加密) 将deFlags的值修改为0,并将文件另存为1.zip 再次打开,没有密码提示了 打…

酒吧攻略:一文解读酒吧类型

目前主流酒吧类型可以大致分为以下几类: 夜店:(NIGHT CLUB):KTV,夜总会,酒吧等总称club,主要指的就是夜店。 Bar:多指娱乐休闲类的酒吧,提供现场的乐队或歌…

UG导出点集坐标到txt文本文档中

文章目录 前言一、下载文件二、使用步骤1.运行Grip程序2.选择下载的points-file.grx文件3.选择要导出的文本文档的位置4.选择想要导出的点集5.查看文件 参考 前言 将UG中的离散的点或者点集坐标导出到文本文档; 原文地址 俩文件链接如下,失效了可以私信…

客快物流大数据项目(一百一十四):负载均衡 Spring Cloud Ribbon

文章目录 负载均衡 Spring Cloud Ribbon 一、Ribbon 简介 二、负载均衡源码跟踪探究 负载均衡 Spring Cloud Ribbon 为了增加服务并发访问量,我们搭建集群,集群的负载均衡怎么实现?

OpenAI-ChatGPT最新官方接口《速率并发限制》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(八)(附源码)

Rate limits 速率并发限制前言Introduction 导言What are rate limits? 什么是速率限制?Why do we have rate limits? 为什么我们有速率限制?What are the rate limits for our API? 我们API的速率限制是什么?GPT-4 rate limits GPT-4速率…