python人工智能炒期货_学会用Python结合人工智能尝试预测股票,下一个股神就是你!...

股票市场涨涨跌跌,好像毫无规律,但有一些人却凭借自己的直觉掌握了一些特殊规律,从而实现在股票上的实现斩获。现在在人工智能时代,Python+AI框架,无疑会利用人工智能优势可以对股票市场进行特征学习,抓取比凭借个人感觉更多的股票数字特征。本文要介绍的就是利用Python+keras对股票进行时间序列上的数字特征预测。

用Python结合人工智能尝试预测股票,会成就下一个股神?

预备条件:

假设您熟悉python,并且已经在系统中安装了python 3。本教程中使用了jupyter笔记本。您可以使用自己喜欢的IDE。

使用的数据集:

本教程中使用的数据集是基于Tushare获取的股票信息。更多股票代码可以用下面的搜索工具获取。至于Tushare的使用,可以参考以前的python神级技巧,不要爬虫一分钟获取股票基金持股情况文章学习。

搜更多精彩内容

股票查询

安装所需的库

对于此项目,您需要在python中安装以下软件包。如果未安装,则只需使用即可pip install PackageName。

NumPy —该库提供快速计算的n维数组对象。Pandas —它提供了一个数据框和序列,可以对数据执行操作和分析。matplotlib —该库有助于使用各种图表来可视化数据。scikit-learn —这是一个机器学习库,提供了用于预测分析的各种工具和算法。我们将使用其工具或功能进行数据预处理。Keras —这是一个基于TensorFlow的高级深度学习库,用于提供神经网络的简单实现。我们之所以使用它,是因为它对初学者友好且易于实施。TensorFlow -这个库是由所需Keras作为Keras运行在TensorFlow本身。

开始编码

首先,需要导入将在项目中使用的库。在这里,numpy用于创建NumPy数组以训练和测试数据。pandas用于制作数据集的数据框并轻松检索值。matplotlib.pyplot绘制总体股价和预测价格之类的数据。MinMaxScaler从sklearn的(scikit-learn)预处理程序包中进行归一化处理。Sequential dense LSTM Dropout从Keras导入了数据,将有助于创建深度学习模型。稍后将讨论这些模块。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.preprocessing import MinMaxScaler#for deep learning modelfrom keras import Sequentialfrom keras.layers import Densefrom keras.layers import LSTMfrom keras.layers import Dropout

现在,将数据集作为数据框加载到名为df的变量中。然后,检查了数据集的形状,结果为(2035,8)表示数据集中有2035行和8列。之后,将数据集上下颠倒过来,以便日期从最早的日期开始到最近的日期,这样做还必须重置索引。然后,打印数据集的一些开始行head()。

df = pd.readcsv('tu.csv')df.shapedf = df[::-1]df = df.resetindex(drop=True)df.head()

数据集的前5个条目

仅选择了一个“开放”功能来训练的模型,但是您可以自由选择多个功能,但是随后将相应地更改代码。在训练集中,有2000个值,而在测试中,只选择35个值。然后简单地打印了两个类别的数据,分别trainset testset是(2000,1)和(35,1)。

openprice = df.iloc[:,1:2]trainset = openprice[:2000].valuestestset = openprice[2000:].valuesprint("Train size:",trainset.shape)print("Test size:",testset.shape)

在这里,将Date列转换为DateTime格式以方便地进行绘制。然后简单地用于plotdate绘制整个时间轴上的股票开盘价的图,并使用保存该图savefig。

dates = pd.todatetime(df['Date'])plt.plotdate(dates, openprice,fmt='-')plt.savefig("test1final.png")

现在,已经初始化了MinMaxScalar用于缩放0到1范围内的每个值的。这是非常重要的一步,因为当特征处于相对相似的缩放比例时,神经网络和其他算法的收敛速度更快。

sc = MinMaxScaler()trainsetscaled = sc.fittransform(trainset)

棘手的部分到了。现在,必须使数据适合我们的RNN模型,即使用目标最终值制作数据序列。让我用这个例子来解释。假设数据集的值介于1到10之间,并且序列长度为3。在这种情况下,训练数据如下所示:

序列训练数据示例

在代码中,序列的长度为60,这意味着只有前60个值将决定下一个值,而不是整个数据集。之后,创建了NumPy xtrain和NumPy数组以ytrain进行快速计算,并根据模型的要求重塑了训练集。的最终形状为xtrain(1940,60,1)。

xtrain =[]ytrain =[]for i in range(60,2000):xtrain.append(trainsetscaled[i-60:i,0]) ytrain.append(trainsetscaled[i,0])xtrain = np.array(xtrain)ytrain = np.array(ytrain)xtrain = np.reshape(xtrain,(xtrain.shape[0],xtrain.shape[1],1))xtrain.shape

