1.3 量化交易的工具

量化投资交易仍在蓬勃发展之中,因此市面上的量化交易框架也是百花齐放的。本节将选择性地分类别介绍几个具有代表性的量化交易平台与框架。总体而言,量化交易策略通常是计算密集型的,因此对计算机的算力要求较高。目前主流的量化交易框架大体能够分为“在线型”和“离线型”两种,“在线型”的量化交易平台显而易见无须自己考虑计算机的算力问题,只需本地或线上开发专注于开发自己的交易策略,对于个人快速验证想法十分适用,而大多数“在线型”量化交易平台由于在Web端进行策略的开发,因此进行代码开发时许多定制化的API提示较少,需要一定的前期学习成本,并且在个人编写策略时难以自定义文件的组织与结构,而“离线型”量化平台一方面在本地编写代码时有较好的代码提示,另一方面“离线型”量化平台支持自定义功能,有更好的扩展性,而其缺点也是显而易见的,需要自身维护整个项目的高并发和高可用等。不过就策略起步开发阶段,暂且可以不用考虑系统的高并发与高可用,在“离线型”框架中注重策略本身逻辑的开发即可。

1.3.1 基于Web端的工具

目前市面上可用的基于Web端的量化交易工具众多,本节仅选取其中两个代表性的平台进行介绍。

1.JoinQuant

JoinQuant是国内量化投资交易兴起时最早涌现出的一批基于Web端的在线量化交易平台之一,使用JoinQuant开发交易策略无须自己操心开发环境的搭建,如图1-4为JoinQuant的首页。从选项栏中可以看到其主要提供策略研究与开发、提供量化历史数据与社区。相对而言,JoinQuant的社区活跃度较高,其页面如图1-5所示,这是JoinQuant的一大优势。

在社区中,可以看到由各个开发者贡献的用于交流学习的策略思想与源代码,也能在社区中查询到在开发过程中遇到的技术问题,因此一个活跃的社区相对于框架本身能够提供的通用功能(如交易接口、交易数据等)是十分可贵的。

图1-4 JoinQuant首页

图1-5 JoinQuant社区

JoinQuant的策略开发研究功能提供了基于类似Python的Jupyter Notebook的编程环境,对于编程新手而言能够提供所见即所得的结果。不过,其免费账户每日回测有60min的限制,实时模拟交易功能也是收费的,显然,对于一个提供了完备基础服务的平台,其开放的大部分功能免费并对部分功能收取合理的费用也是无可厚非的,对于读者而言,可以自行权衡利弊。

2.FMZ

相比于JoinQuant,FMZ量化交易平台起步稍晚,不过目前而言FMZ能够支持的交易品种更多,FMZ交易平台的首页如图1-6所示。

图1-6 FMZ首页

与JoinQuant类似,FMZ也有自己的社区并且活跃度较高,FMZ对于各语言的程序员友好并且容易迁移,其支持的编程语言包括Python、C++等完整的高级语言,也支持和麦语言(文华财经使用)实现策略,因此对于之前在文华财经上测试量化交易策略的人员而言可以无成本切换。

FMZ社区如图1-7所示,可以看出社区很清晰地提供了按照不同量化交易策略类型或者交易品种的分类,对于使用者而言能够十分方便地总览策略情况并且找到自己所需的策略。

FMZ提供以机器人运行量化交易策略的形式,目前以小时进行计费,一个有趣的功能是FMZ允许用户公开自己的交易机器人的运行情况,因此可以围观其他用户量化交易策略的运行情况。

FMZ量化交易平台有完备的API文档与电子书教学资料,其官方也开放了众包平台,可以在平台上提交开发需求或在平台上进行自荐。FMZ量化平台还包括了手机客户端,对于实盘机器人的监控与机器人的启停可以更方便地进行。

对于像JoinQuant和FMZ这种基于Web端的量化交易平台还有许多,像掘金量化、开拓者、RiceQuant、BigQuant、真格、优矿等,读者可以自行了解。总体而言,基于Web端的在线量化交易平台让用户省心了不少,方便用户专注于策略的开发。

图1-7 FMZ社区

1.3.2 本地离线的工具

不同于基于1.3.1节中介绍的基于Web端的量化交易平台,本地离线的量化交易工具,则需要用户在更多方面操心,例如数据的获取、数据的清洗、系统的高并发性与高可用性都是需要用户处理的,但是同时这些也是搭建自己的量化平台必须考虑的因素。本节将介绍几个本地离线的量化交易工具。

1.Zipline

Zipline是Quantopian开源的量化交易框架(2),其核心需要实现两个函数,一个是initialize,另一个是handle_data,其中Zipline会调用用户传入的initialize函数并传入策略的上下文变量context,该变量用于保存算法策略在执行过程中所需的变量,可以用于存储算法在执行不同阶段的策略时需要的数据,而handle_data则是表示当有新的数据传入时所需要执行的逻辑,在定义完初始化和处理的函数后,需要在命令行使用zipline命令与相应的选项执行策略并通过脚本读取策略的具体回测结果,相对来讲对新手而言较为复杂。此外,Zipline官方并不支持实盘交易,并且Zipline原生是一个回测框架,其仅关注于回测策略的交易情况,并不包含风险控制等模块,因此要将Zipline用于实盘交易还需要用户外接额外的模块才能使用。

2.vn.py

vn.py是上海韦纳软件科技有限公司开发和维护的一款基于Python的开源量化交易平台开发框架(3),其本身具有多种功能,包括回测、CTA策略、算法交易、价差套利、期权策略、行情录制等功能,因此相对于使用Zipline而言,vn.py自身内置了许多不同的模块,对于开发者而言就像是一个大的工具箱,可以根据开发者自己的需求将不同的模块像搭积木一样自由组合,并且由于其是开源框架,也可以根据自身的需求进行改动和定制。

vn.py原生包含一个由PyQT编写的GUI界面,在策略运行和回测时能够直观地观察策略的运行过程与收益情况,同时vn.py也支持命令行运行方式,不同的使用者可以找到适合自己的使用方法。

3.backtrader

从名称上可以看出,backtrader是一个用于回测的框架,在2015年完成开源(4)。使用backtrader进行量化交易策略回测时主要有4个步骤,其核心引擎称为Cerebro引擎,在创建了引擎之后,再加入自己编写的策略,之后向引擎中加载数据,此时包含买卖逻辑的策略和运行策略必要的数据都已经具备,此时执行cerebro.run()即可开始回测,回测完毕后的结果会依托Matplotlib绘制出来。

整体而言,backtrader在回测的应用上十分便捷,各个步骤的设计易于使用,不足的是其可视化结果不具有交互性,因此对于周期较长的回测而言,绘制结果有时会变得难以辨认。目前backtrader已有国内开发者维护的实盘交易接口。

4.PyAlgoTrade

PyAlgoTrade是一个事件型驱动的开源量化交易框架(5),其包含六大组件,其中Strategies表示核心量化交易策略,是用于定义的实现交易逻辑的类,实现了买卖逻辑等;Feeds组件表示数据源,数据源不仅限于K线数据;Brokers模块用于经纪商,负责执行订单;DataSeries表示数据序列,是用于管理时间序列的抽象类;Technicals模块内置指标计算;Optimizer组件为优化器,当编写好包含若干参数的量化交易策略时,使用Optimizer模块可以在数据源保持不变的情形下,对策略的参数进行优化以搜寻策略回测的最佳参数。