Getting started¶
VectorBT® PRO is a high-performance Python engine for backtesting, algorithmic trading, and quantitative research. It represents trading systems as multidimensional arrays, evaluates large parameter spaces at C speed, and keeps the full workflow accessible through familiar tools such as NumPy, Pandas, Plotly, and the broader scientific Python ecosystem.
It is the actively developed, proprietary successor to the vectorbt package. The PRO version extends those core ideas into a more complete research workflow: faster large-scale testing, stronger analysis tools, private documentation and tutorials, and built-in support for modern AI workflows. The result is a research environment that stays flexible as projects become more demanding, without forcing you into a closed platform or custom infrastructure.
Become a member Explore features
Fast by design
Run broad parameter sweeps on arrays with Numba, chunking, and parallel execution. Test more ideas in less time without leaving Python.
Built for rigor
Use walk-forward optimization, purged and combinatorial cross-validation, robustness checks, split analytics, and parameter-surface inspection to evaluate ideas more carefully before deployment.
Practical workflow
Build strategies from familiar components such as data, indicators, signals, and portfolios. Examples and tutorials help you learn the workflow step by step.
AI-native
Built-in MCP server and CLI commands, function calling, LLM-friendly documentation, and agent support. Designed for seamless integration with AI tools for research, automation, and faster access to the docs.
Private community
Get access to a private Discord community with 1,000+ members for support, discussion, updates, and shared ideas, plus a private GitHub repository and exclusive website content.
Modern Python stack
Whether you are new to coding or a seasoned programming expert, you will learn how to use the latest Python tools to your advantage in trading.
Appreciation
VBT is powered by its community. Financial contributions like yours ensure that the software remains safe to use for years to come. Thank you!
What is VBT?¶
VBT is a high-performance Python package for researching trading strategies with fast array-based computation and rich analysis tools.
A core idea in VBT is representing each trading setup as a set of multidimensional arrays, where each column corresponds to a distinct configuration of a strategy and its environment. That makes it possible to backtest large parameter grids at C speed while still inspecting the results with Python tools, giving you the best of both worlds. Learn more.
Why VBT?¶
Many backtesting tools run as a single monolithic process. VBT takes a different approach and breaks the workflow into reusable components such as data, indicators, signals, allocations, and portfolios. You can test and analyze each part independently, combine them as needed, and inspect intermediate results before running the full backtest. This modular structure also makes it easier to integrate machine learning wherever it fits.
VBT is also built for parameter exploration. Even large search spaces can often be tested quickly enough to build dashboards, inspect sensitivity, and see how small parameter changes affect results in real time.
Example
Pull the daily history of the BTC/USDT and ETH/USDT pairs from Binance, backtest nearly 20,000 MACD configurations in a RAM-efficient way, and visualize win rate as a function of the parameters, in less than 30 seconds
from vectorbtpro import *
@vbt.parameterized # (1)!
@vbt.chunked(chunk_len=1000) # (2)!
def pipeline( # (3)!
data: vbt.Param,
fast: vbt.Chunked,
slow: vbt.Chunked,
signal: vbt.Chunked
) -> "concat":
macd = vbt.talib("MACD").run(data.get("Close"), fast, slow, signal)
entries = macd.macd_above(0) & macd.macd_above(macd.macdsignal) # (4)!
exits = macd.macd_below(0) | macd.macd_below(macd.macdsignal) # (5)!
pf = vbt.Portfolio.from_signals(data, entries, exits, freq="d")
return pf.trades.win_rate
data = vbt.BinanceData.pull(["BTCUSDT", "ETHUSDT"]) # (6)!
param_product = vbt.combine_params( # (7)!
dict(
fast=np.arange(4, 31),
slow=np.arange(4, 31),
signal=np.arange(4, 31)
),
build_index=False
)
win_rates = pipeline(data, **param_product) # (8)!
win_rates.vbt.volume( # (9)!
slider_level="symbol",
trace_kwargs=dict(
colorscale="icefire",
colorbar=dict(title='win_rate', tickformat='.0%'),
cmid=0.5
),
).show()
- Enhance the function to be parameterized. This allows running the same logic for each parameter combination in a loop. In this case, we define only one parameter: symbols (data). Other parameters will be pre-generated and chunked.
- Enhance the function to be chunked. This allows splitting the parameter space into smaller chunks of 1000 combinations each. One chunk is processed at a time to save RAM.
- Create a pipeline that returns the win rate for each parameter combination in the chunk.
- Enter a position whenever the MACD line is above zero and the signal line.
- Exit the position whenever the MACD line is below zero or the signal line.
- Fetch both datasets. We will run the chunked pipeline for each dataset separately.
- Generate 27 x 27 x 27 = 19,683 parameter combinations. Since fast and slow periods are conditionally bound, we could (and should) filter out combinations where the fast period is longer than the slow period, but this would only colorize half the cube.
- Run the pipeline for both datasets and all parameter combinations. The results will be automatically concatenated into a single Series with a parameter multi-index.
- Visualize the Series as a 3D volume plot. Since we have 4 parameters (symbol, fast, slow, signal), use the symbol parameter as a slider to switch between datasets.
Click on the "Dashboard" tab to see the graph. It may take a few seconds to render.
To reduce overfitting risk, VBT supports many cross-validation schemes and robustness tests to bring backtests closer to reality. We do not recommend blindly selecting the best parameter set. The main value of this workflow is understanding why a certain configuration behaves the way it does.
What are prerequisites?¶
VBT is not a narrow, command-driven backtesting framework. Instead of forcing the full workflow into a fixed set of commands, it follows a data science approach: working with arrays, combining Python packages, building visualizations, and inspecting intermediate results along the way. That flexibility is one of its strengths, but it also means some familiarity with Python and scientific computing will help you get productive faster.
If you are still building that background, the documentation, tutorials, and community can help you get started
What members get?¶
Installation Guide + Subscriber Perks on YouTube
VBT is distributed through a private GitHub repository. Eligible sponsors receive collaborator access, which means new features are available as they ship, along with private documentation, tutorials, and examples.
-
Screen capture of the private repository

Eligible sponsors are also invited to a private Discord server for announcements, support, feature discussions, and direct feedback.
-
Screen capture of the private Discord server

How to get access?¶
Become a member and choose the plan that fits your needs.
Membership gives you access to the private repository, exclusive documentation and tutorials, the Discord community, and ongoing product updates. The focus is practical: faster access to new capabilities, clearer learning material, and direct support while you build and test strategies.