本书旨在展示机器学习如何以实用而全面的方式为算法交易策略增加价值。它涵盖了从线性回归到深度强化学习的广泛机器学习技术,并演示了如何构建、回测和评估由模型预测驱动的交易策略。
它分为四部分,共23 章和一个附录,共 800 多页:
该存储库包含150 多个笔记本,将书中讨论的概念、算法和用例付诸实践。他们提供了大量的例子表明:
我们强烈建议您在阅读本书时查看笔记本;它们通常处于已执行状态,并且通常包含由于空间限制而未包含的附加信息。
除了本存储库中的信息之外,本书的网站还包含章节摘要和其他信息。
为了方便读者就本书的内容和代码示例以及自己的策略和行业发展的制定和实施提出问题,我们正在托管一个在线平台。
请加入我们的社区,与有兴趣利用机器学习进行交易策略的其他交易者联系,分享您的经验,并互相学习!
首先,本书演示了如何使用各种监督、无监督和强化学习算法从各种数据源中提取信号并为不同资产类别设计交易策略。它还提供相关的数学和统计知识,以方便算法的调整或结果的解释。此外,它还涵盖了金融背景,可帮助您处理市场和基本数据、提取信息特征以及管理交易策略的绩效。
从实践的角度来看,第二版旨在为您提供概念理解和工具,以开发您自己的基于机器学习的交易策略。为此,它将机器学习视为流程中的关键元素,而不是独立的练习,引入了从数据源、特征工程、模型优化到策略设计和回测的交易工作流程的端到端机器学习。
更具体地说,ML4T 工作流程首先为明确定义的投资领域产生想法,收集相关数据并提取信息特征。它还涉及设计、调整和评估适合预测任务的机器学习模型。最后,它需要开发交易策略来对模型的预测信号采取行动,并使用回测引擎模拟和评估其在历史数据上的表现。一旦您决定在真实市场中执行算法策略,您会发现自己反复迭代此工作流程以融入新信息和不断变化的环境。
第二版对 ML4t 工作流程的强调转化为关于策略回测的新章节、描述 100 多个不同 alpha 因子的新附录以及许多新的实际应用。为了清晰和可读性,我们还重写了大部分现有内容。
交易应用程序现在使用除每日美国股票价格之外更广泛的数据源,包括国际股票和 ETF。它还演示了如何将机器学习用于具有分钟频率股票数据的日内策略。此外,它还扩展了替代数据源的覆盖范围,包括用于情绪分析和回报预测的 SEC 文件,以及用于对土地用途进行分类的卫星图像。
第二版的另一个创新是复制了最近在顶级期刊上发表的几个交易应用程序:
所有应用程序现在都使用最新的可用(在撰写本文时)软件版本,例如 pandas 1.0 和 TensorFlow 2.2。还有一个定制版本的 Zipline,可以在设计交易策略时轻松包含机器学习模型预测。
这些代码示例依赖于数据科学和金融领域的各种 Python 库。
没有必要尝试一次安装所有库,因为这会增加遇到版本冲突的可能性。相反,我们建议您在阅读过程中安装特定章节所需的库。
2022 年 3 月更新:
zipline-reloaded
、pyfolio-reloaded
、alphalens-reloaded
和empyrical-reloaded
现已在conda-forge
频道上提供。ml4t
频道仅包含过时的版本,很快就会被删除。
2021年4月更新:随着Zipline的更新,不再需要使用Docker。安装说明现在引用了特定于操作系统的环境文件,这些文件应该可以简化笔记本电脑的运行。
2021 年 2 月更新:代码示例版本 2.0 将 Docker 映像提供的 conda 环境更新为 Python 3.8、Pandas 1.2 和 TensorFlow 1.2 等; Zipline 回测环境现在使用 Python 3.6。
conda
环境的配置文件,如果您愿意,还可以将笔记本中使用的软件包直接安装在您的计算机上(并且根据您的系统,准备好加倍努力)。如果您在安装环境、下载数据或运行代码时遇到任何困难,请在存储库(此处)中提出GitHub 问题。此处描述了如何处理 GitHub 问题。
更新:您可以在此处下载本书中使用的algoseek数据。请参阅第 2 章中的预处理说明和第 12 章中的梯度增强模型的日内示例。
更新:图形目录包含书中使用的图表的彩色版本。
本书分为四个部分,分别解决在获取和使用市场、基本数据和替代数据源时出现的不同挑战,为交易环境中的各种预测任务开发机器学习解决方案,以及设计和评估依赖于生成的预测信号的交易策略。机器学习模型。
每章的目录都包含一个自述文件,其中包含有关内容、代码示例和其他资源的附加信息。
第 1 部分:从数据到战略制定
第 2 部分:交易机器学习:基础知识
第 3 部分:交易自然语言处理
第 4 部分:深度学习和强化学习
第一部分提供了一个用于开发由机器学习 (ML) 驱动的交易策略的框架。它重点关注为本书中讨论的机器学习算法和策略提供支持的数据,概述了如何设计和评估适合机器学习模型的功能,以及如何在执行交易策略时管理和衡量投资组合的表现。
本章探讨了导致机器学习成为投资行业竞争优势来源的行业趋势。我们还将研究机器学习在投资流程中的应用,以实现算法交易策略。
更具体地说,它涵盖以下主题:
本章展示如何使用市场和基本数据,并描述它们所反映的环境的关键方面。例如,熟悉各种订单类型和交易基础设施不仅对于数据的解释很重要,而且对于正确设计回测模拟也很重要。我们还说明了如何使用 Python 访问和操作交易和财务报表数据。
实际示例演示了如何使用来自 NASDAQ 逐笔报价数据和 Algoseek 分钟柱数据的交易数据,以及一组丰富的属性来捕获供需动态,我们稍后将使用这些属性来创建基于 ML 的日内策略。我们还介绍了各种数据提供商 API 以及如何从 SEC 获取财务报表信息。
本章特别涵盖:本章概述了替代数据的类别和用例,描述了评估爆炸式增长的数据源和提供商的标准,并总结了当前的市场格局。
它还演示了如何通过抓取网站来创建替代数据集,例如收集财报电话会议记录以与本书第三部分中的自然语言处理(NLP)和情绪分析算法一起使用。
更具体地说,本章涵盖:
如果您已经熟悉 ML,您就会知道特征工程是成功预测的关键因素。它在交易领域至少同样重要,学术界和行业研究人员几十年来一直在研究驱动资产市场和价格的因素,以及哪些特征有助于解释或预测价格变动。
本章概述了这项研究的主要要点,作为您自己探索阿尔法因子的起点。它还提供了计算和测试 alpha 因子的基本工具,重点介绍了 NumPy、pandas 和 TA-Lib 库如何促进数据操作,并介绍了小波和卡尔曼滤波器等流行的平滑技术,有助于减少数据中的噪声。读完后,您将了解:
Alpha 因子产生信号,将算法策略转化为交易,进而产生多头和空头头寸。由此产生的投资组合的回报和风险决定了该策略是否满足投资目标。
有多种方法可以优化投资组合。其中包括应用机器学习(ML)来学习资产之间的层次关系,并在设计投资组合的风险状况时将它们视为补充或替代品。本章内容包括:
第二部分涵盖了基本的监督和无监督学习算法,并说明了它们在交易策略中的应用。它还介绍了 Quantopian 平台,允许您利用和结合本书中开发的数据和机器学习技术来实施在实时市场中执行交易的算法策略。
本章是第 2 部分的开始,第 2 部分说明了如何使用一系列监督和无监督的 ML 模型进行交易。在使用各种 Python 库演示相关应用程序之前,我们将解释每个模型的假设和用例。
许多这些模型及其应用程序有几个共同点。本章涵盖了这些常见方面,以便我们可以在后续章节中重点关注特定于模型的用法。它通过概述如何将 ML 模型的预测性能制定、训练、调整和评估作为系统工作流程奠定了基础。内容包括:
线性模型是回归和分类环境中推理和预测的标准工具。许多广泛使用的资产定价模型都依赖于线性回归。 Ridge 和 Lasso 回归等正则化模型通常可以通过限制过度拟合的风险来产生更好的预测。典型的回归应用程序识别驱动资产回报的风险因素,以管理风险或预测回报。另一方面,分类问题包括定向价格预测。
第 07 章涵盖以下主题:
本章从端到端的角度介绍了设计、模拟和评估由机器学习算法驱动的交易策略。我们将详细演示如何使用 Python 库 backtrader 和 Zipline 在历史市场环境中回溯测试 ML 驱动的策略。 ML4T 工作流程的最终目标是从历史数据中收集证据,帮助决定是否在实时市场中部署候选策略并将财务资源置于风险之中。对策略的真实模拟需要忠实地反映证券市场的运作方式以及交易的执行方式。此外,需要注意几个方法方面的问题,以避免有偏见的结果和错误的发现,从而导致错误的投资决策。
更具体地说,学完本章后,您将能够:
本章重点介绍从时间序列历史中提取信号以预测同一时间序列的未来值的模型。由于交易固有的时间维度,时间序列模型被广泛使用。它提供了诊断时间序列特征(例如平稳性)和提取捕获潜在有用模式的特征的工具。它还引入了单变量和多元时间序列模型来预测宏观数据和波动模式。最后,它解释了协整如何识别时间序列中的共同趋势,并展示了如何基于这一关键概念开发配对交易策略。
特别是,它涵盖:
贝叶斯统计使我们能够量化未来事件的不确定性,并在新信息到来时以有原则的方式完善估计。这种动态方法很好地适应了金融市场不断变化的性质。机器学习的贝叶斯方法能够对统计指标、参数估计和预测的不确定性提供新的见解。应用范围从更精细的风险管理到包含市场环境变化的预测模型的动态更新。
更具体地说,本章涵盖:
本章将决策树和随机森林应用于交易。决策树从编码非线性输入输出关系的数据中学习规则。我们展示了如何训练决策树来预测回归和分类问题,可视化和解释模型学到的规则,以及调整模型的超参数以优化偏差-方差权衡并防止过度拟合。
本章的第二部分介绍了集成模型,该模型以随机方式组合多个决策树,以产生误差较低的单个预测。最后得出了基于随机森林模型生成的交易信号的日本股票多空策略。
简而言之,本章涵盖:
梯度增强是一种替代的基于树的集成算法,通常比随机森林产生更好的结果。关键的区别在于,Boosting 根据模型产生的累积误差修改用于训练每棵树的数据。虽然随机森林使用数据的随机子集独立地训练许多树,但提升会按顺序进行并重新加权数据。本章展示了最先进的库如何实现令人印象深刻的性能,并将提升应用于每日和高频数据来回测日内交易策略。
更具体地说,我们将涵盖以下主题:
降维和聚类是无监督学习的主要任务:
更具体地说,本章涵盖:
文本数据内容丰富,但格式非结构化,因此需要更多预处理,以便机器学习算法能够提取潜在信号。关键的挑战包括将文本转换为可供算法使用的数字格式,同时表达内容的语义或含义。
接下来的三章介绍了几种捕捉人类容易理解的语言细微差别的技术,以便机器学习算法也可以解释它们。
文本数据内容非常丰富,但高度非结构化,因此需要更多的预处理才能使机器学习算法能够提取相关信息。一个关键的挑战包括将文本转换为数字格式而不失去其含义。本章介绍如何通过创建文档术语矩阵将文档表示为标记计数向量,该矩阵又充当文本分类和情感分析的输入。它还介绍了朴素贝叶斯算法,并将其性能与线性和基于树的模型进行了比较。
特别是,本章涵盖:
本章使用无监督学习来建模潜在主题并从文档中提取隐藏主题。这些主题可以生成对大量财务报告的详细见解。主题模型可以自动创建复杂的、可解释的文本特征,从而有助于从大量文本集合中提取交易信号。它们加快文档审查速度,实现相似文档的聚类,并生成对预测建模有用的注释。应用包括识别公司披露、财报电话会议记录或合同中的关键主题,以及基于情绪分析或使用相关资产回报的注释。
更具体地说,它涵盖:
本章使用神经网络来学习单个语义单元(例如单词或段落)的向量表示。与词袋模型的高维稀疏向量相比,这些向量密集地包含数百个实值条目。结果,这些向量将每个语义单元嵌入或定位在连续向量空间中。
嵌入是通过训练模型将标记与其上下文相关联而产生的,其优点是相似的用法意味着相似的向量。因此,它们通过单词之间的相对位置来编码语义方面,例如单词之间的关系。它们是我们将在接下来的章节中与深度学习模型一起使用的强大功能。
更具体地说,在本章中,我们将介绍:
第四部分解释并演示了如何利用深度学习进行算法交易。深度学习算法识别非结构化数据模式的强大功能使其特别适合图像和文本等替代数据。
例如,示例应用程序展示了如何结合文本和价格数据来预测 SEC 文件中的收益意外,生成合成时间序列以扩大训练数据量,以及使用深度强化学习来训练交易代理。其中一些应用程序复制了最近在顶级期刊上发表的研究成果。
本章介绍前馈神经网络(NN),并演示如何使用反向传播有效地训练大型模型,同时管理过度拟合的风险。它还展示了如何使用 TensorFlow 2.0 和 PyTorch 以及如何优化神经网络架构来生成交易信号。在接下来的章节中,我们将在此基础上将各种架构应用于不同的投资应用程序,重点关注另类数据。其中包括针对时间序列或自然语言等序列数据定制的循环神经网络,以及特别适合图像数据的卷积神经网络。我们还将介绍深度无监督学习,例如如何使用生成对抗网络(GAN)创建合成数据。此外,我们将讨论强化学习来训练从环境中交互式学习的代理。
特别是,本章将涵盖
CNN 架构不断发展。本章介绍了成功应用程序中常见的构建块,演示了迁移学习如何加速学习,以及如何使用 CNN 进行对象检测。 CNN 可以从图像或时间序列数据生成交易信号。卫星数据可以通过农业区、矿山或运输网络的航空图像来预测商品趋势。摄像机镜头可以帮助预测消费者活动;我们展示了如何构建一个 CNN,对卫星图像中的经济活动进行分类。 CNN 还可以利用其与图像的结构相似性来提供高质量的时间序列分类结果,我们设计了一种基于图像格式的时间序列数据的策略。
更具体地说,本章涵盖:
复发性神经网络(RNNS)将每个输出作为先前输出和新数据的函数计算,从而有效地创建了一个模型,该模型与内存共享参数跨更深的计算图。突出的体系结构包括长期记忆(LSTM)和封闭式复发单元(GRU),这些单元(GRU)应对学习长期依赖性的挑战。 RNN旨在将一个或多个输入序列映射到一个或多个输出序列,并且特别适合自然语言。它们也可以应用于单变量和多变量时间序列,以预测市场或基本数据。本章介绍了RNN如何使用我们在第16章中介绍的单词嵌入词来对替代文本数据进行建模,以对文档中表达的情感进行分类。
更具体地说,本章解决:
本章展示了如何利用无监督的深度学习进行交易。我们还讨论了自动编码器,即,在学习由隐藏层的参数编码的新表示时,经过培训的神经网络,旨在重现输入。长期以来,自动编码器一直用于降低非线性维度,并利用了我们在最后三章中涵盖的NN体系结构。我们复制了最近的AQR论文,该论文显示了自动编码器如何支持交易策略。我们将使用依赖自动编码器的深度神经网络来提取风险因素并预测以一定股票属性为条件的权益回报。
更具体地说,在本章中,您将了解:
本章介绍了生成的对抗网络(GAN)。 GAN在竞争环境中训练发电机和鉴别器网络,以便发电机学会生产鉴别器无法与给定类别的培训数据区分开的样本。目的是产生能够产生代表该类别的合成样品的生成模型。虽然最受欢迎的图像数据,但GAN也已被用于在医疗领域生成合成的时间序列数据。随后进行财务数据的实验探索了gan是否可以产生对ML培训或策略回测有用的替代价格轨迹。我们复制了2019年神经时间序列GAN纸,以说明该方法并证明结果。
更具体地说,在本章中,您将了解:
强化学习(RL)模拟与随机环境相互作用的代理商的目标指导学习。 RL通过从奖励信号中学习状态和行动的价值来优化代理关于长期目标的决定。最终目标是得出一个编码行为规则并将其映射到行动的策略。本章介绍了如何制定和解决RL问题。它涵盖了基于模型的和无模型的方法,引入了OpenAI健身房环境,并将深度学习与RL结合起来,以训练可以导航复杂环境的代理。最后,我们将向您展示如何通过建模与金融市场相互作用的同时试图优化目标功能的代理商进行建模,以适应算法交易。
更具体地说,本章将涵盖:
在本章节中,我们将简要总结整本书中所学的基本工具,应用程序和经验教训,以避免在这么多细节之后忽略大局。然后,我们将确定我们没有覆盖的领域,但值得关注,因为您扩展了我们引入的许多机器学习技术,并在日常使用方面变得富有成效。
总而言,在本章中,我们将
在整本书中,我们强调了功能的智能设计,包括适当的预处理和denoing,通常会导致有效的策略。该附录综合了有关功能工程学的一些教训,并提供了有关此重要主题的其他信息。
为此,我们专注于TA-LIB实施的广泛指标(请参阅第4章)和WorldQuant的101个公式化Alphas Paper(Kakushadze 2016),该论文提出了生产中现实生活中的定量交易因素,平均持有期为0.6-6.4天。
本章涵盖: