性能

DoriBT 将快速回测与完整交易账本放在同一次运行中。2520 日 × 100 标的组合,Numba 热运行中位数为 0.147 秒,比 Python 后端快约 6.6 倍。 100 组独立组合的完整扫描中位数为 19.13 秒。

与同类框架的速度对比

以下是同一组合输入的热运行中位数:2520 个交易日、100 个标的、固定股数目标,收盘决策、下一开盘成交。计时包含引擎调用,以及现金、持仓、权益和逐笔成交的输出提取。

实现

热运行耗时

DoriBT Python

0.970 秒

DoriBT Numba

0.147 秒

vectorbt Numba

0.096 秒

vectorbt Rust

0.075 秒

Backtrader

18.965 秒

Zipline-reloaded

7.151 秒

为什么选择 DoriBT? 在这个日线组合场景中,0.147 秒已接近 vectorbt Numba 的 0.096 秒。DoriBT 同时提供开箱即用的 A 股/ETF 历史规则和完整交易账本:接入自有行情,选择规则分类,用普通 Python 函数或目标数组写策略,就能反复研究并追查每次成交。基础包只依赖 NumPy,适合直接放进现有研究脚本。

了解 DoriBT 的研究能力 · 运行 ETF 轮动实战

日线与分钟的复杂成交

当研究涉及部分成交、T+1、持续目标与权重重算时,DoriBT 同样提供快速回放。以下对照使用日线 252 日 × 100 标的,或分钟 25 日 × 每日 48 根 bar × 100 标的;各场景使用对应的目标与订单适配器。

场景

DoriBT Numba

DoriBT Numba+原生扩展

vectorbt

日线稀疏预计算目标

0.01358 秒

0.01383 秒

0.02694 秒

分钟稀疏预计算目标

0.02966 秒

0.02205 秒

0.03916 秒

分钟部分成交

0.04183 秒

0.03106 秒

0.08849 秒

分钟 T+1、涨跌停与状态

0.38271 秒

0.12345 秒

0.08228 秒

分钟执行时点权重,持续再平衡

0.98922 秒

0.32612 秒

0.18955 秒

全部 17 个对照场景中,DoriBT Numba 在 10 个场景里用时更短。可选原生扩展又把分钟持续权重再平衡从 0.989 秒降到 0.326 秒,把 T+1、涨跌停和状态约束场景从 0.383 秒降到 0.123 秒。完整订单、意图、成交和税务记录随结果一并返回。

查看全部 17 个场景

场景

DoriBT Numba(秒)

加原生扩展(秒)

vectorbt(秒)

日线稀疏预计算目标

0.01358

0.01383

0.02694

日线密集预计算目标

0.09293

0.09706

0.05285

分钟稀疏预计算目标

0.02966

0.02205

0.03916

分钟密集预计算目标

0.77014

0.31510

0.17574

日线稀疏目标回调

0.04242

0.04126

0.23280

日线密集目标回调

0.28933

0.30782

1.01183

分钟稀疏目标回调

0.10332

0.10063

0.73097

分钟密集目标回调

1.64940

1.63963

4.54700

日线共享资金

0.04442

0.04448

0.02973

日线费用舍入

0.09360

0.09123

0.06135

分钟部分成交

0.04183

0.03106

0.08849

分钟 T+1、涨跌停与状态

0.38271

0.12345

0.08228

分钟有状态订单

0.38697

0.37244

1.96526

日线收盘权重,仅首次定量

0.01392

0.01103

0.02545

日线收盘权重,持续再平衡

0.13552

0.06959

0.05829

分钟执行时点权重,仅首次定量

0.03142

0.02342

0.03820

分钟执行时点权重,持续再平衡

0.98922

0.32612

0.18955

多组参数与组合研究

100 组 SMA 参数,每组独立运行 100 个标的、2520 日,合计 2520 万个标的-bar、1393518 笔成交:

实现

完整扫描中位数

DoriBT Numba

19.131 秒

DoriBT Numba+原生扩展

20.036 秒

vectorbt Numba

7.677 秒

vectorbt Rust

6.744 秒

DoriBT 使用 100 次公共 API 调用,vectorbt 每批处理 10 个独立账户。DoriBT 的每次运行都保留独立账户和完整记录,便于比较参数、追查某组异常成交,以及导出单独的研究报告。

10 组单标的 × 2520 日的小批量测量中,DoriBT Numba 为 0.063 秒,vectorbt Rust 为 0.017 秒。更多工作流、首次运行及逐轮数据见页末复现资料。

0.6.2:长历史面板回放更快

1633 日 × 219 证券的真实历史面板包含上市前、停牌和退市后区间。0.6.2 将这些合法区间的权重目标一起放入完整编译循环,并按规则有效日期批量准备数据。

下表为三组完整研究回放的暖态中位数,每组重复 10 次;计时包含目标转换、数值准备、Backtest.run、完整记录及研究侧输出,市场数据构造另计。

初始资金/参与率/滑点

0.6.1 Numba

0.6.2 Python

0.6.2 Numba

30 万元/10%/5bp

2.561 秒

1.646 秒

1.270 秒

3000 万元/5%/5bp

1.872 秒

1.877 秒

1.451 秒

30 万元/10%/5.01bp

1.846 秒

1.638 秒

1.304 秒

新版 Numba 回放速度为旧版的 1.29—2.02 倍。三组各 10 次回放累计由 63.82 秒降到 40.57 秒,节省约 36% 的回放时间。每日账户和完整交易账本逐项相同。

首次运行与重复运行

Numba 首次运行会编译内核,之后可复用缓存。在上述面板的首组测量中,0.6.2 的空缓存首次回放为 18.24 秒,已有磁盘缓存的新进程为 3.80 秒,同进程暖态中位数为 1.27 秒。市场数据构造约 8—9 秒。

重复研究时,复用 MarketData 和 Backtest,把已经算好的信号交给预计算目标;使用 execution_plan 查看实际编译路径。预计算目标提供具体用法。

Python 版本怎么选

新环境推荐 Python 3.15。在相同人工面板、NumPy 2.5.4、Numba 0.68.0 下,三个解释器的完整结果一致,3.15 的本机测量用时最短:

CPython

Python 后端中位数

Numba 中位数

3.13.16

1.431 秒

0.568 秒

3.14.8

1.129 秒

0.507 秒

3.15.0

0.998 秒

0.460 秒

Python 3.13 和 3.14 也受支持,旧环境可直接升级 DoriBT。安装页列出依赖组合。

测量与复现

跨框架测量采用 DoriBT 0.6.0,在 Linux/AMD EPYC 9V74 上以单线程运行;0.6.2 长面板及 Python 版本测量在 Windows 11/Ryzen 7 9800X3D 上运行。日线基准采用无费用、无交易限制的固定股数目标,复杂成交矩阵采用对应的费用和交易假设。完整输入、精确包版本、每轮结果及输出核对均已归档。