深度学习RNN实现股票预测实战(附数据、代码)

2023-05-16

背景知识

最近再看一些量化交易相关的材料,偶然在网上看到了一个关于用RNN实现股票预测的文章,出于好奇心把文章中介绍的代码在本地跑了一遍,发现可以work。于是就花了两个晚上的时间学习了下代码,顺便把核心的内容翻译成中文分享给大家。

 

首先讲讲对于股票预测的理解,股票是一种可以轻易用数字表现律动的交易形式。因为大数定理的存在,定义了世间所有的行为都可以通过数字表示,并且存在一定的客观规律。股票也不例外,量化交易要做的就是通过数学模型发现股票的走势趋势。“趋势”要这样理解:对于股票的预测,不是说我知道这个股票昨天指数是多少,然后预测今天他的指数能涨到多少。而是,我们通过过去一段时间股票的跌或者涨,总结出当出现某种波动的时候股票会有相应的涨或者跌的趋势。于是就引出了RNN的概念。


RNN是一种深度学习的网络结构,RNN的优势是它在训练的过程中会考虑数据的上下文联系,非常适合股票的场景,因为某一时刻的波动往往跟之前的走势蕴含某种联系。RNN是由一个个神经元cell组成,然而传统的RNN当网络过于复杂的时候,后方节点对于前方的感知力会下降,LSTMLong-short Term Memory)是一种变型,从名字就可以看出来,LSTM可以增加记忆力,解决上面提到的问题。对于股票这个场景,我们就可以通过LSTM来实现股票的走势的预测。



在股票这个场景下,通过上面这个图可以看出来,输入的是时间tt+1t+2的股票信息,可以返回t+1t+2t+3的股票信息,而且上下节点前后依赖,通过LSTM模型对于这样的股票序列进行预测,所以股票预测的关键就是首先构建股票序列化数据,然后训练LSTM模型,最终通过这个模型对于股票进行预测,以上就是大体的一些思路。

数据说明

本次实验使用的是一只叫SP500的股票,可以从雅虎下载这只股从50年到现在每天的走势情况,这里只需要关心每次收盘价格,也就是close字段即可。数据截图:


代码

代码文件有以下四部分:


其中SP500的股票数据需要放在data文件夹下。依赖的库包括,

numpy==1.13.1pandas==0.16.2 scikit-learn==0.16.1 scipy==0.19.1 tensorflow==1.2.1

在项目目录下执行以下shell即可开始训练:

python main.py --stock_symbol=SP500 --train --input_size=1 --lstm_size=128 --max_epoch=50


分别介绍下每个代码:


data_model.py

这个文件是构建训练数据,通过pandas库去读数据SP500.csv文件,然后只取close这个字段,将每天的close数据作为代表当天股票的市值,如下图所示。


这里做了一次归一化,因为股票在50年的市值是每股19块左右,到了2017年涨到了2600多块,分布很不均匀,于是通过把每天股票close值除以历史股票最高值,将所有数据的定义域限定在01之间。接着构建预测集,涉及到两个参数input_sizenum_steps,当input_size=3 and num_steps=2时会构建以下数据集。


012天的股票和第345天的股票为训练集,第678天的股票是目标列,就构成了监督学习数据。以此类推,将所有数据构成训练数据集。


model_rnn.py

构建模型的文件,通过build_graph函数去构建整个的LSTM网络,同时定义最优化求法的optimizer。通过train函数定义数据如何在graph中训练,包括model参数的存储。plot_samples会在训练过程中将测试集数据和训练数据的比较打印成图片输出。

 

main.py

入口代码,定义运行参数,包括epoch的轮数、learning_rate等等。

 

结果评估

其实,在测试的时候,整个工程就将生成的预测数据和真实数据进行比较并且在images文件夹下生成图片。我们通过图片直观的可以看下随着训练的进行,是否真正可以模拟出股票曲线,首先是epoch=5的时候,也就是训练第5轮的时候,我们看到绿色的predict曲线和蓝色的truth曲线拟合的并不好。


 

再来看下又过了40多轮训练生成的图片:



我们看到股票的曲线拟合程度已经进步非常多,相信随着数据和训练轮次的增加,预测值会越来越精确。


 PS:总结完了,建议大家想学习的自己跟一遍代码,我自己看了2个晚上,加起来4个小时左右。我整理的代码和数据下载链接在下面已经给出。另外谁认识北京的做量化交易相关的同学,请帮忙引荐,最近在工作之余自学量化交易相关的内容,希望可以有业内同学当面交流一下,多谢。

参考

项目地址:https://github.com/lilianweng/stock-rnn

作者写的介绍博文,很详细,学到很多:

https://lilianweng.github.io/lil-log/2017/07/08/predict-stock-prices-using-RNN-part-1.html

 另外我基于lilianweng的工作,精简了一部分代码,并且修改了部分版本不兼容的第三方库函数,并且在工程中提供了从雅虎股票下载好的数据,可以直接运行,项目地址:https://github.com/jimenbian/stock-rnn

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习RNN实现股票预测实战(附数据、代码) 的相关文章

  • linux 命令终端提示符显示-bash-4.1#

    昨晚对服务器自带Python升级后 xff0c 终端就不是以前root 64 主机 43 路径的显示方式了 查了很多资料 xff0c 有人说是root目录下 bash profile和 bash两个文件缺失 xff0c 但我的这两个文件是存
  • 1691_python学习笔记之week3_递归

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 最初接触递归的时候觉得这个有点不好理解 xff0c 怎么能够有这种思维方式 xff1
  • 1692_Git版本控制管理 21-40

    全部学习汇总 xff1a GreyZhang toolbox 常用的工具使用查询 xff0c 非教程 xff0c 仅作为自我参考 xff01 github com 我曾经多次在工作中接触软件版本管理 xff0c 接触过多个公司的软件版本管理
  • 1693_Python处理Excel学习小结 21-41

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 说起来这是我来到北京之后开始接触的第一个新技术 xff0c 我对此痴迷 xff0c
  • 1694_week1_MIT使用Python编程学习手记1

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 首先说明一下 xff0c 这部分信息的整理只是我个人的理解 由于自己的知识功底以及英
  • 1695_week2_算法与函数(MIT使用Python编程学习手记)

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 首先说明一下 xff0c 这部分信息的整理只是我个人的理解 由于自己的知识功底以及英
  • 1696_C语言中变量默认初始化初值探究测试

    全部学习汇总 xff1a GreyZhang c basic little bits of c github com 欢迎路过的YUAN类朋友相互沟通交流 xff0c 也欢迎各位随时指点指正 以下是我的联系方式 xff1a 微信 xff1a
  • 1697_python编程_assertions and exceptions

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 这部分主要关于程序中的异常类型以及处理方式 exception 常见的异常类型 ex
  • 1698_python编程_测试与debug

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 学习了一下这一周的课程 xff0c 讲的主要是测试以及Bug调试方面的东西 在之前我
  • 1699_simulink代码生成配置初级方案

    全部学习汇总 xff1a GreyZhang g matlab MATLAB once used to be my daily tool After many years when I go back and read my old lea
  • 1700_VIM代码自动补齐配置

    全部学习汇总 xff1a GreyZhang editors skills Summary for some common editor skills I used github com 欢迎路过的YUAN类同胞相互交流 xff0c 指点指
  • Python2 备份网站目录并上传百度网盘

    最近用WordPress建了个个人博客 xff0c 本着数据无价的原则编写了本脚本对数据库和网址目录进行备份并上传到百度网盘里 话不多说 xff0c 下面就该Python脚本的程序依赖 代码说明及使用方法进行叙述 一 程序依赖 1 安装Py
  • 1701_week5_效率与搜索

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 这一周的课程很早就学完了 xff0c 碰上自己昼夜加班周末不休的时段一直也没有整理学
  • 1702_week6_面向对象编程

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 放一下自己的联系方式 xff0c 软件爱好者欢迎交流 邮箱 xff1a greyzh
  • 1703_LibreOffice常用功能使用体验

    全部学习汇总 xff1a GreyZhang windows skills some skills when using windows system github com 首先需要说明的是我不是一个重度Office用户 xff0c 甚至算
  • 1704_Linux与Windows使用体验对比

    全部学习汇总 xff1a GitHub GreyZhang little bits of linux My notes on the trip of learning linux 我在我的微博上发过几次对比两个操作系统使用体验的微博 xff
  • 1705_Python处理中文经验与实践

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 曾经在很长的一段时间内 xff0c Python处理中文的时候真是把我难坏了 总觉得
  • 1706_Python中带余数除法

    全部学习汇总 xff1a GitHub GreyZhang python basic My learning notes about python 欢迎路过的YUAN类朋友们 xff0c 希望我们能够相互交流共同成长 如有错误或者不足希望及
  • 1707_Python中的多成员处理

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 欢迎路过的YUAN类朋友们 xff0c 希望我们能够相互交流共同成长 如有错误或者不
  • 1708_Simulink中取数组元素

    全部学习汇总 xff1a GitHub GreyZhang g matlab MATLAB once used to be my daily tool After many years when I go back and read my

