Backtesting.py
Backtest trading strategies with Python.
Project website + Documentation | YouTube
Installation
$ pip install backtesting
Or if you prefer the bleeding edge:
$ pip install git+https://github.com/kernc/backtesting.py
Usage
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from backtesting.test import SMA, GOOG
class SmaCross(Strategy):
def init(self):
price = self.data.Close
self.ma1 = self.I(SMA, price, 10)
self.ma2 = self.I(SMA, price, 20)
def next(self):
if crossover(self.ma1, self.ma2):
self.buy()
elif crossover(self.ma2, self.ma1):
self.sell()
bt = Backtest(GOOG, SmaCross, commission=.002,
exclusive_orders=True)
stats = bt.run()
bt.plot()
Results in:
Start 2004-08-19 00:00:00
End 2013-03-01 00:00:00
Duration 3116 days 00:00:00
Exposure Time [%] 94.27
Equity Final [$] 68935.12
Equity Peak [$] 68991.22
Return [%] 589.35
Buy & Hold Return [%] 703.46
Return (Ann.) [%] 25.42
Volatility (Ann.) [%] 38.43
CAGR [%] 16.80
Sharpe Ratio 0.66
Sortino Ratio 1.30
Calmar Ratio 0.77
Alpha [%] 450.62
Beta 0.02
Max. Drawdown [%] -33.08
Avg. Drawdown [%] -5.58
Max. Drawdown Duration 688 days 00:00:00
Avg. Drawdown Duration 41 days 00:00:00
# Trades 93
Win Rate [%] 53.76
Best Trade [%] 57.12
Worst Trade [%] -16.63
Avg. Trade [%] 1.96
Max. Trade Duration 121 days 00:00:00
Avg. Trade Duration 32 days 00:00:00
Profit Factor 2.13
Expectancy [%] 6.91
SQN 1.78
Kelly Criterion 0.6134
_strategy SmaCross(n1=10, n2=20)
_equity_curve Equ...
_trades Size EntryB...
dtype: object
Find more usage examples in the documentation.
Features
- Simple, well-documented API
- Blazing fast execution
- Built-in optimizer based on SAMBO
- Library of composable base strategies and related utilities
- Indicator-library-agnostic (BYO)
- Supports any financial instrument with OHLC(V) candlestick data
- Detailed trade results provided as simple Series/DataFrame objects
- Interactive visualizations
Bugs
Before reporting bugs or posting to the
discussion board,
please read contributing guidelines, particularly the section
about crafting useful bug reports and ```-fencing your code.
The maintainers thank you!
Alternatives
See alternatives.md for a list of alternative Python backtesting frameworks and related packages.
Release files for backtesting 0.6.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| backtesting-0.6.6.tar.gz | 197.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| backtesting-0.6.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 388.1 kB
Release files / backtesting-0.6.6.tar.gz
| Download URL | backtesting-0.6.6.tar.gz |
|---|---|
| Size | 197.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
844af11c961fa0f47bfddb04b448416f93b02b731faadfa3df8b98a44081fd0b
|
|
BLAKE2b-256 checksum How to use checksums |
be20235f1785fe312793b33449e448cb71b1a20af7bf9b526327bb24dbd3f5fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / backtesting-0.6.6-py3-none-any.whl
| Download URL | backtesting-0.6.6-py3-none-any.whl |
|---|---|
| Size | 190.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d2fc29ab6e10fbf44b05570720cef144d6d0d2ec8e183977114f2be9c5089b78
|
|
BLAKE2b-256 checksum How to use checksums |
4431cac88cccbe547adb9f2b4f589c833a394f357ce04c28eff14f334d656b06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|