[![](https://i.imgur.com/E8Kj69Y.png)](https://kernc.github.io/backtesting.py/)
Backtesting.py
==============
[![Build Status](https://img.shields.io/github/workflow/status/kernc/backtesting.py/CI/master?style=for-the-badge)](https://github.com/kernc/backtesting.py/actions)
[![Code Coverage](https://img.shields.io/codecov/c/gh/kernc/backtesting.py.svg?style=for-the-badge)](https://codecov.io/gh/kernc/backtesting.py)
[![Backtesting on PyPI](https://img.shields.io/pypi/v/backtesting.svg?color=blue&style=for-the-badge)](https://pypi.org/project/backtesting)
[![PyPI downloads](https://img.shields.io/pypi/dd/backtesting.svg?color=skyblue&style=for-the-badge)](https://pypi.org/project/backtesting)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/kernc?color=pink&style=for-the-badge)](https://github.com/sponsors/kernc)
Backtest trading strategies with Python.
[**Project website**](https://kernc.github.io/backtesting.py)
[Documentation]
[![Star](https://i.imgur.com/LSI6p6O.png)](#top) the project if you use it.
[Documentation]: https://kernc.github.io/backtesting.py/doc/backtesting/
Installation
------------
$ pip install backtesting
Usage
-----
```python
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:
```text
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
Sharpe Ratio 0.66
Sortino Ratio 1.30
Calmar Ratio 0.77
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
_strategy SmaCross(n1=10, n2=20)
_equity_curve Equ...
_trades Size EntryB...
dtype: object
```
[![plot of trading simulation](https://i.imgur.com/xRFNHfg.png)](https://kernc.github.io/backtesting.py/#example)
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](https://imgs.xkcd.com/comics/engineer_syllogism.png)
Alternatives
------------
See [alternatives.md] for a list of alternative Python
backtesting frameworks and related packages.
[alternatives.md]: https://github.com/kernc/backtesting.py/blob/master/doc/alternatives.md
Raw data
{
"_id": null,
"home_page": "https://kernc.github.io/backtesting.py/",
"name": "Backtesting",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "algo,algorithmic,ashi,backtest,backtesting,bitcoin,bokeh,bonds,candle,candlestick,cboe,chart,cme,commodities,crash,crypto,currency,doji,drawdown,equity,etf,ethereum,exchange,finance,financial,forecast,forex,fund,futures,fx,fxpro,gold,heiken,historical,indicator,invest,investing,investment,macd,market,mechanical,money,oanda,ohlc,ohlcv,order,price,profit,quant,quantitative,rsi,silver,stocks,strategy,ticker,trader,trading,tradingview,usd",
"author": "Zach L\u00fbster",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/97/41/fb91644ac11bfcd72212fcd187c5388d402b4f8f9ed4a35d0cd61c2c8e1a/Backtesting-0.3.3.tar.gz",
"platform": "",
"description": "[![](https://i.imgur.com/E8Kj69Y.png)](https://kernc.github.io/backtesting.py/)\n\nBacktesting.py\n==============\n[![Build Status](https://img.shields.io/github/workflow/status/kernc/backtesting.py/CI/master?style=for-the-badge)](https://github.com/kernc/backtesting.py/actions)\n[![Code Coverage](https://img.shields.io/codecov/c/gh/kernc/backtesting.py.svg?style=for-the-badge)](https://codecov.io/gh/kernc/backtesting.py)\n[![Backtesting on PyPI](https://img.shields.io/pypi/v/backtesting.svg?color=blue&style=for-the-badge)](https://pypi.org/project/backtesting)\n[![PyPI downloads](https://img.shields.io/pypi/dd/backtesting.svg?color=skyblue&style=for-the-badge)](https://pypi.org/project/backtesting)\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/kernc?color=pink&style=for-the-badge)](https://github.com/sponsors/kernc)\n\nBacktest trading strategies with Python.\n\n[**Project website**](https://kernc.github.io/backtesting.py)\n\n[Documentation]\n\n[![Star](https://i.imgur.com/LSI6p6O.png)](#top) the project if you use it.\n\n[Documentation]: https://kernc.github.io/backtesting.py/doc/backtesting/\n\n\nInstallation\n------------\n\n $ pip install backtesting\n\n\nUsage\n-----\n```python\nfrom backtesting import Backtest, Strategy\nfrom backtesting.lib import crossover\n\nfrom backtesting.test import SMA, GOOG\n\n\nclass SmaCross(Strategy):\n def init(self):\n price = self.data.Close\n self.ma1 = self.I(SMA, price, 10)\n self.ma2 = self.I(SMA, price, 20)\n\n def next(self):\n if crossover(self.ma1, self.ma2):\n self.buy()\n elif crossover(self.ma2, self.ma1):\n self.sell()\n\n\nbt = Backtest(GOOG, SmaCross, commission=.002,\n exclusive_orders=True)\nstats = bt.run()\nbt.plot()\n```\n\nResults in:\n\n```text\nStart 2004-08-19 00:00:00\nEnd 2013-03-01 00:00:00\nDuration 3116 days 00:00:00\nExposure Time [%] 94.27\nEquity Final [$] 68935.12\nEquity Peak [$] 68991.22\nReturn [%] 589.35\nBuy & Hold Return [%] 703.46\nReturn (Ann.) [%] 25.42\nVolatility (Ann.) [%] 38.43\nSharpe Ratio 0.66\nSortino Ratio 1.30\nCalmar Ratio 0.77\nMax. Drawdown [%] -33.08\nAvg. Drawdown [%] -5.58\nMax. Drawdown Duration 688 days 00:00:00\nAvg. Drawdown Duration 41 days 00:00:00\n# Trades 93\nWin Rate [%] 53.76\nBest Trade [%] 57.12\nWorst Trade [%] -16.63\nAvg. Trade [%] 1.96\nMax. Trade Duration 121 days 00:00:00\nAvg. Trade Duration 32 days 00:00:00\nProfit Factor 2.13\nExpectancy [%] 6.91\nSQN 1.78\n_strategy SmaCross(n1=10, n2=20)\n_equity_curve Equ...\n_trades Size EntryB...\ndtype: object\n```\n[![plot of trading simulation](https://i.imgur.com/xRFNHfg.png)](https://kernc.github.io/backtesting.py/#example)\n\nFind more usage examples in the [documentation].\n\n\nFeatures\n--------\n* Simple, well-documented API\n* Blazing fast execution\n* Built-in optimizer\n* Library of composable base strategies and utilities\n* Indicator-library-agnostic\n* Supports _any_ financial instrument with candlestick data\n* Detailed results\n* Interactive visualizations\n\n![xkcd.com/1570](https://imgs.xkcd.com/comics/engineer_syllogism.png)\n\n\nAlternatives\n------------\nSee [alternatives.md] for a list of alternative Python\nbacktesting frameworks and related packages.\n\n[alternatives.md]: https://github.com/kernc/backtesting.py/blob/master/doc/alternatives.md\n\n\n",
"bugtrack_url": null,
"license": "AGPL-3.0",
"summary": "Backtest trading strategies in Python",
"version": "0.3.3",
"project_urls": {
"Documentation": "https://kernc.github.io/backtesting.py/doc/backtesting/",
"Homepage": "https://kernc.github.io/backtesting.py/",
"Source": "https://github.com/kernc/backtesting.py/",
"Tracker": "https://github.com/kernc/backtesting.py/issues"
},
"split_keywords": [
"algo",
"algorithmic",
"ashi",
"backtest",
"backtesting",
"bitcoin",
"bokeh",
"bonds",
"candle",
"candlestick",
"cboe",
"chart",
"cme",
"commodities",
"crash",
"crypto",
"currency",
"doji",
"drawdown",
"equity",
"etf",
"ethereum",
"exchange",
"finance",
"financial",
"forecast",
"forex",
"fund",
"futures",
"fx",
"fxpro",
"gold",
"heiken",
"historical",
"indicator",
"invest",
"investing",
"investment",
"macd",
"market",
"mechanical",
"money",
"oanda",
"ohlc",
"ohlcv",
"order",
"price",
"profit",
"quant",
"quantitative",
"rsi",
"silver",
"stocks",
"strategy",
"ticker",
"trader",
"trading",
"tradingview",
"usd"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9741fb91644ac11bfcd72212fcd187c5388d402b4f8f9ed4a35d0cd61c2c8e1a",
"md5": "7efd9206aa6c08eaf58e017e1bd4a293",
"sha256": "b2511993ae16596c06d3cfd3d42a662ca69d51a95a604b85705fb1a900e3a798"
},
"downloads": -1,
"filename": "Backtesting-0.3.3.tar.gz",
"has_sig": false,
"md5_digest": "7efd9206aa6c08eaf58e017e1bd4a293",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 175495,
"upload_time": "2021-12-13T01:36:44",
"upload_time_iso_8601": "2021-12-13T01:36:44.892078Z",
"url": "https://files.pythonhosted.org/packages/97/41/fb91644ac11bfcd72212fcd187c5388d402b4f8f9ed4a35d0cd61c2c8e1a/Backtesting-0.3.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2021-12-13 01:36:44",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kernc",
"github_project": "backtesting.py",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "backtesting"
}