Python library for backtesting and analyzing trading strategies at scale
npx @tessl/cli install tessl/pypi-vectorbt@0.28.0A comprehensive Python library for backtesting and analyzing trading strategies at scale. VectorBT provides high-performance vectorized operations for processing financial data, enables complex portfolio analysis with detailed performance metrics, and offers built-in integrations with popular data sources and advanced visualization capabilities.
pip install vectorbtimport vectorbt as vbtCommon for accessing specific functionality:
from vectorbt import Portfolio, MA, RSI, MACD, BBANDS
from vectorbt.data import YFData, BinanceData, CCXTData
from vectorbt.records import Orders, Trades, Positions
from vectorbt.signals import RAND, STX
from vectorbt.labels import FMEAN, TRENDLBimport vectorbt as vbt
import pandas as pd
# Fetch historical data
data = vbt.YFData.download("AAPL", start="2020-01-01", end="2023-01-01")
price = data.get("Close")
# Create a simple moving average crossover strategy
fast_window = 10
slow_window = 50
fast_ma = vbt.MA.run(price, fast_window)
slow_ma = vbt.MA.run(price, slow_window)
# Generate entry and exit signals
entries = fast_ma.ma_crossed_above(slow_ma.ma)
exits = fast_ma.ma_crossed_below(slow_ma.ma)
# Run backtest
portfolio = vbt.Portfolio.from_signals(
close=price,
entries=entries,
exits=exits,
init_cash=10000
)
# Analyze performance
print(f"Total Return: {portfolio.total_return():.2%}")
print(f"Sharpe Ratio: {portfolio.sharpe_ratio():.2f}")
print(f"Max Drawdown: {portfolio.max_drawdown():.2%}")
# Visualize results
portfolio.plot().show()VectorBT follows a modular design built on high-performance vectorized operations:
The library is designed for maximum reusability across quantitative finance applications, enabling efficient testing of thousands of strategy variations simultaneously using vectorized computations.
Core backtesting engine for strategy evaluation with comprehensive performance metrics, trade analysis, and risk management. Includes order execution simulation, position tracking, and detailed performance attribution.
class Portfolio:
@classmethod
def from_signals(cls, close, entries, exits, **kwargs): ...
@classmethod
def from_orders(cls, close, orders, **kwargs): ...
def total_return(self): ...
def sharpe_ratio(self): ...
def max_drawdown(self): ...Unified data acquisition and management system supporting multiple financial data providers with automatic synchronization, caching, and preprocessing capabilities.
class YFData:
@classmethod
def download(cls, symbols, **kwargs): ...
def update(self): ...
class BinanceData:
@classmethod
def download(cls, symbols, **kwargs): ...Comprehensive library of technical indicators with factory pattern for creating custom indicators. Includes traditional indicators (MA, RSI, MACD) and advanced statistical measures.
class MA:
@classmethod
def run(cls, close, window, **kwargs): ...
class RSI:
@classmethod
def run(cls, close, window=14, **kwargs): ...
class MACD:
@classmethod
def run(cls, close, **kwargs): ...Advanced signal generation system for creating entry/exit rules with support for stop losses, take profits, and complex conditional logic. Includes random signal generators for strategy testing.
class RAND:
@classmethod
def run(cls, shape, prob=0.1, **kwargs): ...
class STX:
@classmethod
def run(cls, entries, stops, **kwargs): ...Look-ahead analysis tools for generating labels from future price movements, enabling machine learning model training on financial time series data.
class FMEAN:
@classmethod
def run(cls, close, window, **kwargs): ...
class TRENDLB:
@classmethod
def run(cls, close, **kwargs): ...Core record classes for managing and analyzing trading data including orders, trades, positions, and drawdowns with efficient sparse data structures.
class Records: ...
class MappedArray: ...
class Orders: ...
class Trades: ...
class Positions: ...
class Drawdowns: ...Advanced tools for time series analysis including range analysis, drawdown detection, and data splitting strategies for backtesting and cross-validation.
class Ranges: ...
class RangeSplitter: ...
class RollingSplitter: ...
class ExpandingSplitter: ...Core utilities for configuration management, caching, plotting, and template systems. Includes asynchronous job scheduling and data transformation utilities.
vbt.settings: Config
def make_figure(**kwargs): ...
def cached_property(func): ...
class Config: ...# Core types available in vectorbt._typing
import numpy as np
import pandas as pd
from typing import Union
from enum import IntEnum
Scalar = Union[int, float, complex, np.number]
Array = np.ndarray
SeriesFrame = Union[pd.Series, pd.DataFrame]
ArrayLike = Union[Array, SeriesFrame]
# Portfolio enums (from vectorbt.portfolio.enums)
class Direction(IntEnum):
LongOnly = 0
ShortOnly = 1
Both = 2
class OrderSide(IntEnum):
Buy = 0
Sell = 1
class OrderStatus(IntEnum):
Filled = 0
Ignored = 1
Rejected = 2
class SizeType(IntEnum):
Amount = 0
Value = 1
Percent = 2
TargetPercent = 3
# Signal enums (from vectorbt.signals.enums)
class StopType(IntEnum):
StopLoss = 0
TrailStop = 1
TakeProfit = 2
class FactoryMode(IntEnum):
Entries = 0
Exits = 1
Both = 2
Chain = 3
# Label enums (from vectorbt.labels.enums)
class TrendMode(IntEnum):
Binary = 0
BinaryCont = 1
BinaryContSat = 2
PctChange = 3
PctChangeNorm = 4VectorBT extends pandas with the .vbt accessor providing direct access to all functionality:
.vbt.signals.* - Signal analysis methods.vbt.returns.* - Return analysis methods.vbt.ohlc.* - OHLC data specific methods.vbt.px.* - Price data methods# Example accessor usage
price.vbt.returns.sharpe_ratio()
signals.vbt.signals.first()