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.3.tar.gz (191.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

backtesting-0.6.3-py3-none-any.whl (190.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: backtesting-0.6.3.tar.gz
  • Upload date:
  • Size: 191.5 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.3.tar.gz
Algorithm Hash digest
SHA256 c6bcb3be3293f8545b178a679e21ef91103df23ad95680b260e9a3614f774dae
MD5 27d7e64377eddd1272581967c65fbc15
BLAKE2b-256 f7800c13369a2dd706b67d872f4d55b3f4a373232bad8422f77d51a6c2352385

See more details on using hashes here.

File details

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

File metadata

  • Download URL: backtesting-0.6.3-py3-none-any.whl
  • Upload date:
  • Size: 190.1 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 58d4fcccf304d90d3d8334ff502802a6c9f02a1668c86350ef0dae28ba66da58
MD5 70d57ef17c11837b44eea039a9b23a5b
BLAKE2b-256 d332e20770c2fd0b477c6c37dc9497b52de40c8530cb8a1c22d0e5e6bafb8ced

See more details on using hashes here.

Supported by

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