8 年
持续开发
VectorBT 自 2017 年起持续迭代
9.1k
VectorBT 开源仓库累计获得的星标
370k+
VectorBT 开源版在 PyPI 上的下载量
65k+
社区消息
汇集于 15 个主题频道
为编程智能体提供坚实基础。
一个用一下午写出的回测程序,即使运行不报错,结果也可能有误。借助 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.您的量化研究工具箱。
在一套连贯的工作流中,获取并对齐数据、构建指标和信号、模拟投资组合、跨时间和参数进行验证,并分析结果。
为定制而设计。
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用数字了解 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_ratioNumba 后端
使用 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();各个层级,皆有速度。
数值越高,性能越好。高层涵盖完整的投资组合工作流,中层使用准备好的输入运行模拟,底层则直接处理每笔订单。
基准测试交互面板(英文)
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
| Simulator | Version | Mode | Status | Columns | Warm throughput (M bars/s) | First-call throughput (M bars/s) | Warm runtime (s) | First-call runtime (s) | Compilation (s) |
|---|---|---|---|---|---|---|---|---|---|
| PRO low-level Rust | 2026.6.27 | Parallel | Completed | 8 | 4665.743238317416 | — | 0.001714625 | — | — |
| PRO low-level Numba | 2026.6.27 | Parallel | Completed | 8 | 4163.3230220430005 | 2.116083257823813 | 0.00192154198884964 | 3.7805695831775665 | 3.778648041188717 |
| PRO low-level Rust | 2026.6.27 | Serial | Completed | 1 | 1424.9236240937485 | — | 0.000701792 | — | — |
| PRO low-level Numba | 2026.6.27 | Serial | Completed | 1 | 1226.9939863981183 | 0.351051430522905 | 0.0008149999193847179 | 2.84858545800671 | 2.847770458087325 |
| PRO mid-level Rust | 2026.6.27 | Parallel | Completed | 8 | 579.383003451964 | — | 0.013807792 | — | — |
| PRO high-level Rust | 2026.6.27 | Parallel | Completed | 8 | 319.6106135270101 | — | 0.025030457880347967 | — | — |
| Manifold-BT | 0.19.0 | Parallel | Completed | 8 | 190.96269066431148 | — | 0.041893 | — | — |
| PRO mid-level Rust | 2026.6.27 | Serial | Completed | 1 | 112.24867661616487 | — | 0.008908791 | — | — |
| Manifold-BT | 0.19.0 | Serial | Completed | 1 | 109.29210028648235 | — | 0.0091497921384871 | — | — |
| PRO mid-level Numba | 2026.6.27 | Parallel | Completed | 8 | 103.39379403094054 | 0.5160845768526553 | 0.07737408298999071 | 15.50133516639471 | 15.42396108340472 |
| PRO high-level Numba | 2026.6.27 | Parallel | Completed | 8 | 95.37486498427566 | 0.5073225550479601 | 0.08387954207137227 | 15.769060374703258 | 15.685180832631886 |
| PRO high-level Rust | 2026.6.27 | Serial | Completed | 1 | 82.13186841345684 | — | 0.012175541836768389 | — | — |
| PRO mid-level Numba | 2026.6.27 | Serial | Completed | 1 | 71.25001979919584 | 0.08527053056556519 | 0.014035083819180727 | 11.72738099982962 | 11.71334591601044 |
| PRO high-level Numba | 2026.6.27 | Serial | Completed | 1 | 54.48255143363268 | 0.08348744942597715 | 0.01835450017824769 | 11.97784824995324 | 11.959493749774992 |
| OSS Numba | 1.1.0 | Serial | Completed | 1 | 21.436705511337596 | 0.33670846162238993 | 0.046648959163576365 | 2.969928332604468 | 2.9232793734408915 |
| RaptorBT | 0.9.0 | Serial | Completed | 1 | 20.865011249168635 | — | 0.04792712489143014 | — | — |
| Nautilus Python v2 | 2.0.0rc3 | Serial | Completed | 1 | 0.7077891993928654 | — | 1.412850041873753 | — | — |
| Nautilus Rust v2 | 0.62.0 | Serial | Completed | 1 | 0.5931788730150103 | — | 1.6858321250000001 | — | — |
| Backtrader | 1.9.78.123 | Parallel | Completed | 8 | 0.12284478022451349 | — | 65.12283212505281 | — | — |
| PyBroker Numba | 2.0.0 | Serial | Completed | 1 | 0.08123612131557577 | 0.07393742333951846 | 12.309795000124723 | 13.524950624909252 | 1.2151556247845292 |
| Backtrader | 1.9.78.123 | Serial | Completed | 1 | 0.020621870727887733 | — | 48.49220583308488 | — | — |
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 💯
slick4989That 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_3074Only 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_17vectorbtPRO is part of my every day now, definitely worth to get sponsorship!
christoph6283Learning so much from this amazing library 🙂 And the documentation is brilliant, honestly feels like a whole product on its own! Thanks so much!
cybersqwatchAlways 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 社区。