Welcome to RustyBT¶
Modern Python backtesting engine built on Zipline-Reloaded, enhanced with Decimal precision, Polars data engine, and live trading capabilities
What is RustyBT?¶
RustyBT is a next-generation algorithmic trading framework that extends Zipline-Reloaded with modern enhancements for professional traders and quantitative researchers.
Key Features¶
⨠Decimal Precision - Financial-grade arithmetic using Python's Decimal type for audit-compliant calculations
⥠Polars Data Engine - 5-10x faster data processing with lazy evaluation and efficient memory usage
đž Parquet Storage - Industry-standard columnar format (50-80% smaller than HDF5)
đ Multi-Strategy Portfolio - Advanced capital allocation and risk management across multiple strategies
đ§ Strategy Optimization - Grid search, Bayesian optimization, genetic algorithms, and walk-forward analysis
đ´ Live Trading - Production-ready engine for executing strategies in real-time markets (CCXT, Interactive Brokers, Binance, Bybit, Hyperliquid)
đ Modern Python - Requires Python 3.12+ for structural pattern matching and enhanced type hints
Quick Start¶
Installation¶
# Install from PyPI (recommended)
pip install rustybt
# Or with optional features
pip install rustybt[optimization]
Full installation instructions â
Your First Backtest¶
Step 1: Create a strategy file strategy.py:
from rustybt.api import order_target, record, symbol
def initialize(context):
context.asset = symbol('AAPL')
def handle_data(context, data):
# Simple moving average crossover
short_mavg = data.history(context.asset, 'price',
bar_count=100, frequency="1d").mean()
long_mavg = data.history(context.asset, 'price',
bar_count=300, frequency="1d").mean()
if short_mavg > long_mavg:
order_target(context.asset, 100)
elif short_mavg < long_mavg:
order_target(context.asset, 0)
Step 2: Ingest sample data (first time only):
This downloads free sample data from Yahoo Finance (20 top US stocks, 2 years of history). No API key required!
Step 3: Run the backtest:
Troubleshooting
- "no data for bundle": Run
rustybt ingest -b yfinance-profilingfirst - "fatal: bad revision 'HEAD'": Reinstall with
pip install --upgrade --force-reinstall rustybt - Segmentation fault: Check Python version (3.12+ required) and reinstall
Complete quick start guide â
Documentation Navigation¶
đ Getting Started¶
New to RustyBT? Start here!
- Installation - Set up RustyBT on your system
- Quick Start - Write your first trading strategy
- Configuration - Configure RustyBT for your needs
đ User Guides¶
In-depth guides for specific features:
- Decimal Precision - Financial-grade calculations
- Caching System - Optimize performance with intelligent caching
- Creating Data Adapters - Build custom data sources
- CSV Data Import - Import your own data
- Testnet Setup - Test live trading safely
đĄ Examples & Tutorials¶
Learn by example with 13 Jupyter notebooks and 20+ Python examples:
Interactive Tutorials: - Getting Started, Data Ingestion, Strategy Development - Performance Analysis, Optimization, Walk-Forward Analysis - Risk Analytics, Portfolio Construction, Paper Trading - Full Workflow, Advanced Topics, Crypto & Equity Backtests
Python Examples: - Data ingestion (Yahoo Finance, CCXT, CSV) - Live trading & paper trading - Portfolio allocation & transaction costs - Strategy optimization (Grid, Bayesian, Genetic, Walk-Forward) - Report generation & attribution analysis
đ API Reference¶
Complete API documentation:
- Datasource API - Data ingestion and management
- Optimization API - Strategy optimization tools
- Analytics API - Performance analysis and reporting
âšī¸ About¶
Project information:
- License - Apache 2.0 license information
- Contributing - How to contribute to RustyBT
- Changelog - Release history and changes
Key Differences from Zipline-Reloaded¶
| Feature | Zipline-Reloaded | RustyBT |
|---|---|---|
| Numeric Type | float64 |
Decimal (configurable precision) |
| Data Engine | pandas |
polars (pandas compatible) |
| Storage Format | bcolz/HDF5 | Parquet (Arrow-based) |
| Python Version | 3.10+ | 3.12+ |
| Live Trading | No | Yes (multiple brokers) |
| Multi-Strategy | Limited | Advanced portfolio management |
| Optimization | Basic | Grid, Bayesian, Genetic, Walk-Forward |
Feature Highlights¶
Decimal Precision¶
from decimal import Decimal
from rustybt.finance.decimal import DecimalLedger
# Financial calculations with audit-compliant precision
ledger = DecimalLedger(starting_cash=Decimal("100000.00"))
Modern Data Architecture¶
import polars as pl
from rustybt.data.adapters import YFinanceAdapter, CCXTAdapter
# Multiple data sources with intelligent caching
yf_adapter = YFinanceAdapter()
crypto_adapter = CCXTAdapter(exchange_id='binance')
Multi-Strategy Portfolio Management¶
from rustybt.portfolio import PortfolioAllocator
from rustybt.portfolio.allocation import RiskParityAllocation
# Manage multiple strategies with intelligent allocation
allocator = PortfolioAllocator(
strategies=[strategy1, strategy2, strategy3],
allocation_algorithm=RiskParityAllocation()
)
Strategy Optimization¶
from rustybt.optimization import Optimizer, WalkForwardOptimizer
# Optimize strategy parameters
optimizer = Optimizer(
strategy=my_strategy,
param_space={'fast_ma': (10, 50), 'slow_ma': (50, 200)}
)
results = optimizer.optimize()
Live Trading¶
from rustybt.live import LiveTradingEngine
from rustybt.live.brokers import CCXTBrokerAdapter
# Connect to exchange for live trading
broker = CCXTBrokerAdapter(
exchange_id='binance',
api_key='YOUR_API_KEY',
api_secret='YOUR_API_SECRET',
testnet=True,
)
engine = LiveTradingEngine(strategy=my_strategy, broker_adapter=broker)
engine.run()
Community & Support¶
- đ Documentation: You're reading it!
- đ Issues: GitHub Issues
- đŦ Discussions: GitHub Discussions
- đĻ Source Code: GitHub Repository
Project Status¶
Completed â ¶
- Epic 1: Project setup and architecture foundations
- Epic 2: Decimal precision financial calculations
- Epic 3: Modern data architecture (Polars/Parquet)
- Epic 4: Enhanced transaction costs and multi-strategy
- Epic 5: Strategy optimization framework
- Epic 6: Live trading engine with broker integrations
- Epic 8: Analytics and production readiness
In Progress đ§¶
- Epic 7: Rust performance optimizations
- Epic X2: Production readiness validation
Planned đ¶
- Epic 9: REST API and WebSocket interface
- v1.0.0: Production-ready stable release
Acknowledgments¶
RustyBT is built on the shoulders of giants:
- Zipline - Original backtesting library by Quantopian
- Zipline-Reloaded - Maintained fork by Stefan Jansen
- Machine Learning for Algorithmic Trading - Comprehensive guide by Stefan Jansen
We are grateful to the Quantopian team, Stefan Jansen, and the entire open-source algorithmic trading community.
Development Status
RustyBT is under active development. APIs may change until version 1.0.0.
Ready to get started? Head to the Installation Guide â