暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

策略回测工具大比拼:哪个又快又好用?

7146
之前的推送中,我们介绍过 DolphinDB 开发的回测框架。该回测框架内嵌多种资产的回测引擎,对不同的资产框架设置有独立的风险控制系统、模拟撮合引擎,以达到接近实盘交易的回测效果。
VNPY、功夫量化、Backtrader、MetaTrader4……与市面上这么多流行的回测产品相比,DolphinDB 回测引擎的实际性能与功能如何呢?
近期我们进行了实验,采用相同数据和策略,仅在不同平台上使用不同的本地语言实现策略,逐一记录运行时间,以评估不同回测产品的性能。
先上结论: DolphinDB 回测框架已经实现了多资产覆盖、模拟回测仿真和风险控制系统。与 Backtrader、VNPY、功夫量化相比, DolphinDB 在回测速度上实现了数量级的飞跃,在功能上更加完善。对比 MT4,DolphinDB 使用 JIT 后,让脚本语言编写的策略逼近编译型语言的性能;在业务功能方面,DolphinDB 对并行回测和高频交易的支持更佳
想进一步深入了解 DolphinDB 回测工具?欢迎扫码报名明晚19:30的线上直播,获取更多信息!
本文所用的 DolphinDB 测试环境配置如下,所有测试均基于单线程计算。

01

DolphinDB vs Backtrader

功能对比


Backtrader 是一个广泛使用的 Python 开源量化交易框架,主要用于算法交易和量化策略回测。该回测框架是事件型交易架构,适用于中低频策略的回测,不支持 tick 级别的回测。Backtrader 的主要特点包括支持期货等衍生品的保证金制度,内置约 122 种指标(如简单移动平均线 SMA、指数移动平均线 EMA、MACD、Stochastic、RSI 等),并集成了 ta-lib 库。在指标计算上,Backtrader 在数据预加载时预先完成回测周期内所有策略指标的向量化计算,从而实现批量计算。原生版本不支持 A 股市场的动态分红除权处理。

DolphinDB 策略回测引擎不仅支持中低频策略回测,还支持逐笔高精度回测,也支持保证金制度,支持A股市场的分红除权以及两融融券等功能的策略回测。此外,DolphinDB 支持多种指标计算,包括 ta、mytt、alpha101 和国泰君安191 指标库,及其他复杂的 m 系列、tm 系列和 cum 系列等自定义指标,使其在回测功能上更为全面。

性能对比


我们基于 MACD 和 RSI 双重指标作为开仓信号的股票 CTA 策略实现,进行性能比对。

策略介绍

核心逻辑为:利用分钟频数据,计算两个指标变化(MACD、RSI),并设置指标的阈值,一旦越过阈值,触发买入和卖出操作。下面为具体的策略逻辑 。

  • 买入开仓:当 MACD 由负转正时(前一 MACD 为负号,当前 MACD 为正),给出第一个买入信号;如果 RSI 涨破 30 脱离超卖区域,认为市场上涨,给出第二个买入信号。当同时接收到两个买入信号时,以当前收盘价提交委托订单买入。

  • 卖出开仓:当 MACD 由正转负时(前一 MACD 为正号,当前 MACD 为负),给出第一个卖出信号;如果 RSI 跌破 70 脱离超买区域,认为市场开始下跌,给出第二个卖出信号。当同时接收到两个卖出信号时,获取持仓数量,确保有足够持仓可供卖出,然后提交订单,以当前收盘价提交委托订单卖出。

性能对比测试

我们以 2021.01.04 至 2021.12.31 一年内的 3 支股票的 175689 条数据为回测样本进行测试,得到如下结果:

具体测试脚本请见阅读原文

可以看出,DolphinDB 在回测中具有显著的速度优势,有四个主要原因:

  • Backtrader 在大多数情况下是完全基于 Python 的,相比之下, DolphinDB 的回测框架完全基于 C++ 开发。

  • DolphinDB 在数据库内实现,有效地降低了数据持续传入所产生的时间成本。

  • DolphinDB 回测插件引入了响应式状态引擎等增量的指标计算引擎。

  • DolphinDB 引入了 JIT,降低了解释代码的时间开销。

02

DolphinDB vs MetaTrader4

功能对比


