RustyBT Jupyter Notebooks¶
This directory contains example Jupyter notebooks demonstrating RustyBT's capabilities for interactive backtesting, analysis, and optimization.
Viewing Notebooks
On this documentation site: All notebooks are rendered and viewable in the Notebooks menu (left sidebar) On GitHub: Click the links below to view notebooks in the repository Locally: Download and open in Jupyter Lab/Notebook
Available Notebooks¶
All 13 notebooks + advanced tutorials are now available! 🎉
⚠️ Note on Multi-Strategy Portfolios: The 09_multi_strategy_portfolio.ipynb has been replaced with a working Python example (portfolio_allocator_tutorial.py). See 09_multi_strategy_portfolio_note.md for the correct implementation pattern.
⭐ Recommended Starting Point¶
10_full_workflow.ipynb - Complete end-to-end workflow
Complete workflow demonstrating the entire RustyBT pipeline from data ingestion to optimization.
- Data ingestion → Strategy development → Backtesting → Analysis → Optimization
- All major features demonstrated in one comprehensive example
- Perfect introduction to the framework
🚀 Quick Start Examples¶
Fast-track examples to get you backtesting immediately:
crypto_backtest_ccxt.ipynb - Cryptocurrency backtesting with CCXT
- Multi-exchange data fetching (Binance, Coinbase, Kraken)
- Data validation and quality checks
- Simple moving average crossover strategy
- Performance analysis and visualization
equity_backtest_yfinance.ipynb - Stock backtesting with yfinance
- Stock and ETF data ingestion
- Strategy development and testing
- Performance metrics calculation
📚 Getting Started Tutorials¶
Step-by-step tutorials for learning RustyBT fundamentals:
01_getting_started.ipynb - Your first backtest
- Setup and configuration
- Creating your first strategy
- Running backtests
- Visualizing results
02_data_ingestion.ipynb - Working with data sources
- yfinance (stocks, ETFs)
- CCXT (cryptocurrencies)
- CSV import
- Data quality checks
03_strategy_development.ipynb - Building trading strategies
- Moving average crossover
- Mean reversion strategies
- Momentum strategies
📊 Analysis & Optimization¶
Advanced techniques for strategy evaluation and improvement:
04_performance_analysis.ipynb - Performance metrics deep dive
- Interactive visualizations with Plotly
- Key metrics calculation
- Risk-adjusted returns
05_optimization.ipynb - Parameter optimization
- Grid search optimization
- Bayesian optimization
- Finding optimal parameters
- Avoiding overfitting
06_walk_forward.ipynb - Walk-forward validation
- Robust validation techniques
- Out-of-sample testing
- Performance degradation analysis
07_risk_analytics.ipynb - Risk metrics and analysis
- Value at Risk (VaR) calculations
- Conditional VaR (CVaR)
- Beta analysis
- Drawdown analysis
08_portfolio_construction.ipynb - Multi-asset portfolios
- Equal-weight portfolios
- Risk-parity allocation
- Rebalancing logic
09_live_paper_trading.ipynb - Paper trading setup
- Real-time testing
- Paper broker configuration
- Live monitoring
Features Demonstrated¶
All notebooks showcase:
- ✅ Interactive Visualizations using Plotly (equity curves, drawdowns, distributions)
- ✅ DataFrame Exports to both pandas and polars formats
- ✅ Progress Bars for long-running operations using tqdm
- ✅ Async/Await Support for backtests in notebooks
- ✅ Rich Display with _repr_html_() methods for strategy objects
Setup¶
Install Dependencies¶
# Install RustyBT with notebook support
pip install rustybt plotly tqdm ipywidgets nest-asyncio
# Or using uv (recommended)
uv pip install rustybt plotly tqdm ipywidgets nest-asyncio
Launch Jupyter¶
Initialize Notebook Environment¶
Usage Patterns¶
Basic Backtest¶
from rustybt import TradingAlgorithm
from rustybt.analytics import plot_equity_curve
class MyStrategy(TradingAlgorithm):
def initialize(self, context):
context.asset = self.symbol('AAPL')
def handle_data(self, context, data):
self.order(context.asset, 100)
algo = MyStrategy(...)
results = algo.run()
# Visualize
fig = plot_equity_curve(results)
fig.show()
Async Backtest with Progress¶
from rustybt.analytics import async_backtest, setup_notebook
setup_notebook()
# Run async
results = await async_backtest(algo, show_progress=True)
Export to DataFrame¶
# Export results to polars
results_pl = algo.to_polars(results)
# Export positions
positions = algo.get_positions_df()
# Export transactions
transactions = algo.get_transactions_df()
Visualizations¶
from rustybt.analytics import (
plot_equity_curve,
plot_drawdown,
plot_returns_distribution,
plot_rolling_metrics
)
# Equity curve with drawdown
plot_equity_curve(results, show_drawdown=True).show()
# Returns distribution
plot_returns_distribution(results).show()
# Rolling metrics (Sharpe, volatility)
plot_rolling_metrics(results, window=60).show()
Tips for Notebook Development¶
- Always call
setup_notebook()at the beginning to configure async support - Use progress bars for operations that take >5 seconds
- Export DataFrames for custom analysis with pandas/polars
- Save figures for reports:
- Use dark theme for better visibility:
plot_equity_curve(results, theme='dark')
Contributing¶
To add new example notebooks:
1. Follow the naming convention: NN_topic_name.ipynb
2. Include markdown cells explaining each step
3. Demonstrate at least 3 analytics features
4. Add expected runtime in the first cell
5. Ensure notebook runs without errors using jupyter nbconvert --execute
Support¶
For issues or questions: - Documentation: https://rustybt.readthedocs.io - GitHub Issues: https://github.com/rustybt/rustybt/issues - Discussions: https://github.com/rustybt/rustybt/discussions