现在,将创建模型的架构。使用Keras是因为与其他可用库相比,使用Keras进行深度学习模型非常容易。在这里,初始化了Sequential对象,该对象充当模型内所有图层的捆绑程序。模型总共有4个LSTM层和1个致密层。

LSTM(长期短期记忆)是一种递归神经网络,具有一些上下文状态单元,它们充当长期或短期记忆单元,并且这些单元调节输出。当需要根据历史背景而不是仅根据最后的输入来预测输出时,这一点很重要。例如,必须预测序列3,4,5,?中的下一个数字。那么输出就是6(x +1),但是顺序为0,2,4,?输出也是6,但是它也取决于上下文信息。

Dropout用于通过一次简单地停用某些单元(神经元)来防止数据过拟合。在案例中,一次会停用20%的单元。最后,有一个包含1个单位的密集层,可提供预测值。

然后,只需使用优化程序编译模型,然后将模型拟合到数据上,然后运行20次迭代即可。

reg = Sequential()reg.add(LSTM(units =50,returnsequences=True,inputshape=(xtrain.shape[1],1)))reg.add(Dropout(0.2))reg.add(LSTM(units =50,returnsequences=True))reg.add(Dropout(0.2))reg.add(LSTM(units =50,returnsequences=True))reg.add(Dropout(0.2))reg.add(LSTM(units=50))reg.add(Dropout(0.2))reg.add(Dense(units=1))reg.compile(optimizer ='adam',loss='meansquarederror')reg.fit(xtrain,ytrain, epochs=20, batchsize =1,verbose=2)

每次迭代的损失

如您所见,模型收敛于15个epoch,总共花了90分钟才能运行20次。是的,RNN模型需要时间训练。

RNN模型需要时间

现在,是时候为测试创建输入了。的形状input为(95,1),下面也缩放了此数据。

input = openprice[len(openprice)-len(testset)-60:].valuesinput.shapeinput = sc.transform(input)

这是最后一部分,其中简单地制作数据序列以预测最近35天的库存值。第一个序列包含从1至60的数据来预测第61个值,第二个序列包含从2到61的数据来预测第62个值,依此类推。的形状xtest是(35,60,1),这说明了这一点。

xtest =[]for i in range(60,95):xtest.append(input[i-60:i,0])xtest = np.array(xtest)xtest = np.reshape(xtest,(xtest.shape[0],xtest.shape[1],1))xtest.shape

最终,只是预测使用值predict定义的模型的功能,并绘制最后35个某种给定股票的实际和预测值。

pred = reg.predict(xtest)pred = sc.inversetransform(pred)plt.plot(testset,color='green')plt.plot(pred,color='red')plt.title('股票预测')plt.show()

最后具体运行结果就作为作业留给大家自行完成。但可以很乐观的告诉大家,模型在某些特定时间段上预测给定股票的未来趋势方面非常准确。

但是,距离成为股票市场上的出色顾问还会有比较大的挑战。

下一步目标

通过合并更多功能,增加数据集以及调整模型本身,可以进一步改善模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAX-RS 2.0中的透明PATCH支持

PATCH方法是最不受欢迎的HTTP方法之一,因为直到最近才真正没有一种标准的PATCH格式。 一段时间以来,它已经针对JSON进行了标准化,因此有很多库可以为您完成繁重的工作。 出于本博客的目的,我将使用json-patch,尽管可以…

Java开发知识之Java的枚举

Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C中都是用const关键字. 枚举跟C概念都是一样的.就是特定的常量而已. 二丶Java中的枚举 java中的常量.一般都是final定义.但是我们讲过.final定义的常量.初始化的时候可…

linux php7 mongodb,CentOS 7下安装配置PHP7跟LAMP及MongoDB和Redis

CentOS 7下安装配置PHP7跟LAMP及MongoDB和Redis我是想能yum就yum,所有软件的版本一直会升级,注意自己当时的版本是不是已经更新了。首先装CentOS 7装好centos7后默认是不能上网的cd /etc/sysconfig/network-scripts/找到形如ifcfg-enp0s3的文件&#xff…

【汇总目录】C#

[2019年04月29日] C# textbox 自动滚动 [2019年02月07日] C#利用VUDP.cs开发网络通讯应用程序 [2019年02月06日] C#利用VINI.cs操作INI文件 [2018年12月19日] 控件数组批量生成控件 转载于:https://www.cnblogs.com/velscode/p/10535101.html

基于 Bootstrap 的响应式后台管理面板

你想建立一个后台管理面板或者分析仪表板吗?不需从头开始,Keen IO Bootstrap 是一个响应式的仪表盘模板,可以帮助你在几分钟内呈现数据,让你可以创建一个有吸引力的,定制的分析仪表板,随时可以展现给你的团…

Java:AspectJ的异常翻译

