背景知识

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

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

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

在股票这个场景下,通过上面这个图可以看出来,输入的是时间t、t+1、t+2的股票信息,可以返回t+1、t+2、t+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值除以历史股票最高值,将所有数据的定义域限定在0到1之间。接着构建预测集,涉及到两个参数input_size和num_steps,当input_size=3 and num_steps=2时会构建以下数据集。

第0、1、2天的股票和第3、4、5天的股票为训练集,第6、7、8天的股票是目标列,就构成了监督学习数据。以此类推,将所有数据构成训练数据集。

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

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

  1. 盘它!!一步到位,Tensorflow 2的实战 !!LSTM下的股票预测(附详尽代码及数据集)

    关键词:tensorflow2.LSTM.时间序列.股票预测 Tensorflow 2.0发布已经有一段时间了,各种新API的确简单易用,除了官方文档以外能够找到的学习资料也很多,但是大都没有给出实战 ...

  2. 深度学习中正则化技术概述(附Python代码)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 磐石 介绍 数据科学研究者们最常遇见的问题之一就是怎样避免过拟合. ...

  3. 时间序列深度学习:seq2seq 模型预测太阳黑子

    目录 时间序列深度学习:seq2seq 模型预测太阳黑子 学习路线 商业中的时间序列深度学习 商业中应用时间序列深度学习 深度学习时间序列预测:使用 keras 预测太阳黑子 递归神经网络 设置.预处 ...

  4. 深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  5. 蛋白质组DIA深度学习之谱图预测

    目录 1. 简介 2. 近几年发表的主要工具 1.DeepRT 2.Prosit 3. DIANN 4.DeepDIA 1. 简介 基于串联质谱的蛋白质组学大部分是依赖于数据库(database se ...

  6. 基于深度学习的建筑能耗预测01——Anaconda3-4.4.0+Tensorflow1.7+Python3.6+Pycharm安装

    基于深度学习的建筑能耗预测-2021WS-02W 一,安装python及其环境的设置 (写python代码前,在电脑上安装相关必备的软件的过程称为环境搭建) · 完全可以先安装anaconda(会自带 ...

  7. 基于python深度学习的apk风险预测脚本

    基于python深度学习的apk风险预测脚本 为了有效判断安卓apk有无恶意操作,利用python脚本,通过解包apk文件,对其中xml文件进行特征提取,通过机器学习构建模型,预测位置的apk包是否有 ...

  8. TensorFlow深度学习!构建神经网络预测股票价格!⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 TensorFlow 实战系列:https://www.showmeai ...

  9. Predicting effects of noncoding variants with deep learning–based sequence model | 基于深度学习的序列模型预测非编码区变异的影响

    Predicting effects of noncoding variants with deep learning–based sequence model PDF Interpreting no ...

随机推荐

  1. qwb的骚扰

    题目描述 自从学姐拒绝了qwb之后,qwb开始了疯狂的骚扰.qwb来到了一个公共电话亭,他摸摸口袋只有n元钱. 已知该公用电话的规则是,前3分钟一共收费x元(不到3分钟也要收x元),超过3分钟每分钟收 ...

  2. 最优比率生成树 POJ 2728 迭代或者二分

    别人解题报告的链接: http://blog.sina.com.cn/s/blog_691190870101626q.html 说明一下关于精度的问题,当结果是精确到小数点后3为,你自然要把误差定为至 ...

  3. ES6必知必会 (三)—— 数组和对象的拓展

    数组的扩展 1.拓展运算符('...'),它相当于rest参数的逆运算,用于将一个数组转换为用逗号分隔的参数序列: console.log(...[1, 2, 3]) // 1 2 3 console ...

  4. Reaction 开源可自定义实时的电商平台

    Reaction 开源可自定义实时的电商平台,支持以下特性 拖放商品 订单处理 支付 物流 税 折扣 Analytics(分析) 与许多第三方应用程序集成 graphql 开发api 简单demo 使 ...

  5. Oracle 补丁体系 及 opatch 工具 介绍

    一. CPU(Critical Patch Update) 一个CPU内包含了对多个安全漏洞的修复,并且也包括相应必需的非安全漏洞的补丁.CPU是累积型的,只要安装最新发布的CPU即可,其中包括之前发 ...

  6. Mac 下 java环境 maven环境配置

    java环境配置 下载jdk,按照提示安装 我下的是1.8.0版本,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...

  7. svn 报错及解决

    报错: svn: E155015: One or more conflicts were produced while merging r68508:73308 into '[分支]' -- reso ...

  8. Queque 方法对比和分类

    添加类:方法 public boolean add(E e)      增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常 bo ...

  9. numpy之meshgrid和where

    meshgrid np.meshgrid() np.meshgrid从坐标向量返回坐标矩阵. 这样说可能很抽象.举个例子. x = np.arange(-2,2) y = np.arange(0,3) ...

  10. Jmeter中Websocket协议支持包的使用(转)

    转自:http://blog.csdn.net/typing_yes_no/article/details/49512167 参考的来源是国外一篇文章,已经整理成pdf格式(http://yunpan ...