基于Web的股票预测系统

基于Web的股票预测系统

此project是基于django的web app。它能给出指定范围内公司(此处为10个)的历史股票数据与未来某段时间的预测数据以及对该股票的一些评价指标。 股票预测模型是使用jaungiers提出的一种LSTM Neural Network模型。 并使用以tensorflow作为backend的keras来搭建、训练模型。

本文完整源码 获取方式:

关注微信公众号 datayx 然后回复 股票 即可获取。

环境要求

如果只运行web项目,则只需安装如下包:

  • python 3.6.x
  • django 2.1.4
  • pandas 0.23.4
  • numpy 1.15.2

如果需要训练模型或者使用模型来预测(注:需要保证本机拥有 NVIDIA GPU以及显卡驱动),则还需要安装:

  • tensorflow-gpu 1.10.0
  • cudatoolkit 9.0 (根据自己本机的显卡型号决定,请去NVIDIA官网查看)
  • cudnn 7.1.4 (版本与cudatoolkit9.0对应的,其他版本请去NVIDIA官网查看对应的cudatoolkit版本)
  • keras 2.2.2
  • matplotlib 2.2.2

可以通过控制台在根目录路径下输入:pip install -r requirements.txt安装上述所有包(注意修改cudatoolkit和cudnn的版本与自己电脑的GPU型号一致)。

使用django自带的服务器在本地运行

首先你需要将此项目clone或者download到本地。然后在控制台,进入项目根目录即WebStockPredict(包含有manage.py的目录),输入如下面命令,启动Web应用:

python manage.py runserver

此时在浏览器中输入:http://http://127.0.0.1:8000/stock_predict/home/即可访问应用,通过下拉框选择查看某个公司过去20天的历史股票数据和未来10天的预测数据。

在Web app中绘制的10天预测数据,大多都是朝着一个方向变化。这是因为股票数据是一个随机过程,无法使用既有的模型去准确预测未来一段时间的数据,只能给出股票未来变化的趋势。 在我们使用jaungiers提出的模型中他详细阐述了这个问题。 我们预测输出符合他给出的实验图,如下:

数据

本项目为了演示方便,只使用了10个公司的股票数据来进行模型训练,实际上可以依据个人需求,训练成百上千个公司的数据。注:这个项目只是用来演示,并不保证预测的真实性,请勿用于真实炒股.

  • 训练数据

训练模型的数据,即10个公司的历史股票数据。获取国内上市公司历史股票数据来源于网易的API:'http://quotes.money.163.com/service/chddata.html',详细使用请参考数据接口-免费版(股票数据API)。 在LSTMPredictStock/core/get_domestic_hist_stock.py 中

get_domestic_stock(sticker_code,

start_date, end_date):

函数用于获取10个公司起始至终止日期的股票数据,并以csv格式保存在 LSTMPredictStock/data下。csv格式方便用pandas读取,输入到LSTM神经网络模型, 用于训练模型以及预测股票数据。

  • 股票指标数据

我们的Web app,还给出了每个公司的股票评价指标。这些数据是从数据猫的网站上爬取的,在数据猫的网站上给出了股票的很多项评价指标(如下图), 而我们只选择了其中几个评价指标来展示。爬虫程序:stock_predict/get_stock_index.py,调用main(stockcode)方法可以获得指定股票代码的评价指标数据, 它会在stock_predict下创建stock_index文件夹,以csv格式保存爬取的数据。另外,需要注意的是,因为数据猫需要用户登录以后才能查看相应的股票数据,所以在 运行get_stock_index.py时,需要自己先在浏览器登录数据猫后,得到cookie中的参数(按F12,选择Application选项卡即可看到,如下图), 然后在get_stock_index.py中修改下面代码块中对应的字符串变量‘+’后面的值

UM_distinctid = "UM_distinctid=" + "167d4244a665d3-0bc7b9a22f42f1-4313362-144000-167d4244a67440;"
PHPSESSID = "PHPSESSID=" + "4j67ed7bo6ogs6ntjmo3fb62n4;"
CNZZDATA1256448133 = "CNZZDATA1256448133=" + "1846506456-1545449269-%7C1545479258;"
amvid = "amvid=" + "6447ffafff063060f1a560d94128a33f"
cookie={'Cookie':UM_distinctid+PHPSESSID+CNZZDATA1256448133+amvid}

训练模型

  1. 调用run.py中的train_all_stock,它首先会调用get_all_last_data(start_date="2010-01-01")方法获得10个公司从2010年至今年的历史数据
  2. 接着调用的train_model(stock_code, predict=False)方法基于上述数据来训练模型,若predict=True,则在训练完后会进行模型正确性的验证, 主要是通过绘图方式来对比预测数据与真实数据之间的吻合度
  3. 并分别将10个公司的训练好的模型保存于LSTMPredictStock/saved_models下('xxx.h5'格式),用于后续恢复模型来预测数据

预测股票数据

  1. 调用run.py中的predict_all_stock(pre_len=10)来对10个公司的股票进行预测,pre_len指定预测的天数,默认是10天
  2. 上一步调用的函数实际上调用了prediction(stock_code, real=True, pre_len=30, plot=False)来完成预测。 在 model.load_model(file_path)这里恢复了模型。它默认使用每个公司近30天的历史数据作为模型输入来得到pre_len天的预测数据

单元测试

使用django自带的测试工具来实现单元测试,测试程序位于stock_predict/test.py,在控制台根目录下使用命令`

python manage.py test stock_predict' 来运行test.py。

集成测试

如果想完成集成测试,则需要借助第三方库:coverage.py,可以通过pip install coverage安装,详情使用参考coverage.py。

  1. 控制台在根目录WebStockPredict下,输入命令 coverage run --source='.' manage.py test stock_predict来执行test.py
  2. 下一步输入coverage report命令,可以生成简易的测试报告
  3. 为了获得更详细的测试报告,可输入coverage html命令,其会在根目录下生成htmlcov文件夹,里面包含自动生成的html页面,点击index.html可查看整个项目以及各个文件的测试覆盖率,如下图:

本文分享自微信公众号 - 机器学习AI算法工程(datayx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯大讲堂的专栏

腾讯大数据星火计划技术沙龙 对外报名正式启动!

导语:腾讯大数据举办星火计划技术沙龙为广大大数据爱好者提供线下交流活动机会,技术沙龙第一期将于10月13日在深圳腾讯大厦举办,为您揭秘海量机器学习之道与Ang...

9430
来自专栏Python数据科学

决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结

决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结束条件或叶子节点纯度达到阈值。下图是决策树的一个示例图:

9330
来自专栏数据和云

Oracle Database 20c 十大新特性一览

在2019年的Oracle OpenWorld 大会上,关于Oracle Database 20c 的新特性已经逐步呈现出来。

10230
来自专栏新智元

DeepMind推出GAN-TTS:用生成对抗网络实现高保真语音

人类梦想让文字说话已经有好几个世纪的历史了。你可能没想到,其实在1968年,日本的电机技术实验室由Noriko Umeda和他的同伴开发了第一个完整的英语语音转...

13720
来自专栏腾讯高校合作

腾讯人工智能师资培训通知 | 人工智能人才培养

为推动中国人工智能行业的发展,促进专业人才培养,以及推进人工智能领域一级学科建设,联盟联合腾讯公司定于2019年10-11月期间在华北、华南、西北三大区域开展...

20320
来自专栏新智元

Reddit热议: 如何读论文才不至于发疯?

Google Scholar的海洋如此深邃,一旦沉入其中,往往感到要阅读的东西如此之多,穷尽一生可能也读不完,很多人因而焦虑不已。

10130
来自专栏CDA数据分析师

你跳宅舞的样子很专业:不,这都是AI合成的结果

想展示自己的完美舞姿吗?你现在只需要一段别人跳舞的视频,和自己的一张照片。最近,来自上海科技大学和腾讯 AI Lab 的新研究着实让很多人跃跃欲试。

11640
来自专栏数据分析1480

推荐收藏 | 统计学常用的数据分析方法大总结!

描述统计是通过图表或数学方法,对数据资料进行整理、分析,并对数据的分布状态、数字特征和随机变量之间关系进行估计和描述的方法。描述统计分为集中趋势分析和离中趋势分...

16640
来自专栏Python数据科学

机器学习领域必知必会的12种概率分布(附Python代码实现)

机器学习有其独特的数学基础,我们用微积分来处理变化无限小的函数,并计算它们的变化;我们使用线性代数来处理计算过程;我们还用概率论与统计学建模不确定性。在这其中,...

10160
来自专栏AI科技评论

ICCV 2019 Oral | 期望最大化注意力网络 EMANet 详解

本文转自知乎,作者立夏之光。AI科技评论获授权转载,如需转载请联系原作者。原文链接:https://dwz.cn/3BFMz8pW

15720

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励