Skip to main content

Backtest trading strategies in Python

Project description

Backtesting.py

Build Status Code Coverage Source lines of code Backtesting on PyPI PyPI downloads Total downloads GitHub Sponsors

Backtest trading strategies with Python.

Project website + Documentation   |  YouTube

Installation

$ pip install backtesting

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

plot of trading simulation

Find more usage examples in the documentation.

Features

  • Simple, well-documented API
  • Blazing fast execution
  • Built-in optimizer
  • Library of composable base strategies and utilities
  • Indicator-library-agnostic
  • Supports any financial instrument with candlestick data
  • Detailed results
  • Interactive visualizations

xkcd.com/1570

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. We thank you!

Alternatives

See alternatives.md for a list of alternative Python backtesting frameworks and related packages.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

backtesting-0.6.4.tar.gz (192.9 kB view details)

Uploaded Source

Built Distribution

backtesting-0.6.4-py3-none-any.whl (191.4 kB view details)

Uploaded Python 3

File details

Details for the file backtesting-0.6.4.tar.gz.

File metadata

  • Download URL: backtesting-0.6.4.tar.gz
  • Upload date:
  • Size: 192.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.2

File hashes

Hashes for backtesting-0.6.4.tar.gz
Algorithm Hash digest
SHA256 f176ac6fb546dfd5d743f038ee5824624e55a38a493c4dd5821731b74c867aae
MD5 8e04143f90cd26152b92eccce4f61450
BLAKE2b-256 ae913e7d81c3ad22b3881f5ee8cabd8e69bb611409714647a6e875665b4c8c10

See more details on using hashes here.

File details

Details for the file backtesting-0.6.4-py3-none-any.whl.

File metadata

  • Download URL: backtesting-0.6.4-py3-none-any.whl
  • Upload date:
  • Size: 191.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.2

File hashes

Hashes for backtesting-0.6.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0572ea94419998d8d0d517ce82ecbea4cda3df2c05554dc32c3fe7aa3e21929c
MD5 97718c8b9285dc44b8cb0faff28a2bb6
BLAKE2b-256 8d93399248543781d93d3adac409ee16708942ba6e9693577c3ecff0964d092d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page