会员专属内容、代码示例和部分交互演示保留英文。查看常见问题

量化研究引擎,助您构建交易优势。

分析市场数据,大规模回测和优化交易策略,并跨交易品种、参数和时间验证结果。

由 VectorBT 创始人 Oleg Polakow 开发。

为编程智能体提供坚实基础。

一个用一下午写出的回测程序,即使运行不报错,结果也可能有误。借助 VBT,编程智能体可以像使用 pandas 一样,基于经过多年社区实践打磨的组件开展工作。

英文演示

~/research $ vbt agents install

  VectorBT PRO v2026.10.5  ·  Rust v2026.10.5  ·  Python 3.12.11

✓ Installed VBT 2026.10.5 skills into /Users/quant/research

.agents/skills, .claude/skills: vbt-analysis, vbt-backtesting, vbt-basics, vbt-callbacks, vbt-cross-validation,
vbt-custom-simulators, vbt-data, vbt-indicators, vbt-numba, vbt-optimization, vbt-plotting, vbt-portfolio-optimization,
vbt-rust-backend, vbt-rust-native, vbt-signals

~/research $ claude

> Is an SMA crossover on BTC worth trading? Validate it walk-forward with train-only parameter selection.

Skill(vbt-cross-validation)
  Train-only selection with @vbt.cv_split

vbt.get_concept("walk-forward analysis")
  10 sources ranked

vbt.get_source("vbt.cv_split")
  Signature and selection rules confirmed

Write(sma_walk_forward.py)
  @vbt.cv_split(
      splitter="from_rolling",
      splitter_kwargs=dict(length=360, split=270, offset=-90, offset_anchor_set=None,
                           backwards="sorted", set_labels=["train", "test"]),
      index_from="data", merge_func="concat", return_grid="all",
  )
  def sma_sharpe(data, range_, fast, slow):
      start = max(range_.start - slow - 1, 0)
      close = data.close.iloc[start:range_.stop]
      fast_ma = close.vbt.rolling_mean(fast)
      slow_ma = close.vbt.rolling_mean(slow)
      warmup = range_.start - start
      pf = vbt.PF.from_signals(
          data.iloc[range_],
          entries=fast_ma.vbt.crossed_above(slow_ma).vbt.signals.fshift().iloc[warmup:],
          exits=fast_ma.vbt.crossed_below(slow_ma).vbt.signals.fshift().iloc[warmup:],
          fees=0.001,
      )
      return pf.sharpe_ratio

  data = vbt.YFData.pull("BTC-USD", start="2020-01-01", end="2026-10-01")
  windows = np.arange(5, 105, 5)
  grid, best = sma_sharpe(
      data, vbt.Rep("range_"),
      vbt.Param(windows, condition="fast < slow"),
      vbt.Param(windows),
  )

vbt.run_code(sma_walk_forward.py)
  9,120 backtests across 24 rolling splits

                        train   test
  Mean Sharpe            1.85  -0.25
  Selection percentile      -   0.51
  Buy-and-hold Sharpe       -   0.91

Not worth trading. Sharpe falls from 1.85 in-sample to -0.25 out of sample, and the selected windows rank at the 51st
percentile of the grid on unseen data, no better than picking at random.

您的量化研究工具箱。

在一套连贯的工作流中,获取并对齐数据、构建指标和信号、模拟投资组合、跨时间和参数进行验证,并分析结果。

  1. 数据

    连接、存储、更新、转换并组合本地与远程市场数据

  2. 指标与信号

    计算或自建指标、流式更新,并将指标转化为交易信号

  3. 回测

    对订单、信号、杠杆、止损、限价、现金流及模拟回调进行建模

  4. 分析

    衡量收益和风险、剖析交易、绘制结果图表,并研究市场事件

  5. 优化与验证

    搜索参数、进行样本外验证、测试稳健性,并配置多种资产

贯穿各个阶段的能力:

为定制而设计。

VBT 的可组合架构让您自由搭建和定制研究流程。您可以使用现成组件,以自己的代码替换任一环节,也可以直接使用底层函数和计算内核。

VBT 并不是

  • 无代码策略搭建工具
  • 托管交易机器人
  • 策略交易市场
  • 主导您工作流程的框架

使用 VBT,您可以

  • 自由接入自己的数据、模型和交易执行系统
  • 使用便捷的高层组件,或直接使用底层函数和计算内核,以获得更多控制和更高性能
  • 同时研究多个交易品种、参数组合和情景
  • 检查、组合和复用中间结果
  • 通过参数化、分块以及并行或分布式执行,扩展函数的处理规模
  • 使用 Python、从 Python 调用 Rust,或直接使用原生 Rust 开发
  • 将编程智能体融入工作流

