NeuralNetworkStocks介绍
NeuralNetworkStocks是一个简单的、可开发的项目,应用神经网络技术进行股票市场预测。目标是了解神经网络是如何被实现来进行股票市场预测的基本原理,从获取数据,对其进行预处理,到使用回溯测试来评估机器你学习模型以及构建有效机器学习模型的各种细微差别。
从本质上讲,我们将从Yahoo Finance下载股票价格数据,然后使用panda和numpy对数据爆炸进行预处理,以便将它们输入到我们的神经网络模型中(keras对输入数据有特定的要求)。随后,我们将使用keras非常方便的分层结构构建我们的神经网络模型。本项目将构建两种类型的神经网络:多层感知器和长短时记忆(LSTM)神经网络。这两项内容将在后面进一步阐述。最后,我们将使用一个基本的backtest系统来测试我们的机器学习模型的预测能力。
这个机器学习模型不是用来交易股票的。然而,随着进一步的扩展,这个机器学习模型肯定可以用来支持您的交易策略。
我希望这个项目对您作为一名交易员或机器学习工程师的旅程有用。
概述
本项目的整体工作流程如下:
- 获得股票价格数据-这将给我们模型的特征。
- 对数据进行预处理——生成训练和测试数据集。
- 利用神经网络对训练数据进行学习。
- 跨日期范围回测模型。
- 做有用的股票价格预测
- 用预测来补充你的交易策略
虽然这是非常通用的,但它本质上是你需要建立自己的机器学习或神经网络模型。
快速入门
对于那些不希望了解模型构造的人,克隆并下载项目(https://github.com/VivekPa/NeuralNetworkStocks),将其解压到您喜欢的文件夹中,并在计算机中运行以下代码。
pip install -r requirements.txt python LSTM_model.py
现在,您的神经网络将被训练并准备好对股票价格进行预测(如果您要使用预测,请记得回测)。
Preliminaries
对于那些想要更详细的手册的人,这个程序是在Python 3.6中构建的。如果您使用的是Python的早期版本,比如Python 3。你会遇到语法问题。建议你升级到Python 3.6。
pip install -r requirements.txt
股票价格数据
现在我们来看看机器学习项目中最可怕的部分:数据获取和数据预处理。尽管它可能很单调,也很困难,但是向模型中提供高质量的数据是非常重要的。俗话说“Garbage in,Garbage out“,这最适用于机器学习模型,因为你的模型只有在输入数据的情况下才有效。处理数据分为两部分:下载数据,以及为模型形成我们的数据集。”由于Yahoo Finance API,下载股票价格数据相对简单。
要下载股票价格数据,我们可以使用pandas_datareader,您也可以直接从Yahoo免费下载股票数据,并将其保存为stock_price.csv。
预处理
一旦我们有了我们要预测的股票的股票价格数据,我们现在需要创建训练和测试数据集。
准备训练数据集
我们的训练数据集的目标是拥有给定长度的行(用于预测的价格数量)以用于评估模型的正确预测。在调用预处理类时,我已经给用户选择您想要为您的训练数据使用多少股票价格数据的选项。生成训练数据非常简单地使用numpy.arrays和for循环。你可以通过运行:
Preprocessing.get_train(seq_len)
准备测试数据集
测试数据集的准备方式与训练数据集完全相同,只是数据的长度不同。这是通过以下代码完成的:
Preprocessing.get_test(seq_len)
神经网络模型
由于这个项目的主要目标是了解机器学习和神经网络,我将解释我使用的模型以及它们在预测股票价格时为什么有效。
多层感知器模型
多层感知器是利用反向传播从训练数据集中学习的最基本的神经网络。
LSTM模型
使用长短期记忆神经网络的好处是有一个额外的长期记忆元素,在神经网络数据之前的数据层作为一个“记忆”模型,可以找到之间的数据本身和数据之间的关系和输出。
LSTM神经网络的示意图
回溯测试
我的回测系统很简单,因为它只评估模型预测股票价格的程度。它实际上并没有考虑如何根据这些预测进行交易(这是使用此模型开发交易策略的主题)。要仅运行回测,您需要运行
back_test(strategy, seq_len, ticker, start_date, end_date, dim)
dim变量是您想要的数据集的维数,成功训练模型是必要的。
股票预测
现在您的模型已经经过了训练和测试,我们可以使用它来进行股票价格预测。要进行股价预测,需要下载当前数据,使用keras模块的预测值。在对模型进行训练和回测后,运行以下Python代码:
data = pdr.get_data_yahoo("AAPL", "2017-12-19", "2018-01-03") stock = data["Adj Close"] X_predict = np.array(stock).reshape((1, 10)) / 200 print(model.predict(X_predict)*200)
接下来是什么?
如前所述,这个预测是高度可扩展的,这里有一些改进项目的想法。
获取数据
使用Yahoo Finance获取数据非常标准。但是,您可能希望根据库存趋势(可能按行业,或者如果您想要非常精确,使用k均值聚类?)来研究聚类数据。
神经网络模型
这种神经网络可以通过多种方式得到改进:
- 调整超参数:找到可提供最佳预测的最佳超参数
- 回测:使回测系统更加稳健(我已经将某些重要方面留给了您)。也许包括购买和做空?
- 尝试不同的神经网络:有很多选择,看看哪种方式最适合你的股票。
支持贸易
正如我之前所说,此模型可用于通过在您的交易策略中使用此预测来支持交易。包括:
- 简单的长期策略:如果预测较高,则购买,反之亦然
- 日内交易:如果您可以获取分钟数据甚至是数据,您可以使用此预测器进行交易。
- 统计套利:使用也可以使用各种股票价格的预测来找出股票之间的相关性。