Python开源回测软件的前景,并提供了关于哪种回测框架适合您自己的项目需求的建议。

回溯测试可以说是系统交易策略(STS)生产过程中最关键的部分,介于策略开发和部署(实时交易)之间。如果策略存在缺陷,严格的回溯测试将有望揭露这一点,从而防止部署亏损策略。

许多相关功能与回溯测试重叠,包括交易模拟和实时交易。回测使用历史数据来量化STS性能。交易模拟器通过在逐条形基础上可视化交易触发和价格表现来进一步回测。模拟/实时交易实时部署经过测试的STS:发信号交易,生成订单,向经纪人发送订单,然后在执行订单时维持仓位。

大多数框架都超越了回溯测试,包括一些实时交易功能。如果要从回测框架进行部署,这也很方便,后者也适用于您首选的代理和数据源。Quantopian / Zipline更进一步,提供完全集成的开发,回测和部署解决方案。

Python社区服务很好,至少有六个开源回测框架可供使用。但是,它们处于开发和文档的各个阶段。如果您喜欢在构建开源回测框架的团队中工作,请查看他们的Github回购。

在评估回测框架之前,值得定义STS的要求。

你在交易什么资产类别?虽然大多数框架通过YahooFinance支持美国股票数据,但如果策略包含衍生品,ETF或EM证券,则数据需要是可导入的或由框架提供。资产类覆盖范围超出了数据范围。框架可以处理有限长度期货和期权并自动生成翻转交易吗?那么非流动市场,在执行大订单时必须做出多大的假设呢?

您的STS建立在什么数据频率和细节上?需要每个滴答或买/卖的交易系统与5分钟或每小时的间隔有一组非常不同的数据管理问题。对冲基金和HFT商店在构建强大,可扩展的回测框架方面投入了大量资金,以处理数据量和频率。一些平台以一分钟的分辨率为标准普尔股票等各种资产类别提供丰富而深入的数据。

您的STS需要哪种订单类型?框架应至少支持限制,停止和OCO。

需要的支持和文档级别。早期阶段的框架文档很少,很少有社区委员会以外的支持。

回测框架的组成部分

数据和STS采集:采集组件使用STS脚本/定义文件并提供必要的测试数据。如果框架要求在回测之前重新编码任何STS,那么框架应该支持最流行的技术指标的固定功能以加速STS测试。用户根据框架提供的内容或者他们能够导入的内容来确定要回溯测试的历史时段的长度。

性能测试将STS逻辑应用于请求的历史数据窗口,并计算各种风险和性能指标,包括最大亏损,Sharpe和Sortino比率。大多数框架都支持相当数量的可视化功能,包括权益曲线和deciled-statistics。

优化往往需要STS流程中大部分计算资源。如果您的STS需要优化,那么请关注支持可扩展分布式/并行处理的框架。

在使用技术指标开发的策略的背景下,系统开发人员试图为每个指标找到一组最佳参数。最简单的是,优化可能会发现6天和10天移动平均线交叉STS比历史测试数据累积的利润高于1到20之间任何其他时间段的组合。已经有了这个简单的例子,20 * 20 = 400参数组合必须计算和排名。

投资组合环境中,优化旨在找到投资组合中每种资产的最佳权重,包括短期和杠杆工具。定期对投资组合进行重新平衡,从而根据需要购买和出售投资组合,以与优化的权重保持一致。

头寸调整是优化的另一种用途,可帮助系统开发人员模拟和分析杠杆和动态头寸规模对STS和投资组合业绩的影响。

用于Python的六个Backtesting框架

开源Python回测平台的标准功能似乎包括:

  • 事件驱动
  • 非常灵活,不受限制的许可
  • 收集预先定义的技术指标
  • 标准性能指标计算/可视化/报告功能

PyAlgoTrade

PyAlgoTrade是一个变异的,完整记录的回溯测试框架以及纸质和实时交易功能。数据支持包括Yahoo! 财务,谷歌财经,NinjaTrader和任何类型的基于CSV的时间序列,如Quandl。支持的订单类型包括Market,Limit,Stop和StopLimit。

PyAlgoTrade支持通过Bitstamp进行比特币交易,以及实时Twitter事件处理。

bt – Python的回测

bt“旨在促进创建易于测试,可重复使用和灵活的战略逻辑块,以促进复杂交易策略的快速发展”。

该框架特别适用于测试基于投资组合的STS,其中包括用于资产加权和投资组合再平衡的算法。修改策略以在不同的时间频率或备用资产权重上运行涉及最小的代码调整。bt是在ffn上构建的 – 一个Python的财务函数库。

Backtrader

这个平台记录得非常好,附带一个博客和一个活跃的在线社区,用于发布问题和功能请求。Backtrader支持多种数据格式,包括CSV文件,Pandas DataFrames,blaze迭代器和来自三个代理的实时数据源。可以同时访问这些数据馈送,甚至可以表示不同的时间范围。支持的经纪商包括Oanda,用于外汇交易和通过Interactive Brokers和Visual Chart进行的多资产类交易。

pysystemtrade

pysystemtrade开发人员Rob Carver有一篇很棒的文章讨论了为什么他着手创建另一个Python回测框架以及支持和反对框架开发的论据。在Rob的书“系统交易”中讨论了pysystemtrade的回测框架。

pysystemtrade列出了许多路线图功能,包括功能齐全的后端测试仪,包括优化和校准技术,以及与Interactive Brokers的全自动期货交易。欢迎开源贡献者。

Zipline

Zipline是一种具有纸张和实时交易功能的算法交易模拟器。通过基于浏览器的IPython Notebook界面可访问,Zipline提供了一种易于使用的命令行工具替代方案。由Quantopian支持和开发,Zipline可用作独立的回测框架,也可作为完整的Quantopian / Zipline STS开发,测试和部署环境的一部分。Zipline提供10年的分钟分辨率历史美国股票数据和一些数据导入选项。

QSTrader

QSTrader是一个具有实时交易功能的回测框架。QuantStart创始人Michael Halls-Moore推出了QSTrader,旨在建立一个强大且可扩展的平台,足以满足机构定量对冲基金以及零售量化交易者的需求。QSTrader目前支持各种时间尺度的OHLCV“条形”分辨率数据,但允许使用刻度数据。

回溯测试和实时交易都是完全由事件驱动的,简化了策略从研究到测试以及最终实时交易的过渡。核心战略/组合代码在两个部署中通常是相同的。

QSTrader的主要优点在于其模块化,允许为具有特定风险或项目组合管理要求的人员进行广泛的代码定制。

拥抱Backtest

专注于开发(希望有利可图的)STS的奖励是人性,然后急于部署资助账户(因为我们有希望),而没有花费足够的时间和资源彻底回测策略。但回溯测试不仅是阻止我们部署有缺陷战略和失去交易资金的守门人,它还提供了许多可以为STS开发过程提供信息的诊断。例如,在两个不同的时间范围内测试相同的STS,了解策略在资产相关性背景下的最大亏损,并通过跨多个地理区域的资产分配回溯测试来创建更智能的投资组合。