让研究结果经受检验。

VBT 将参数探索与验证整合在同一工作流中,让表现出色的结果接受不同配置、时期和市场条件的检验。

跨时间验证

使用滚动窗口、扩展窗口、前向滚动、清除重叠样本和组合切分等方法,评估策略在单一历史区间之外的表现。

检查参数曲面

比较相邻参数区域和完整的结果曲面,避免仅以一组最优参数概括整个搜索结果。

比较每次切分

对样本内和样本外结果使用相同的分析方法,了解策略表现在哪些情形下能够延续,在哪些情形下失效。

同一条流程对 6,475 组参数进行 24 次滚动训练/测试切分评估,在 Apple M3 上不到一分钟即可生成全部 310,800 个结果。热图中的每个单元格反映对应参数组合的样本内夏普比率在多大程度上能够延续到下一个样本外区间。

@vbt.cv_split(  
    splitter="from_n_rolling",  
    splitter_kwargs=dict(
        n=24, length=720,
        split=0.75, set_labels=["train", "test"],
    ),
    parameterized_kwargs=dict(
        mono_chunk_len=128,
        execute_kwargs=dict(chunk_len="auto", engine="threadpool"),
    ),
    return_grid="all",
)
def sma_crossover_sharpe(  
    close: vbt.Takeable,
    fast_window: vbt.Param(
        condition="fast_window < slow_window",
        mono_merge_func="concat",
    ),
    slow_window: vbt.Param(mono_merge_func="concat"),
) -> vbt.MergeFunc("concat"):
    fast_ma = vbt.MA.run(close, fast_window, hide_params=True)
    slow_ma = vbt.MA.run(close, slow_window, hide_params=True)
    entries = fast_ma.ma_crossed_above(slow_ma)
    exits = fast_ma.ma_crossed_below(slow_ma)
    return vbt.PF.from_signals(close, entries, exits).sharpe_ratio
BTC-USD 的 24 次滚动切分中,不同均线交叉参数的训练与测试夏普比率相关性热图 图表数据(JSON)

用数字了解 VBT。

VBT 提供数据适配器、指标、投资组合模拟器和验证方法,并支持多种计算后端与执行引擎,助您开展大规模研究。

数据源与适配器
20+
远程、本地、数据库和合成数据
指标、信号与标签
500+
内置、自动生成及第三方集成
交叉验证工厂方法
10+
包含清除重叠样本和前向滚动等方法
投资组合优化工厂方法
10
从资产配置函数到集成优化器
投资组合模拟工厂方法
8
涵盖 Numba 和 Rust 的不同模拟行为
度量指标
200+
涵盖投资组合、记录及统计分析集成
图表类型
90+
适用于各类 VBT 对象的可复用可视化分析
即时编译后端
3
Numba、NumPy 和 Rust
执行引擎
7
串行、本地并行和分布式执行

贯穿全流程的一致性。

VBT 在整个流程中协调数据对齐、数组预处理、编译执行、持久化存储和分析。

处理多维数据

通过广播、索引、分组和封装,在整个工作流中保留交易品种、时间周期、参数和情景等维度。

扩展同一套工作流

在不改变研究模型的前提下,通过参数化、分块、缓存和受支持的执行引擎分配计算任务。

检查结果,接续运行

保留中间对象供分析使用,从已保存的状态继续模拟,并以增量方式处理长期历史数据。

一套 Python 工作流,两种计算后端。

以下示例运行的是同一套均线交叉流程。Python 提供便捷的高层组合接口,Numba 和 Rust 则提供底层指标、信号、模拟和收益率 API。Rust 也可作为独立的原生 crate 使用。

Python 工作流

通过一套表达力丰富的 API,组合数据、指标、信号、投资组合、优化与分析。Python 负责配置、参数化、元数据和结果管理,再将计算任务交给底层计算后端。

data = vbt.YFData.pull("BTC-USD")
fast_ma = data.run("vbt:ma", window=20, hide_params=True)
slow_ma = data.run("vbt:ma", window=50, hide_params=True)

entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)

pf = vbt.PF.from_signals(data, entries, exits)
sharpe = pf.sharpe_ratio

Numba 后端

使用 Python 编写数值计算内核,并在运行时将受支持的代码编译为原生机器码,获得接近 C 的性能。

可以通过高层工作流使用,也可以在需要更细粒度控制时直接调用内核。

