前言
数据主义说宇宙是由数据流组成的,任何现象或实体的价值都取决于它对数据处理的贡献……数据主义由此打破了动物[ 人类] 和机器之间的障碍,并期望电子算法最终能够破译并胜过生化算法。注1
——尤瓦尔·诺亚·哈拉利
找到正确的算法来自动、成功地在金融市场进行交易是金融领域的必杀技。以前,算法交易只适用资金雄厚、管理大量资产的机构参与者。开源、开放数据、云计算和云存储领域以及在线交易平台的最新发展为小型机构和个人交易者提供了公平的竞争环境,使他们有可能开始接触这个迷人的学科。因为通常只需配备一台笔记本或台式电脑以及可靠的互联网连接即可。
如今,Python 及其强大的软件包生态系统是算法交易的首选技术平台。除此之外,Python 允许你进行高效的数据分析 [ 例如使用pandas (http://pandas.pydata.org)],将机器学习应用于股票市场预测 [ 例如使用 scikit-learn(http://scikitlearn.org)],甚至使用谷歌的深度学习技术TensorFlow(http://tensorflow.org)。
这是一本关于Python 算法交易的书,主要是在alpha 生成策略领域(参见第1 章)。
这样一本位于两个广阔而令人兴奋的领域交汇处的书很难涵盖所有相关主题,但可以深入探讨一系列重要的元主题。
这些主题包括:
金融数据
金融数据是每个算法交易项目的核心。Python 和NumPy、pandas 等软件包在处理结构化金融数据(包括日终、日内、高频)等方面做得很好。
回测
如果没有对要部署的交易策略进行严格回测,就不应该进行自动算法交易。本书涵盖了基于简单移动平均线、动量、均值回归和基于机器/ 深度学习的预测的交易策略,以及其他内容。
实时数据
算法交易需要处理实时数据,基于它的在线算法,以及实时的可视化。本书介绍了使用ZeroMQ 和流可视化进行套接字编程。
在线平台
没有交易平台,就无法进行交易。本书涵盖了两个流行的电子交易平台:Oanda(http://oanda.com)和 FXCM(http://fxcm.com)。
自动化
算法交易的美妙之处和一些主要挑战都来自交易操作的自动化。本书展示了如何在云中部署Python 以及如何设置适合自动算法交易的环境。
这本书提供了独特的学习体验,具有以下特点和好处:
相关主题的覆盖
这是唯一一本涵盖Python 算法交易相关主题的广度和深度的书(见下文)。
自包含的代码库
本书附带一个Git 仓库,其中包含独立的、可执行的所有代码。该代码库在Quant 平台(http://py4at.pqp.io)上可用。
以真实交易为目标
两种不同的在线交易平台的覆盖范围使读者能够有效地开始离线和实时交易。为此,本书为读者提供了相关的、实用的和有价值的背景知识。
自己动手和自定进度的方法
由于材料和代码是自包含的并且仅依赖于标准Python 包,因此你可以完全了解并完全控制正在发生的事情、如何使用代码示例,以及如何更改它们等。无需依赖第三方平台,例如进行回测或连接交易平台。有了这本书,你可以自己用合适的速度完成所有这些工作,并且每一行代码都可以这样做。
用户社区
尽管你应该能够无缝地跟读,但作者和Python Quant 可以提供帮助。你可以随时在Quant 平台(http://py4at.pqp.io)的用户论坛上发表问题和评论(账号免费)。
在线/ 视频培训(付费订阅)
Python Quants 提供了全面的在线培训计划(https://oreil.ly/Qy90w),这些计划利用了书中提供的内容并添加了额外的内容,涵盖了金融数据科学、金融人工智能等重要主题、用于Excel 和数据库的Python,以及其他Python 工具和技能。
内容和结构
以下是对每章中介绍的主题和内容的概述。
第1 章,Python 和算法交易
第1 章是对算法交易主题的介绍,即基于计算机算法的金融工具的自动交易。它讨论了其中的基本概念,还介绍了阅读本书的预期先决条件等。
第2 章,Python 基础架构
本章为所有后续章节奠定了技术基础,因为它展示了如何设置合适的Python 环境。本章主要使用conda 作为包和环境管理器。它介绍了通过Docker(http://docker.com)容器和云服务部署Python。
第3 章,处理金融数据
金融时序数据是每个算法交易项目的核心。本章向你展示如何从不同的公共数据源和专有数据源获取金融数据。它还演示了如何使用Python 高效地存储金融时序数据。
第4 章,掌握向量化回测
向量化是一种强大的数值计算方法,尤其适用于金融分析。本章介绍了NumPy和pandas 的向量化,并将该方法应用于基于SMA、动量和均值回归策略的回测。
第5 章,通过机器学习预测市场动向
本章致力于通过使用机器学习和深度学习方法生成市场预测。主要通过依靠过去的回报观察作为特征,提出了通过使用诸如Keras(https://keras.io)以及TensorFlow(https://oreil.ly/B44Fb)和scikit-learn(http://scikit-learn.org)等Python 包来预测明天市场方向的方法。
第6 章,构建基于事件回测的类
虽然向量化回测在代码和性能的简洁性方面具有优势,但在表示交易策略的某些市场特征方面存在局限性。另外,通过使用面向对象编程技术实现的基于事件的回测允许对此类功能进行相当细粒度和更现实的建模。本章详细介绍并解释了一个基类以及两个用于回测多头和多空交易策略的类。
第7 章,使用实时数据和套接字
即使对于雄心勃勃的个人算法交易者来说,处理实时或流数据是必须的。使用的工具是套接字编程,本章介绍了作为轻量级和可扩展技术的ZeroMQ(http://zeromq.org)。本章还说明了如何使用Plotly(http://plot.ly) 创建漂亮的交互式流图。
第8 章,使用Oanda 进行CFD 交易
Oanda(http://oanda.com)是一个外汇(forex,FX)和差价合约(CFD)交易平台,它提供了广泛的可交易工具,例如基于外汇对、股票指数、商品或利率工具(基准债券)。本章提供了通过利用Python 包tpqoa(http://github.com/yhilpisch/tpqoa),指导如何使用Oanda 实施自动算法交易策略。
第9 章,使用FXCM 进行外汇交易
FXCM(http://fxcm.co.uk) 是另一个外汇和差价合约交易平台,它最近还发布了用于算法交易的现代化RESTful API。可用工具涵盖多种资产类别,例如外汇、股票指数或商品。提供了一个Python 包,它使得基于Python 代码的算法交易变得相当方便和高效(http://fxcmpy.tpq.io)。
第10 章,自动化交易操作
本章涉及资本管理、风险分析和管理,以及算法交易操作中的自动化技术的典型任务。例如,它详细介绍了资本分配和杠杆的凯利标准。
附录
附录简要介绍了在主要章节中使用的、最重要的Python、NumPy 和pandas 主题。它代表了一个起点,随着时间的推移,人们可以从中增加自己的Python 知识。图1 展示了各章从下而上涵盖的与算法交易相关的层。它必须从Python 基础设施(第2 章)开始,然后增加金融数据(第3 章)、策略和向量化回测代码(第4 章和第5章)。在此之前,数据集作为一个整体被使用和操作。基于事件的回测首次引入了现实世界中的数据增量到达的想法(第6 章)。它是通向覆盖套接字通信和实时数据处理的连接代码层的桥梁(第7 章)。之后是需要交易平台及其API 可以下订单(第8 章和第9 章)。最后,涵盖了自动化和部署的重要方面(第10 章)。从这个意义上说,本书的主要章节与图1 中所示的层相关,这些层为要涵盖的主题提供了自然的顺序。
本书的读者对象
本书适用希望在迷人的算法交易领域应用Python 的学生、学者和从业者。本书假设你至少在基本层面上具有Python 编程和金融交易方面的背景知识。作为参考和回顾,附录介绍了重要的Python、NumPy、matplotlib 和pandas 主题。以下是很好的参考资料,可以帮助你充分理解对本书很重要的Python 主题。大多数读者至少可以阅读Hilpisch(2018)作为参考。关于应用于算法交易的机器和深度学习方法,Hilpisch(2020) 提供了丰富的背景信息和大量的具体例子。有关Python 应用于金融、金融数据科学和人工智能的背景信息可以在以下书籍中找到:
Hilpisch, Yves. 2018. Python for Finance: Mastering Data-Driven Finance. 2nd ed.Sebastopol: O’Reilly.
——. 2020. Artificial Intelligence in Finance: A Python-Based Guide. Sebastopol:O’Reilly.
McKinney, Wes. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy,and IPython. 2nd ed. Sebastopol: O ’Reilly.
Ramalho, Luciano. 2021. Fluent Python: Clear, Concise, and Effective Programming.2nd ed. Sebastopol: O’Reilly.
VanderPlas, Jake. 2016. Python Data Science Handbook: Essential Tools for Working with Data. Sebastopol: O’Reilly.
可以在以下书籍中找到有关算法交易的背景信息:
Chan, Ernest. 2009. Quantitative Trading: How to Build Your Own Algorithmic Trading Business. Hoboken et al: John Wiley & Sons.
Chan, Ernest. 2013. Algorithmic Trading: Winning Strategies and Their Rationale.
Hoboken et al: John Wiley & Sons.
Kissel, Robert. 2013. The Science of Algorithmic Trading and Portfolio Management.
Amsterdam et al: Elsevier/Academic Press.
Narang, Rishi. 2013. Inside the Black Box: A Simple Guide to Quantitative and High Frequency Trading. Hoboken et al: John Wiley & Sons.
请尽情享受你在Python 算法交易世界中的旅程,如果有任何问题或意见,请发送电子邮件至py4at@tpq.io 与我们联系。
排版约定
在本书中,使用以下排版约定:
斜体(Italic)
表示新名词、URL、电子邮件地址、文件名以及文件扩展名。
等宽字体(Constant width)
表示程序代码,以及在正文中引用变量、函数名称、数据类型、环境变量、语句、关键字等代码中的元素。还用于展示命令和命令行的输出。
粗体等宽字体(Constant width bold)
表示需要用户输入的命令或其他文本。
斜体等宽字体(Constant width italic)
需要替换成用户自定义的值或根据上下文决定的值。
使用示例代码
你可以在https://py4at.pqp.io 的Quant 平台上访问和执行本书随附的代码,只需免费注册即可。
如果你有技术问题或者在使用代码示例时有问题,请发送电子邮件至bookquestions@oreilly.com。
本书旨在帮助你完成工作。一般来说,如果本书提供了示例代码,你可以在你的程序和文档中使用它。除非你要复制大部分代码,否则你无需联系我们以获得许可。例如,使用了本书中的几段代码编写程序不需要许可。 出售或分发 O ’Reilly 书籍中的示例确实需要获得许可。通过引用本书和引用示例代码来回答问题不需要许可。
将本书中的大量示例代码合并到你的产品文档中确实需要获得许可。
我们不强制要求署名,但如果你这么做,我们深表感激。署名一般包括书名、作者、出版社和书号(ISBN)。例如,这本书可能被归为:“Python for Algorithmic Trading by Yves Hilpisch (O’Reilly). Copyright 2021 Yves Hilpisch, 978-1-492-05335-4”。
如果你认为对示例代码的使用不属于合理使用或上述许可范围,请随时通过permissions@oreilly.com 与我们联系。
O’Reilly 在线学习平台(O’Reilly Online Learning)
近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。
联系我们
任何有关本书的意见或疑问,请按照以下地址联系出版社。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
我们为本书提供了一个网页,上面有勘误表、示例和其他相关的信息,请访问:https://oreil.ly/py4at。
有关本书的建议或者技术问题,请发邮件到errata@oreilly.com.cn。
有关其他图书、讲座、会议、新闻的信息,请访问我们的网站:http://www.oreilly.com。
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的YouTube:http://www.youtube.com/oreillymedia。
致谢
我要感谢技术审阅者——Hugh Brown、McKlayne Marshall、Ramanathan Ramakrishnamoorthy和Prem Jebaseelan,他们提供了有益的评论,帮助对本书的内容进行了许多改进。
像往常一样,特别感谢 Michael Schwed,他以广泛而深入的技术知识在所有技术问题上为我提供支持,无论是简单的还是高度复杂的。
基于Python 的计算金融和算法交易证书课程的代表们也帮助改进了这本书。他们持续的反馈使我能够清除错误和失误,并改进我们的在线培训课程以及现在最终在本书中使用的代码和文档。
我还要感谢O’Reilly Media 的整个团队,尤其是Michelle Smith、Michele Cronin、Victoria DeRose 和Danny Elfanbaum,他们让这一切成为现实,并帮助我在很多方面完善了这本书。
当然,所有剩余的错误都是我一个人的。
此外,我还要感谢Refinitiv 的团队,尤其是Jason Ramchandani,感谢他们提供持续的支持和对金融数据的使用。全书使用并提供给读者的主要数据文件是从Refinitiv的数据API 以这种或者那种方式接收的。
把爱献给我的家人。我将这本书献给我的父亲阿道夫,他对我和我们的家庭的支持已经持续了近五十年。