前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Web的股票预测系统

基于Web的股票预测系统

作者头像
机器学习AI算法工程
发布2019-10-29 09:52:35
1.8K0
发布2019-10-29 09:52:35
举报
基于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中修改下面代码块中对应的字符串变量‘+’后面的值

代码语言:javascript
复制
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可查看整个项目以及各个文件的测试覆盖率,如下图:
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习AI算法工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境要求
  • 使用django自带的服务器在本地运行
  • 数据
    • 训练模型
      • 预测股票数据
        • 单元测试
        • 集成测试
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档