MetaTrader4 是一款外汇交易平台,提供实时货币对报价、图表分析、自动化交易支持及策略回测。MetaTrader4 使用 MQL4 作为回测编程语言,该语言基于类 C 语言,相比 Python 等解释型语言执行速度更快。MetaTrader4 支持 tick 级别的策略回测,但订单不支持高精度的模拟撮合。其指标计算基于 1 分钟、5 分钟、15 分钟、30 分钟、1 小时、4 小时和日等七种固定周期,内置了 20 种常见指标(如移动平均线 MA、相对强弱指数 RSI、布林带和 MACD 等),并支持自定义指标的实现。然而,MQL4 开发自定义指标对策略研究员的编码能力要求较高。

DolphinDB 策略回测引擎不仅支持逐笔高精度回测,还支持高精度的订单撮合,订单成交结果充分考虑市场流动性等因素。DolphinDB 支持全面的指标计算,内置大量 m 系列、tm 系列和 cum 系列函数,使复杂指标的实现更为便捷。

性能对比



我们基于 tick行情,以布林带突破和 RSI 作为开仓信号的外汇 CTA 趋势策略实现进行性能比对。

策略介绍

本策略为外汇交易的布林带突破与 RSI 交易信号策略。该策略以每小时进行指标计算,实时进行风险监控进行止盈止损,下面为具体的策略逻辑:

  • 做多开仓:当前 RSI 大于 70 且布林带正在上移并打破上轨

  • 做空开仓:当前 RSI 小于 30 且布林带正在下移并打破下轨

如果存在多头或空头委托订单,需根据 Tick 行情判断是否撤单、止盈止损。

性能对比测试

以外汇 EUR 对 USD 2029.01.02-2023.12.31 共两年的 1.43 亿行数据和1872 笔委托成交订单为数据集,以下是 MetaTrader 4 和 DolphinDB Backtest 的回测耗时:

具体测试脚本请见阅读原文

从运行结果中可以看出,MT4 基于外汇的分钟频回测比 DolphinDB 更快,这是因为 MT4 采用类 C 的编译型语言,并且在模拟成交时启用了更为简单的见价成交模式。DolphinDB 在启用 JIT 后,尽管使用了更为耗时的高精度模拟撮合引擎,性能已经逼近 MT4。

03

DolphinDB vs VNPY

功能对比


VNPY 是一个量化交易框架,提供了 CTA 策略的回测功能。该回测功能仅支持单标的的 CTA 策略回测,不支持期货等衍生品的实时保证金制度。VNPY 内置共约 40 个指标,包括简单移动平均线 SMA 和指数移动平均线 EMA 等,以及 MACD、 Stochastic 和 RSI 等指标。指标计算支持 1 分钟、1 小时和日周级别的策略实现,但仅限于简单的单标的 CTA 策略回测。

DolphinDB 策略回测引擎是一个支持多标的策略回测的通用策略回测框架,支持中低频策略回测,支持逐笔高精度的策略回测。它支持保证金制度,并支持 A 股市场的分红除权以及两融融券等功能的策略回测。DolphinDB 支持更多指标的计算,包括 ta、mytt、alpha101 和国泰君安191,以及其它自定义的复杂指标,涵盖 DolphinDB 中实现的 m 系列、tm 系列和 cum 系列函数。

性能对比


我们沿用分钟频的期货 CTA 策略作为性能测试的案例,以查看二者在指标计算上的性能差异。

策略介绍

基于 ATR (平均真实范围)和 RSI(相对强弱指数)结合的技术分析指标实现期货 CTA 策略。具体的策略逻辑如下:

  • 买入开仓:RSI 值大于 70 且 ATR 大于其 10 分钟均值

  • 卖出开仓:RSI 值小于 30 且 ATR 大于其 10 分钟均值

止损逻辑:

  • 卖平:持有多仓时,K 线达到最高点后,回落 0.004 时

  • 买平:持有空仓时,K 线达到最低点后,反弹 0.004 时


性能对比测试

下面以 1 个月 'AG2306' 期货主力连续合约分钟行情共 2 万条数据量为回测样本,进行 DolphinDB 回测框架与 VNPY 的性能对比:

具体测试脚本请见阅读原文

对于小样本量, DolphinDB 仍然有显著的性能优势,这是因为 Backtest 能够调用数据库的一系列功能,在数据库环境下完成回测,从而降低回测系统的复杂度。这里仅回测了一支标的,是因为 VNPY仅支持单支标的回测,需要保持实验条件一致。