close = vbt.to_2d_array(data.close)
fast_ma = vbt.nb.ma_nb(close, 20)
slow_ma = vbt.nb.ma_nb(close, 50)
entries = vbt.nb.crossed_above_nb(fast_ma, slow_ma)
exits = vbt.nb.crossed_above_nb(slow_ma, fast_ma)

sim_out = vbt.pf_nb.from_signals_nb(
    target_shape=close.shape,
    group_lens=np.full(close.shape[1], 1),
    close=close,
    long_entries=entries,
    long_exits=exits,
    save_returns=True,
)
sharpe = vbt.ret_nb.sharpe_ratio_nb(
    sim_out.in_outputs.returns,
    ann_factor=365,
)

Rust 后端

这是一个独立的原生 crate,也可作为 Python 的可选预编译计算后端。

您可以直接在 Rust 中使用,也可以保持高层工作流不变,让兼容的 Python 操作将计算交由 Rust 执行。

let fast_ma = ma().close(close.view()).window(20).call()?;
let slow_ma = ma().close(close.view()).window(50).call()?;
let entries = crossed_above().arr1(fast_ma.view()).arr2(slow_ma.view()).call()?;
let exits = crossed_above().arr1(slow_ma.view()).arr2(fast_ma.view()).call()?;

let group_lens = Array1::<i64>::ones(close.ncols());
let sim_out = from_signals()
    .target_shape(close.dim())
    .group_lens(group_lens.view())
    .close(close.view())
    .long_entries(entries.view())
    .long_exits(exits.view())
    .save_returns(true)
    .call()?;
let sharpe = sharpe_ratio_1d()
    .returns(sim_out.in_outputs.returns.column(0))
    .ann_factor(365.0)
    .call();

各个层级,皆有速度。

数值越高,性能越好。高层涵盖完整的投资组合工作流,中层使用准备好的输入运行模拟,底层则直接处理每笔订单。

基准测试交互面板(英文)

Benchmark packageDownload ZIP

1,000,000 one-minute bars and 1,388 filled orders per column.

High-level
320M bars/s
25 ms for this workload
Mid-level
579M bars/s
14 ms for this workload, 1.8x high-level
Low-level
4.7B bars/s
1.7 ms for this workload, 14.6x high-level
Sparse simulator benchmarks at 1,000,000 rows per column
SimulatorVersionModeStatusColumnsWarm throughput (M bars/s)First-call throughput (M bars/s)Warm runtime (s)First-call runtime (s)Compilation (s)
PRO low-level Rust2026.6.27ParallelCompleted84665.743238317416—0.001714625——
PRO low-level Numba2026.6.27ParallelCompleted84163.32302204300052.1160832578238130.001921541988849643.78056958317756653.778648041188717
PRO low-level Rust2026.6.27SerialCompleted11424.9236240937485—0.000701792——
PRO low-level Numba2026.6.27SerialCompleted11226.99398639811830.3510514305229050.00081499991938471792.848585458006712.847770458087325
PRO mid-level Rust2026.6.27ParallelCompleted8579.383003451964—0.013807792——
PRO high-level Rust2026.6.27ParallelCompleted8319.6106135270101—0.025030457880347967——
Manifold-BT0.19.0ParallelCompleted8190.96269066431148—0.041893——
PRO mid-level Rust2026.6.27SerialCompleted1112.24867661616487—0.008908791——
Manifold-BT0.19.0SerialCompleted1109.29210028648235—0.0091497921384871——
PRO mid-level Numba2026.6.27ParallelCompleted8103.393794030940540.51608457685265530.0773740829899907115.5013351663947115.42396108340472
PRO high-level Numba2026.6.27ParallelCompleted895.374864984275660.50732255504796010.0838795420713722715.76906037470325815.685180832631886
PRO high-level Rust2026.6.27SerialCompleted182.13186841345684—0.012175541836768389——
PRO mid-level Numba2026.6.27SerialCompleted171.250019799195840.085270530565565190.01403508381918072711.7273809998296211.71334591601044
PRO high-level Numba2026.6.27SerialCompleted154.482551433632680.083487449425977150.0183545001782476911.9778482499532411.959493749774992
OSS Numba1.1.0SerialCompleted121.4367055113375960.336708461622389930.0466489591635763652.9699283326044682.9232793734408915
RaptorBT0.9.0SerialCompleted120.865011249168635—0.04792712489143014——
Nautilus Python v22.0.0rc3SerialCompleted10.7077891993928654—1.412850041873753——
Nautilus Rust v20.62.0SerialCompleted10.5931788730150103—1.6858321250000001——
Backtrader1.9.78.123ParallelCompleted80.12284478022451349—65.12283212505281——
PyBroker Numba2.0.0SerialCompleted10.081236121315575770.0739374233395184612.30979500012472313.5249506249092521.2151556247845292
Backtrader1.9.78.123SerialCompleted10.020621870727887733—48.49220583308488——
Horizontal ranking of sparse simulator benchmarks at 1,000,000 rows per column by warm bar throughput, with first-call throughput shown as a translucent marker

