polakowo/vectorbt
polakowo/vectorbt has 9,721 GitHub stars and 1,264 forks. GitHot measured +21 stars in 24 hours. Last checked 2026-11-07 05:59 UTC. Last push 2026-11-03.
The research engine that gives you an unfair advantage. Run thousands of trading ideas before others finish one.
可以做什么
- Fast, vectorized backtesting Research strategies at scale with pandas, NumPy, and Numba. Backtesting examples → - Optional Rust engine Use precompiled kernels for supported operations without JIT compilation. Rust engine →
实测星标增长
- 24小时
- +21
- 7天
- 更新延迟
- 15天
- 更新延迟
- 1个月
- 更新延迟
各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。
README.zh-CN.md
原文简体中文 / English | 功能 · 安装 · 示例 · 链接
让交易研究规模化。
VectorBT 是面向交易研究的 Python 工具库。探索市场数据,构建指标和信号,跨资产、跨时间周期比较数千种交易思路。借助 NumPy 数组、Numba 加速和可选的 Rust 引擎,只需几行 Python 代码即可开展大规模实验。
在同一工作流中,从探索价格形态到评估交易策略。查看交易、费用、回撤和投资组合表现,并通过交互式图表分析结果。VectorBT 面向交易者、研究人员和 AI 智能体,通过可组合的 Python API 将数据分析、策略模拟和可视化整合在一起。
VectorBT 是 VectorBT PRO 的开源社区版。 PRO 在此基础上提供并行计算、更多数据集成、投资组合优化、形态识别、事件预测、限价单、杠杆等功能, 以及其他 100 多项功能,并且每周持续新增功能。
查看 VectorBT 与 PRO 的对比,或浏览 PRO 功能示例。
功能
高速向量化回测基于 pandas、NumPy 和 Numba,开展大规模策略研究。 |
可选的 Rust 引擎为支持的运算提供预编译内核,无需承担 JIT 编译开销。 |
原生集成 pandas 的 API通过自定义访问器,直接对 pandas 对象执行高性能运算。 |
灵活的广播机制利用灵活的数组广播,开展多资产分析和大规模参数扫描。 |
丰富的指标生态构建自定义指标,并使用 TA-Lib、Pandas TA 等工具集成。 |
投资组合回测分析交易、回撤和绩效,并集成 QuantStats。 |
信号工具生成、排序和映射交易信号,并分析其分布。 |
内置数据获取功能获取市场数据、执行预处理,并生成合成时间序列。 |
稳健性测试运行滚动优化,并为机器学习工作流生成标签。 |
交互式可视化通过 Plotly 图表、Jupyter 小部件和浏览器仪表板探索结果。 |
自动化工具定时更新数据,并发送 Telegram 通知。 |
可组合的 Python API组合功能模块,支持快速实验和由 AI 智能体驱动的工作流。 |
安装
pip install -U vectorbt
安装可选的 Rust 引擎:
pip install -U "vectorbt[rust]"
安装所有可选集成(TA-Lib、Pandas TA 等):
pip install -U "vectorbt[full]"
同时安装所有可选集成和 Rust 引擎:
pip install -U "vectorbt[full,rust]"
示例
从 2014 年起向比特币投资 100 美元
import vectorbt as vbt
data = vbt.YFData.download("BTC-USD")
price = data.get("Close")
pf = vbt.Portfolio.from_holding(price, init_cash=100)
print(pf.total_profit())
输出:
19501.10906763755
交易双简单移动平均线(SMA)交叉策略
fast_ma = vbt.MA.run(price, 10)
slow_ma = vbt.MA.run(price, 50)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf = vbt.Portfolio.from_signals(price, entries, exits, init_cash=100)
print(pf.total_profit())
输出:
34417.80960086067
[!TIP] VectorBT PRO
生成 1,000 个随机策略
import numpy as np
symbols = ["BTC-USD", "ETH-USD"]
data = vbt.YFData.download(symbols, missing_index="drop")
price = data.get("Close")
n = np.random.randint(10, 101, size=1000).tolist()
pf = vbt.Portfolio.from_random_signals(price, n=n, init_cash=100, seed=42)
mean_expectancy = pf.trades.expectancy().groupby(["randnx_n", "symbol"]).mean()
fig = mean_expectancy.unstack().vbt.scatterplot(xaxis_title="randnx_n", yaxis_title="mean_expectancy")
fig.show()
输出:
测试 10,000 种双 SMA 窗口组合
symbols = ["BTC-USD", "ETH-USD", "XRP-USD"]
data = vbt.YFData.download(symbols, missing_index="drop")
price = data.get("Close")
windows = np.arange(2, 101)
fast_ma, slow_ma = vbt.MA.run_combs(price, window=windows, r=2, short_names=["fast", "slow"])
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf = vbt.Portfolio.from_signals(price, entries, exits, size=np.inf, fees=0.001, freq="1D")
fig = pf.total_return().vbt.heatmap(
x_level="fast_window", y_level="slow_window", slider_level="symbol", symmetric=True,
trace_kwargs=dict(colorbar=dict(title="Total return", tickformat="%")))
fig.show()
输出:

[!TIP] VectorBT PRO
使用随机搜索对大型参数网格进行采样, 或通过条件参数 排除快均线窗口长于慢均线窗口等组合。 交叉验证教程 介绍了如何在训练数据上选择参数,并在后续时间段上进行评估。
查看任意策略配置的统计数据
print(pf[(10, 20, "ETH-USD")].stats())
输出:
Start 2017-11-09 00:00:00+00:00
End 2026-01-03 00:00:00+00:00
Period 2978 days 00:00:00
Start Value 100.0
End Value 1604.093789
Total Return [%] 1504.093789
Benchmark Return [%] 866.094127
Max Gross Exposure [%] 100.0
Total Fees Paid 204.226289
Max Drawdown [%] 70.734951
Max Drawdown Duration 1095 days 00:00:00
Total Trades 81
Total Closed Trades 80
Total Open Trades 1
Open Trade PnL -14.232533
Win Rate [%] 41.25
Best Trade [%] 120.511071
Worst Trade [%] -27.772271
Avg Winning Trade [%] 27.265519
Avg Losing Trade [%] -9.022864
Avg Winning Trade Duration 32 days 20:21:49.090909091
Avg Losing Trade Duration 8 days 16:51:03.829787234
Profit Factor 1.275515
Expectancy 18.979079
Sharpe Ratio 0.861945
Calmar Ratio 0.572758
Omega Ratio 1.20277
Sortino Ratio 1.301377
Name: (10, 20, ETH-USD), dtype: object
绘制任意策略配置的图表
pf[(10, 20, "ETH-USD")].plot().show()
输出:

为多个交易标的生成布林带动画
除了回测,VectorBT 还提供金融数据分析和可视化工具:
symbols = ["BTC-USD", "ETH-USD", "XRP-USD"]
data = vbt.YFData.download(symbols, period="6mo", missing_index="drop")
price = data.get("Close")
bbands = vbt.BBANDS.run(price)
def plot(index, bbands):
bbands = bbands.loc[index]
fig = vbt.make_subplots(
rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.15,
subplot_titles=("%B", "Bandwidth"))
fig.update_layout(showlegend=False, width=750, height=400)
bbands.percent_b.vbt.ts_heatmap(
trace_kwargs=dict(zmin=0, zmid=0.5, zmax=1, colorscale="Spectral", colorbar=dict(
y=(fig.layout.yaxis.domain[0] + fig.layout.yaxis.domain[1]) / 2, len=0.5
)), add_trace_kwargs=dict(row=1, col=1), fig=fig)
bbands.bandwidth.vbt.ts_heatmap(
trace_kwargs=dict(colorbar=dict(
y=(fig.layout.yaxis2.domain[0] + fig.layout.yaxis2.domain[1]) / 2, len=0.5
)), add_trace_kwargs=dict(row=2, col=1), fig=fig)
return fig
vbt.save_animation(
"bbands.gif", bbands.wrapper.index, plot, bbands,
delta=90, step=3, fps=3, writer_kwargs=dict(loop=0))
输出:
100%|██████████| 31/31 [00:21<00:00, 1.21it/s]

访问网站,获取更多示例、文档和指南。
示例应用
K 线形态
以交互方式探索 K 线形态,并使用 VectorBT 回测其交易信号。

链接
许可证
本项目属于 fair-code,根据附带 Commons Clause 条款的 Apache 2.0 许可证分发。
源代码公开可用,任何个人或组织均可免费使用。但是,不得销售以本软件为主要内容的产品或服务。
如有疑问或希望申请许可证例外,请联系作者。
安装可选依赖项时,可能需要遵守更严格的许可条款。
贡献者
感谢所有为 VectorBT 作出贡献的人!
Star 历史
免责声明
本软件仅供学习使用。请勿投入您无法承受损失的资金。
使用本软件的风险由您自行承担。作者及关联方对您的交易结果不承担任何责任。