04

DolphinDB vs 功夫量化

功能对比


功夫量化是一款内核基于 C++ 开发的量化交易平台,支持实时交易、模拟交易及实盘交易,能够提供基于Python 编写的股票、期货、外汇等多种类策略回测。该平台支持国内 A 股市场的 level-2 逐笔成交行情的高精度订单模拟撮合,支持逐笔策略回测。功夫量化允许使用原生 Python 定义高频因子的指标计算。

DolphinDB 策略回测引擎支持沪深 Level-2 行情的逐笔高精度策略回测,支持股票、期货、外汇和银行间债券等多种金融市场的策略回测。回测引擎完全使用 C++ 开发,同时编写回测的脚本语言支持使用 JIT 技术来提升策略执行效率。

性能对比


通过分析当前的买卖单数量形成下单信号是订单簿不平衡策略的核心逻辑,这对于量化平台的订单实时更新提出了较高的要求。因此,我们选择股票订单簿不平衡策略作为性能测试脚本,以测试 DolphinDB 和功夫量化的订单更新和 tick 级数据处理能力。

策略介绍

本策略是基于市场深度和成交量变化作为开仓信号的股票交易策略。利用实时行情数据,分析买卖双方的成交量的比值关系,并设置对应的阈值,一旦突破该阈值,触发买入和卖出操作。在行情快照数据中,同时计算买方和卖方的成交量,以及相应的持仓情况。下面为具体的策略逻辑:

  • 买入开仓:当买方的成交量高于卖方成交量的两倍且卖方成交量大于零时,给出买入信号;获取当前持仓数量,如果持仓数量不超出最大值,并以当前的最佳卖价提交买单。

  • 卖出开仓:当卖方的成交量高于买方成交量的两倍且买方成交量大于零时,给出卖出信号;获取当前持仓数量,确保有足够的仓位可供卖出,然后以当前最佳买价提交卖出委托订单。

性能对比测试

使用八支股票一个月的快照共 85 万条行情作为测试数据,通过功夫 Windows 客户端软件云提交到服务器测试功夫量化的运行效率(纯 Python 接口),并对比 DolphinDB 的性能,得到以下结果:

具体测试脚本请见阅读原文

由于 DolphinDB 数据库带来的数据传输速度提升以及 C++ 框架的加持, DolphinDB 的回测速度相比功夫量化的 Python 接口版本明显更快。

05

总结


一图总结 👇👇

  • 相比 DolphinDB 回测平台,Backtrader 对于超高频交易的支持较弱;对于订单延迟、复杂的模拟撮合等功能,用户需要在策略中手动实现。此外,Backtrader 缺乏内置的风险管理功能(如实时保证金计算)。相比之下, DolphinDB 支持更全面,可以通过各种接口获得相应的参数和功能。

  • 对比 MT4,DolphinDB 功能性更全,对并行化回测支持良好。在资产规模较大、资产品种更灵活、以及回测表现对市场流动性更敏感的中高频回测场景中,DolphinDB 有明显的易用性优势

  • DolphinDB 的风控系统相比 VNPY 有显著的优势:对于期货交易,内嵌的风险控制系统非常重要,如果需要用户从零开发,将付出大量的时间成本,而在使用 DolphinDB 回测平台时,仅需输入一些形式参数即可;VNPY 仅支持单支标的的回测,DolphinDB 支持多标的同时回测。另外,DolphinDB 支持逐笔高频回测,而 VNPY 对高频回测的支持有限。

  • DolphinDB 相比于功夫量化支持沪深 A 股更高精度的逐笔回测, 在使用脚本编写策略时,支持使用 JIT 技术来提升策略执行效率


想了解更多关于 DolphinDB 回测框架的信息?锁定明晚七点半直播间!直播包含对模拟撮合和回测框架的详细介绍、与市面产品的性能测试对比以及期货分钟频 CTA、股票高频、科创板做市实战案例分享等干货硬核内容。

直播更包含因子开发管理平台的详细介绍,以及因子构建-计算-评价策略构建-绩效归因因子库运维管理等多个可视化 Demo。

👇扫描海报二维码报名👇

文章转载自DolphinDB智臾科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论