Environment: Apple M3 (8 logical cores), arm64, macOS 26.5.2

完整源代码,尽在掌握。

自 2017 年起,VectorBT 一直由其创始人、资深软件工程师 Oleg Polakow 设计并维护。自 2021 年起,VectorBT PRO 在这一基础上,通过持续开发和社区反馈不断完善。

会员可访问源代码,检查实现细节,逐层追溯计算结果,并根据自己的数据和基础设施调整各个组件。统一的约定让组件的使用方式更易掌握,也便于扩展。

MCP 服务器、命令行工具、面向大语言模型的文档和智能体工具,让开发者与编程智能体都能更方便地查阅、理解这套代码,并将相关工作自动化。

会员怎么说。

来自 Discord 社区的反馈。为保护隐私,措辞、姓名和头像可能经过调整。

以下为会员的英文原文反馈。

I spend around 2 hours with it last night. Just blown away, hands down the best library I've tried so far 💯

slick4989

That works perfectly! VBT keeps impressing me with how much it can do and how deep the functionality goes. Thanks for creating such an amazing tool. 🙏🏾

marko_3074

Only just started using your platform and already a little blown away by the community, how convenient everything is and all the functionality. Such a life and time saver!

cybron_17

vectorbtPRO is part of my every day now, definitely worth to get sponsorship!

christoph6283

Learning so much from this amazing library 🙂 And the documentation is brilliant, honestly feels like a whole product on its own! Thanks so much!

cybersqwatch

Always so helpful and quick to reply, best dev in the world 👍

georgi.gmi

已显示 6 条反馈,共 18 条。

由社区共同支持。

VectorBT PRO 是一个独立众筹项目。会员收入用于支付基础设施、软件订阅、AI token 用量、开发与维护,以及独立软件项目的日常运营开支。

会员方案。

按月、按 12 个月或一次性购买终身访问权限,使用 VectorBT PRO。支持通过 GitHub Sponsors、Patreon 等平台付款。

  • 起价$25/ 月

    按月付费,可随时取消。

  • 起价$300$240

    折合 $25 $20 / 月

    一次付费,享有一年的访问权限。

  • 起价$500一次性付费

    一次付费,享有终身访问权限。

所有方案均包含:

  • 私有源代码仓库
  • 文档与教程
  • 持续更新
  • Discord 社区

常见问题。

按主题浏览:方案与访问权限 · 使用 VectorBT PRO · 安装与兼容性

VectorBT PRO 是什么类型的产品?

VectorBT PRO 是以代码为核心的工具集,用于量化分析、回测和算法交易研究。它提供 Python 包和原生 Rust crate,两者都旨在您自己的环境中运行,并融入现有工作流程。

可以使用自己的数据、经纪商或交易所吗?

可以。您可以使用 Pandas 或数组形式的数据,加载本地文件和数据库,使用内置适配器,或编写自定义数据类。VectorBT PRO 的研究层保持灵活,让您可以连接任何适合自己工作流程的数据源、经纪商或交易所。

可以将 VectorBT PRO 与编程智能体配合使用吗?

可以。MCP 服务器、CLI 命令、适合大语言模型使用的文档和智能体工具,可以帮助兼容的编程智能体理解 API、运行真实的 VBT 代码,并自动化研究流程。这样,您就能少花时间查语法,多花时间研究想法。

支持哪些操作系统和硬件?

VectorBT PRO 可在 Linux、macOS 和 Windows 上运行。我们建议 Windows 用户使用 WSL,以获得更顺畅的开发体验。CPU 和内存需求取决于数据量和参数空间的大小。随着工作负载增长,您可以使用分块、缓存、并行执行和分布式执行来应对。

可以在没有网络连接的情况下使用 VectorBT PRO 吗?

可以。安装完成后,核心计算、本地数据工作流程和离线知识工具均可在无网络连接时使用。当然,安装更新、获取远程数据、调用云服务,以及访问网站或 Discord 仍然需要网络连接。

查看全部问题

获取 VectorBT PRO 的完整访问权限。

会员权益包括完整源代码、私有文档与 API 参考、教程、实用示例、版本说明、持续更新,以及私有 Discord 社区。