在系统性交易策略(STS)的生产流程中,回测可以说是最为关键的一环,它位于策略开发与实盘部署之间。如果某个策略存在缺陷,严谨的回测可以提前揭示问题,从而避免将有亏损风险的策略投入实盘运行。
与回测密切相关的还包括交易模拟和实盘交易。
回测利用历史数据来量化评估STS的表现;
交易模拟器则在回测基础上更进一步,逐棒(bar-by-bar)可视化展示交易触发及价格变化过程。
模拟交易或实盘交易则将经过检验的STS投入实时运行,包括发出交易信号、生成订单、将订单路由至经纪商,并在订单执行后持续管理持仓。
目前,多数回测框架的功能已超出纯回测范畴,提供了一定的实盘交易能力。如果用户希望在同一框架内完成从回测到实盘的部署,并且该框架能对接偏好的经纪商和数据源,这种集成设计会非常方便。
如今Python社区在回测框架方面资源丰富,不过一些框架在开发进度和文档完善程度上参差不齐。有兴趣的朋友可以去自行探索。
在评估回测框架之前,有必要先明确自身系统性交易策略(STS)的需求。
您交易哪些资产类别? 虽然大多数框架支持通过外部数据库获取股票数据,但如果策略涉及衍生品、ETF或新兴市场证券,则这些数据需要能够导入,或者由框架直接提供。资产类别的覆盖范围不仅限于数据层面,还要考虑框架能否处理有限期限的期货和期权,并自动生成展期交易?对于流动性不足的市场,在执行大额订单时需要做出何种程度的现实假设?
您的STS基于何种数据频率和精度? 需要逐笔数据或买卖报价的交易系统,与基于5分钟或小时级别的系统所面临的数据管理问题截然不同。对冲基金和高频交易机构在构建稳健、可扩展的回测框架以处理如此海量和高频的数据方面投入了大量资源。部分平台为各类资产(如标普成分股)提供了分钟级分辨率的丰富数据。
您的STS需要哪些订单类型? 至少,框架应支持限价单、止损单和OCO订单,即选择性委托单。
所需的支持与文档水平如何? 处于早期阶段的框架文档往往比较简略,除社区论坛外,几乎没有其他技术支持渠道。
回测框架的组成部分
数据与策略获取: 数据与策略获取模块负责读取策略脚本或定义文件,并为回测提供所需的数据。如果框架要求策略必须先进行代码改写才能回测,则框架应内置最常用技术指标的现成函数,以加快策略回测速度。用户可根据框架提供的数据范围或自身能导入的数据量,来决定回测的历史周期长度。
绩效测试: 绩效测试将策略逻辑应用于选定的历史数据窗口,并计算一系列风险与绩效指标,包括最大回撤、夏普比率和索提诺比率。绝大多数框架都具备较为丰富的可视化功能,如权益曲线和十分位统计量等。
优化: 在策略生产流程中,优化往往占用最多的计算资源。如果你的策略需要参数优化,应优先选择支持可扩展分布式或并行处理的框架。
对于基于技术指标开发的策略,系统开发人员通常会尝试为每个指标寻找一组最优参数。最简单的例子是,通过优化可能发现,在6日和10日移动平均线交叉策略中,该组合在历史回测数据上比其他1至20日之间的任意周期组合积累了更多收益。仅此一个简单例子,就需要计算和排序 20×20=400 种参数组合。
在投资组合层面,优化则旨在为组合中的每一项资产,包括卖空和杠杆工具,找到最优权重配置。组合会定期进行再平衡,根据优化后的权重比例进行相应买卖操作。
仓位规模: 仓位规模管理是优化的另一个应用方向,它帮助系统开发人员模拟和分析杠杆及动态仓位调整对策略和投资组合整体绩效的影响。
适用于Python的六个回测框架
开源Python回测平台通常具备以下基本能力:
事件驱动架构
非常灵活且无严格限制的许可协议
较为丰富的预定义技术指标库
标准的绩效指标计算、可视化及报告生成功能
bt —— Python回测框架
bt“旨在构建易于测试、可复用且灵活的策略逻辑模块,从而加速复杂交易策略的快速开发”。
该框架特别适用于基于投资组合的系统性交易策略(STS)的回测,内置了资产权重分配和组合再平衡等算法。若要调整策略以适应不同时间频率或更换资产权重,只需对代码进行少量修改即可。bt基于ffn构建,后者是一个Python金融函数库。
国内适用性说明:bt框架在国内用户群体相对较小,中文文档和社区支持有限。如需对接A股数据,可通过Tushare、AKShare等开源数据接口进行适配。
PyAlgoTrade
PyAlgoTrade是一个成熟且文档较为完善的回测框架,同时支持模拟交易功能。其支持的数据源包括Yahoo! Finance、Google Finance、以及基于CSV格式的时间序列数据。支持的订单类型包括市价单、限价单、止损单和止损限价单。此外,PyAlgoTrade还支持通过Bitstamp进行比特币交易。
国内适用性说明:PyAlgoTrade在国内量化社区中知名度一般,主要用于入门学习和策略验证。对于A股数据,国内用户通常通过Tushare Pro、AKShare等免费数据源进行适配。需要注意的是,Yahoo Finance等国际数据源在国内的访问稳定性和A股数据覆盖均存在局限。实盘交易方面,该框架缺乏对国内券商CTP接口或QMT等主流交易终端的原生支持。
Backtrader
Backtrader是一个文档极为完善的回测平台,配有配套博客和活跃的在线社区,方便用户提问和提交功能需求。该框架支持多种数据格式,包括CSV文件、Pandas DataFrame以及多种实时数据源,这些数据源可同时接入,甚至能够支持不同时间周期。
国内适用性说明:Backtrader在国内量化社区中拥有大量用户,中文教程和社区讨论资源丰富。数据源方面,国内开发者通常通过Tushare、AKShare、BaoStock等开源数据接口进行对接。实盘交易方面,Backtrader除支持Interactive Brokers、Oanda等国际经纪商外,国内还可通过QMT等框架进行对接,期货领域则支持对接CTP等接口。对于A股市场,需注意部分券商对程序化交易有相应限制。
pysystemtrade
pysystemtrade的开发者Rob Carver曾撰写过一篇精彩的文章,讨论了为何要再开发一个Python回测框架,以及支持与反对框架开发的各方理由。该回测框架在Rob的著作《系统化交易》中亦有详细论述。pysystemtrade列出了包括功能完备的回测器(内含优化与校准技术)以及全自动期货交易在内的多项规划功能。
国内适用性说明:pysystemtrade专注于期货市场的系统化交易,在国内的使用群体相对较小。该框架对Interactive Brokers的支持较为完善,但国内期货市场主流的CTP接口需要额外进行适配开发。中文资料和社区支持有限,上手门槛相对较高。
Zipline
Zipline是一个算法交易模拟器,支持模拟交易功能。通过基于浏览器的IPython Notebook界面即可访问,为不习惯命令行工具的用户提供了简便的替代方案。Zipline由Quantopian支持开发,既可独立作为回测框架使用,也可作为完整策略开发、测试与部署环境的一部分。Zipline提供长达10年的美国股票分钟级历史数据,并支持多种数据导入方式。
国内适用性说明:Zipline在国内量化平台(如聚宽、米筐等)中常作为策略模板的参考。但随着Quantopian于2020年关闭,Zipline已不再积极维护,国内用户更多转向Backtrader或本土框架。如需用于A股回测,需通过Tushare等数据接口进行适配。对于国内用户而言,本土化适配成本相对较高。
QSTrader
QSTrader是一个具备实盘交易能力的回测框架,旨在打造一个稳健且可扩展的平台,以满足机构量化对冲基金和零售量化交易者的双重需求。QSTrader目前支持不同时间周期的OHLCV“柱”数据,同时也允许使用tick级别的数据。
回测与实盘交易均采用完全事件驱动的架构,使得策略从研究到测试、再到实盘上线的过渡更加顺畅。核心的策略与投资组合代码在两种部署方式中往往保持一致。QSTrader的主要优势在于其模块化设计,便于用户根据特定的风险管理或投资组合管理需求,对代码进行广泛的自定义。
国内适用性说明:QSTrader在国内已有中文版(QSTrader-CN),支持中国A股市场的交易,并支持tick级别的回测。该框架采用事件驱动架构,将信号生成、投资组合构建、风险管理、执行等模块分离,适合对系统架构有较高要求的用户。中文资料方面,已有部分技术博客对该框架进行了介绍。但需要注意的是,该框架在国内的社区规模和中文文档丰富程度仍不及Backtrader等主流框架。
补充说明:国内量化领域的本土化选择
对于主要交易A股或国内期货市场的用户,除上述国际开源框架外,以下本土化方案值得重点关注:
vn.py:国产开源量化交易平台,覆盖期货、股票、期权等多个市场,原生支持CTP等国内期货接口,是国内期货量化交易的主流选择之一。功能覆盖从数据服务、策略研发、回测分析到实盘交易的全流程。
在线量化平台:聚宽(JoinQuant)、米筐(Ricequant)、掘金量化等国内云端量化平台,提供Python友好的在线回测环境,内置丰富的A股数据,适合个人和初创团队快速验证策略。
本地专业终端:迅投QMT、恒生PTrade等专业量化交易终端,提供本地化的回测与实盘交易环境,适合对交易速度和稳定性有较高要求的用户。
拥抱回测
急于将有盈利潜力的系统性交易策略投入实盘交易,而未能投入足够的时间和资源进行充分回测,这是人之常情。但回测的意义远不止于防止有缺陷的策略上线、避免损失交易资金,它还能为策略开发过程提供多方面的诊断信息。例如,在不同时间区间测试同一策略、结合资产相关性来理解策略的最大回撤,以及通过跨地域回测资产配置来构建更优化的投资组合。
在后续有机会的话我们将进一步介绍非Python环境下的回测框架,以及自助法(bootstrapping)和刀切法(jackknife)等重采样技术在预测性交易模型回测中的应用。