bt - flexible backtesting for Python
See the codeBuild, 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.
pip install bt
See 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.
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.
Overall
Maintained
Code review
PyPI
Latest release
Releases this year
802 followers · starred Oct 2023
517 followers · starred Feb 2026
145 followers · starred Jan 2024
151 followers · starred Nov 2025
bt - flexible backtesting for Python
See the codeBuild, 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.
pip install bt
See 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.
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.
Overall
Maintained
Code review
PyPI
Latest release
Releases this year
802 followers · starred Oct 2023
517 followers · starred Feb 2026
145 followers · starred Jan 2024
151 followers · starred Nov 2025