Build, test, and compare investment strategies from reusable Python components. bt combines strategy logic with historical price data, tracks portfolio positions and transactions, and provides performance statistics and charts through ffn.
- Compose strategy logic: combine algorithms for scheduling, security selection, weighting, and rebalancing.
- Build portfolios of strategies: nest strategies and securities in a common tree.
- Model trading costs: configure commissions and transaction cost models.
- Compare results: inspect returns, weights, transactions, drawdowns, and other statistics.
pip install btSee the installation guide for additional details.
This example uses synthetic prices, so it runs without downloading market data:
import numpy as np
import pandas as pd
import bt
prices = pd.DataFrame(
{
"asset_a": np.linspace(100, 120, 252),
"asset_b": np.linspace(100, 110, 252),
},
index=pd.bdate_range("2020-01-01", periods=252),
)
strategy = bt.Strategy(
"equal_weight",
[
bt.algos.RunMonthly(),
bt.algos.SelectAll(),
bt.algos.WeighEqually(),
bt.algos.Rebalance(),
],
)
result = bt.run(bt.Backtest(strategy, prices))
result.display()The strategy selects both assets, gives each equal weight, and rebalances monthly. Replace the synthetic prices with your own data to explore a strategy. Backtest results depend on data quality and modeling assumptions; they do not predict future performance.
- First strategy tutorial: walk through a backtest and inspect its results.
- Algorithms: compose and customize strategy logic.
- Portfolio trees: combine securities and nested strategies.
- Examples: explore momentum, risk allocation, and fixed-income strategies.
- API overview: find strategy, algorithm, and backtest interfaces.
The published documentation is at https://pmorissette.github.io/bt/.
See the development guide for environment setup, tests, documentation builds, and Copier template updates. Report bugs and propose improvements through GitHub issues.
bt is released under the MIT license.