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

深度学习RNN实现股票预测实战(附数据、代码)背景知识最近再看一些量化交易相关的材料 偶然在网上看到了一个关于用 RNN 实现股票预测的文章 出于好奇心把文章中介绍的代码在本地跑了一遍 发现可以 work 于是就花了两个晚上的时间学习了下代码 顺便把核心的内容翻译成中文分享给大家 nbsp 首先讲讲对于股票预测的理解 股票是一种可以轻易用数字表现律动的交易形式 因为大数定理的存在 定义了世间所有的行为都可以通过数字表示 并且存在一定的客观规律 股票也不例外

背景知识

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

 

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

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

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

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

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

数据说明

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

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

代码

代码文件有以下四部分:

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

其中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数据作为代表当天股票的市值,如下图所示。

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

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

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

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曲线拟合的并不好。

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

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

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


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


 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176335.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:11
下一篇 2026年3月26日 下午10:11


相关推荐

  • 中石化面试题java,中石化面试经验

    中石化面试题java,中石化面试经验面试过程:应聘途径:社会招聘面试内容:1对1面试面试难度:简单面试感觉:一般面试官提的问题:到了面试那里,像上次那样在会议室等着。大概有四、五十人左右吧,分成了几组人,第一组人先去做性格测评,说要八十分钟左右,其他人在等,说那些领导在开会,商议面试的事宜。领导开会开到十一点半才出来,宣讲一下相关内容,结果把一些还没做完测试的人拉了下来。宣讲完,那些做完测试的人就先去面试,因为估计不到什么时候才面完…

    2022年10月15日
    4
  • 今天起,海光DCU让你零门槛“安心养虾”

    今天起,海光DCU让你零门槛“安心养虾”

    2026年3月13日
    3
  • 编译原理:词法分析实验报告

    编译原理:词法分析实验报告词法分析实验报告文章目录词法分析实验报告一 实验目的二 实验原理三 实验要求四 实验步骤 利用 Java 语言来进行词法分析 待分析的语言词法 单词符号对应的种别码 词法分析程序流程图 编写程序 见源程序代码文件 测试结果 见输入输出文件 五 运行结果分析一 实验目的设计 编制并调试一个词法分析程序 加深对词法分析原理的理解 二 实验原理词法分析程序的基本任务是从字符串表

    2026年3月19日
    1
  • 备忘录模式实例_iphone语音备忘录无法分享

    备忘录模式实例_iphone语音备忘录无法分享备忘录模式 Motivation动机模式定义实例结构要点总结笔记动机在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯对象之前处于某个点时的状态.如果使用一些共有接口来让其他对象得到对象的状态,便会暴露对象的实现细节.如何实现对象状态的良好保存与回复?但同时又不会因此而破坏对象的封装性模式定义在不破坏封装性的前提下.捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态实例朴素class Memento{ stri

    2022年8月9日
    9
  • XMLHTTP使用具体解释

    XMLHTTP使用具体解释

    2021年12月6日
    38
  • OpenClaw 霸榜,Agent 全面爆发的前夜

    OpenClaw 霸榜,Agent 全面爆发的前夜

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号