在这篇博客文章中,我描述了如何使用AspectJ自动将一种异常类型转换为另一种异常类型。 问题 有时,我们处于必须将异常(通常由第三方库引发)转换为另一种异常的情况。 假设您使用的是诸如hibernate之类的持久性框架,并…

sparkstreaming监听hdfs目录_大数据系列之Spark Streaming接入Kafka数据

Spark Streaming官方提供Receiver-based和Direct Approach两种方法接入Kafka数据,本文简单介绍两种方式的pyspark实现。1、Spark Streaming接入Kafka方式介绍Spark Streaming 官方提供了两种方式读取Kafka数据:一是Receiver-based Approach。该种读取模式…

php职业认证,如何用 PHP 进行 HTTP 认证

PHP 的 HTTP 认证机制在 PHP 以 Apache 模块方式运行时才有效,因此该功能不适用于 CGI 版本。在 Apache 模块的 PHP 脚本中,可以用 header() 函数来向客户端浏览器发送“Authentication Required”信息,使其弹出一个用户名/密码输入窗口。当用…

时间服务器

时间服务器配置: 1 安装软件包: [rootlocalhost ~]# yum install ntp –y 2 修改配置文件 [rootlocalhost ~]# vim /etc/ntp.conf # 允许内网其他机器同步时间 192.168.1.0该网段 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 允许任何ip的客户机都可以…

使用 HTML5 Canvas 绘制出惊艳的水滴效果

HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临。在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作,具有极大的应用价值。 这里分享一个惊艳的 Canva…

Java EE 8:社区想要什么?

在进行了之前的两次社区调查之后,第一次调查于2013年12月发布,第二次调查于2014年1月发布,Oracle呼吁企业社区对Java EE 8进行第三次也是最后一次调查 。该调查的截止日期为2014年3月24日,12日。太平洋时间。 值得注意的是&#…

mysql 字符串类型 char varchar

字符类型用在存储名字、邮箱地址、家庭住址等描述性数据 char指的是定长字符,varchar指的是变长字符 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度#char类型:定长…

二叉树遍历规则

树的遍历顺序大体分为三种:前序遍历(先根遍历、先序遍历),中序遍历(中根遍历),后序遍历(后根遍历)。 如图所示二叉树: 前序遍历:前序遍历可以记为…

vue vue的table表格自适应_vue table autoHeight(vue 表格自动高度)

小编主要做的都是后台管理系统,采用布局多为头部、左侧菜单栏,右侧内容,头部和菜单栏固定位置,内容部分如果很长就会出现滚动条(iview和element都提供了布局容器),后台管理系统多为表格的增删改查,so&#…

php网页的注册界面设计,HTML开发博客之注册页面设计(一)

CSS文件的引入新建文件reg.html文件首先我们来分析网页布局这是我们页面完成后的效果,网页分为三部分头部,主体,和底部我们按照这个顺序开始编写。头部导航栏的编写html>用户注册页面首页科技资讯心情随笔资源收藏图文图片留言板登陆/注册…

Arctext.js - 基于 CSS3 jQuery 的文本弯曲效果

Arctext.js 是基于 Lettering.js 的文本旋转插件,根据设置的旋转半径准确计算每个字母的旋转弧度并均匀分布。虽然 CSS3 也能够实现字符旋转效果,但是要让安排每个字母都沿着弯曲路径排布相当的复杂,结合 Arctext.js 则可以轻松实现这个效果。…

在JDT中使用Java 8 Lambda

旧 Curmudgeon 认识Smalltalk的Dude 在修改Eclipse Java开发工具 (JDT)项目正在开发的Java 8支持时,我一直在使用这种语言。 我承认我对Java 8中的lambda有点不满意。 当然,这来自于知道Smalltalk (和LISP / Schem…

[POJ1463] Strategic game

题目链接: 传送门 题目大意: Bob非常享受玩电脑游戏的过程,尤其是策略游戏,但是在有些时候,他因为不能在第一时间找到最佳的策略而十分伤心。 现在,他遇到了一个问题。他必须保卫一个中世纪的城市&#xff…

zabbix邮件告警

zabbix邮件告警调用第三方邮件服务来发送邮件。 [roottiandong ~]# yum install mailx -y 修改配置文件 [roottiandong ~]# vim /etc/mail.rc 67 set from15600857257163.com smtpsmtp.163.com 68 set smtp-auth-user15600857257163.com 69 set smtp-auth-password密码&#xf…

模糊推理机制 matlab,基于模糊综合评判推理机制的学生素质评价系统设计与实现...

第22卷第2期2002年2月文章编号:(2002)l00l-908l2-008l-03计算机应用ComputerAppIicationsVoI.22,No.2Feb.,2002基于模糊综合评判推理机制的学生素质评价系统设计与实现尹世群(西南师范大学计算机与信息科学学院,重庆4007l5)摘要:根据模糊数学…