Skip to content

kernc/backtesting.py

Repository files navigation

Backtesting.py

Build StatusCode CoverageSource lines of codeBacktesting on PyPIPyPI downloadsTotal downloadsGitHub Sponsors

Backtest trading strategies with Python.

Project website + Documentation | YouTube

Installation

$ pip install backtesting 

Usage

frombacktestingimportBacktest, Strategyfrombacktesting.libimportcrossoverfrombacktesting.testimportSMA, GOOGclassSmaCross(Strategy): definit(self): price=self.data.Closeself.ma1=self.I(SMA, price, 10) self.ma2=self.I(SMA, price, 20) defnext(self): ifcrossover(self.ma1, self.ma2): self.buy() elifcrossover(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.