随机推荐

  • STM32F407 CUBEMX+HAL库完成对XPT2064触摸屏控制芯片的驱动

    硬件介绍 首先介绍一下硬件 xff0c 我购买的液晶屏大小为480 320 xff0c 液晶屏控制芯片为ST996S xff0c 两者均采用SPI通讯协议 xff0c 这节只讲触摸屏控制芯片XPT2064的部分 如果你需要阅读有关液晶屏控制
  • C++ (STL BOOST) 智能指针的一些解析

    C 43 43 xff08 STL BOOST xff09 智能指针的一些解析 xff0c 包括智能指针的原理 xff0c 智能指针的一些使用 只有了解了原理才能真正用对他们 现在blog的文章几乎就是一把抄 郁闷 C 43 43 里面内存
  • Python安装第三方库PIL时失败的解决办法

    Python中 xff0c 安装第三方模块 xff0c 是通过setuptools这个工具完成的 Python有两个封装了setuptools的包管理工具 xff1a easy install和pip 目前官方推荐使用pip 安装一个第三方
  • 在VMware上安装Ubuntu详细教程

    目录 1 先下载好VMware Workstation Pro 2 下载Ubuntu系统镜像 3 在VMware新建虚拟机 4 开启虚拟机 xff0c 安装Ubuntu 这时我们发现由于窗口太小无法安装 作为全球最流行且最有影响力的Linu
  • 树莓派 Linux 下的串口通讯 (C语言)

    运行环境 xff1a Ubuntu14 04 树莓派3B 43 功能 xff1a 实现串口数据的收发 main c文件 include 34 com h 34 define BUFFER SIZE 30 最大缓存区 char pstr 61
  • 1--FreeRTOS操作系统介绍

    1 FreeRTOS 操作系统介绍 第3章 FreeRTOS 读作 34 free arr toss 34 是一个嵌入式系统使用的开源实时操作系统 FreeRTOS 被设计为 小巧 xff0c 简单 xff0c 和易用 xff0c 能支持许
  • 2--嵌入式操作系统FreeRTOS的原理与实现

    2 嵌入式操作系统FreeRTOS的原理与实现 摘自 xff1a http xilinx eetrend com article 7828 摘要 xff1a FreeRTOS 是一个源码公开的免费的嵌入式实时操作系统 xff0c 通过研究其
  • 自动驾驶技术-环境感知篇:V2X技术的介绍

    V2X技术概述 在前面的几篇文章分别介绍了自动驾驶在环境感知领域的相关技术点 xff0c 主要介绍了如何通过雷达配合视觉技术实现车辆自身的智能 其实在环境感知方面 xff0c 除了利用车辆自身的智能 xff0c 还可以借助外部环境实现信息的
  • 深度学习分布式策略优化、显存优化、通信优化、编译优化综述

    综述 因为我个人最近在从事可能是AI领域对性能挑战最大的方向 xff0c 自动驾驶领域 xff0c 所以对整个深度学习训练的优化尤为关注 xff0c 最近一直在学习相关内容 xff0c 谨以此篇文章做一个总结 我一直很看好深度学习训练优化这
  • 量子计算机的优势和建设挑战

    1 为什么需要量子计算机 目前大家日常使用的计算机都是经典计算机 xff0c 经典计算机计算性能的发展遵循摩尔定律 xff0c 在价格不变时 xff0c 集成电路上可容纳的晶体管数目 xff0c 约每隔18个月便会增加一倍 性能也将提升一倍
  • 浅谈ChatGPT对生产关系及工具的颠覆影响

    xff08 先歪个楼 xff0c 配图是三体乱纪元 xff0c 证明三体问题无解 xff0c 而ChatGPT证明了AIGC问题是可解的 xff09 最近ChatGPT越来越热 xff0c 仿佛看到了资本市场又一次的爆发 最近周末也会跟几个
  • 蓟门边studio-码农创业路的起点

    蓟门边工作室 xff0c 开张了 先简单介绍下lz的情况吧 xff01 lz是北邮在读硕士 xff0c 码农一枚 断断续续写代码也有一两个年头了 xff0c 但是感觉总是在外面飘着 xff0c 没写过什么大的项目 xff0c 也没真正依靠技
  • 【机器学习算法-python实现】逻辑回归的实现(LogicalRegression)

    转载请注明出处 xff1a http blog csdn net buptgshengod 1 背景知识 在刚刚结束的天猫大数据s1比赛中 xff0c 逻辑回归是大家都普遍使用且效果不错的一种算法 xff08 1 xff09 回归 先来说说
  • 计算机视觉~~~

    这两年 xff0c 计算机视觉似乎火了起来计算机视觉的黄金时代真的到来了吗 xff1f 生物医学 机械自动化 土木建筑等好多专业的学生都开始研究其在各自领域的应用 xff0c 一个视觉交流群里三分之一以上都不是计算机相关专业的 当然 xff
  • 新闻个性化推荐系统(python)-(附源码 数据集)

    1 背景 最近参加了一个评测 xff0c 是关于新闻个性化推荐 说白了就是给你一个人的浏览记录 xff0c 预测他下一次的浏览记录 花了一周时间写了一个集成系统 xff0c 可以一键推荐新闻 xff0c 但是准确率比较不理想 xff0c 所
  • 明天是我的生日,写给24岁的自己

    哎 xff0c 本来想把今晚留给蛋疼的latex 我的导师让我写一篇论文 xff0c 我正在研究怎么用latex 但是想了想 xff0c 明天就过生日了 xff0c 最后一晚还是写点东西 xff0c 静静地思考下 本来想写点东西发到朋友圈或
  • 【码农本色】用数据解读我的2014

    转眼2014就过去了 xff0c 不禁感叹又老了一岁的同时 xff0c 却发现已经快研究生毕业了 xff0c 趁着这个活动简单总结下2014 1 实习篇 2014年一月份拿到了人生第一个实习offer xff0c 在sony这样的大公司做a
  • 如何用PYTHON代码写出音乐

    如何用PYTHON代码写出音乐 什么是MIDI 博主本人虽然五音不全 xff0c 而且唱歌还很难听 xff0c 但是还是非常喜欢听歌的 我一直在做这样的尝试 xff0c 就是通过人工智能算法实现机器自动的作词和编曲 xff08 在这里预告下
  • 普通程序员如何入门AI

    毫无疑问 xff0c 人工智能是目前整个互联网领域最火的行业 xff0c 随着AlphaGo战胜世界围棋冠军 xff0c 以及各种无人驾驶 智能家居项目的布道 xff0c 人们已经意识到了AI就是下一个风口 当然 xff0c 程序员是我见过
  • 深度学习RNN实现股票预测实战(附数据、代码)

    背景知识 最近再看一些量化交易相关的材料 xff0c 偶然在网上看到了一个关于用 RNN实现股票预测的文章 xff0c 出于好奇心把文章中介绍的代码在本地跑了一遍 xff0c 发现可以 work 于是就花了两个晚上的时间学习了下代码 xff