[![](https://raw.githubusercontent.com/LUCIT-Systems-and-Development/lucit-backtesting/master/images/logo/lucit-backtesting.png)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/)
lucit-backtesting - 'backtesting.py' maintained by LUCIT
========================================================
[![GitHub Release](https://img.shields.io/github/release/LUCIT-Systems-and-Development/lucit-backtesting.svg?label=github)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/releases)
[![PyPi Release](https://img.shields.io/pypi/v/lucit-backtesting?color=blue)](https://pypi.org/project/lucit-backtesting/)
[![Supported Python Version](https://img.shields.io/pypi/pyversions/lucit_backtesting.svg)](https://www.python.org/downloads/)
[![License](https://img.shields.io/badge/license-LSOSL-blue)](https://lucit-backtesting.docs.lucit.tech/license.html)
[![PyPi Downloads](https://pepy.tech/badge/lucit-backtesting)](https://pepy.tech/project/lucit-backtesting)
[![PyPi Downloads](https://pepy.tech/badge/lucit-backtesting/month)](https://pepy.tech/project/lucit-backtesting)
[![PyPi Downloads](https://pepy.tech/badge/lucit-backtesting/week)](https://pepy.tech/project/lucit-backtesting)
[![PyPI - Status](https://img.shields.io/pypi/status/unicorn_binance_local_depth_cache.svg)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/issues)
[![CodeQL](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/actions/workflows/codeql-analysis.yml)
[![Read the Docs](https://img.shields.io/badge/read-%20docs-yellow)](https://lucit-backtesting.docs.lucit.tech/)
[![Github](https://img.shields.io/badge/source-github-cbc2c8)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting)
[![Telegram](https://img.shields.io/badge/community-telegram-41ab8c)](https://t.me/unicorndevs)
[![Get Free Professional Support](https://img.shields.io/badge/chat-lucit%20support-004166)](https://www.lucit.tech/get-support.html)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/kernc?color=pink)](https://github.com/sponsors/kernc)
Backtest trading strategies with Python.
Kudos to ***Zach Lûster*** for the original project [`kernc/backtesting.py`](https://github.com/kernc/backtesting.py)
which he built and maintained for 5 years.
We at [LUCIT](https://www.lucit.tech) like to use `backtesting.py` with our customers in smaller projects.
Unfortunately the project is missing important updates, and therefore we decided to fork the project and release new
stable versions.
We are happy to maintain [our forked repository](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting)
and take care of code reviews, pull requests and releases and hope for good support from the community!
Installation
------------
You can have either `backtesting.py` or `lucit-backtesting` installed, but not both!
$ pip uninstall backtesting
$ pip install lucit-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:
[![Backtesting HTML result](https://raw.githubusercontent.com/LUCIT-Systems-and-Development/lucit-backtesting/master/images/screenshot_html_result.png)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting)
```
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
Kelly Criterion 0.6134
_strategy SmaCross(n1=10, n2=20)
_equity_curve Equ...
_trades Size EntryB...
dtype: object
```
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)
Bugs
----
Before [reporting bugs](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/issues) or posting to the
[discussion board](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/discussions),
please read [contributing guidelines](https://lucit-backtesting.docs.lucit.tech/contributing.html),
particularly the section about crafting useful bug reports and ```` ``` ````-fencing your code. We thank you!
Raw data
{
"_id": null,
"home_page": "https://github.com/LUCIT-Systems-and-Development/lucit-backtesting",
"name": "lucit-backtesting",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"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, simulation, stocks, strategy, ticker, trader, trading, tradingview, usd",
"author": "LUCIT Systems and Development",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/a7/38/50a71f0ad311be2149d96409fb9c6dcf3d4900910d818a4d705d2d86118c/lucit-backtesting-1.0.0.tar.gz",
"platform": null,
"description": "[![](https://raw.githubusercontent.com/LUCIT-Systems-and-Development/lucit-backtesting/master/images/logo/lucit-backtesting.png)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/)\n\nlucit-backtesting - 'backtesting.py' maintained by LUCIT\n========================================================\n\n[![GitHub Release](https://img.shields.io/github/release/LUCIT-Systems-and-Development/lucit-backtesting.svg?label=github)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/releases)\n[![PyPi Release](https://img.shields.io/pypi/v/lucit-backtesting?color=blue)](https://pypi.org/project/lucit-backtesting/)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/lucit_backtesting.svg)](https://www.python.org/downloads/)\n[![License](https://img.shields.io/badge/license-LSOSL-blue)](https://lucit-backtesting.docs.lucit.tech/license.html)\n[![PyPi Downloads](https://pepy.tech/badge/lucit-backtesting)](https://pepy.tech/project/lucit-backtesting)\n[![PyPi Downloads](https://pepy.tech/badge/lucit-backtesting/month)](https://pepy.tech/project/lucit-backtesting)\n[![PyPi Downloads](https://pepy.tech/badge/lucit-backtesting/week)](https://pepy.tech/project/lucit-backtesting)\n[![PyPI - Status](https://img.shields.io/pypi/status/unicorn_binance_local_depth_cache.svg)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/issues)\n[![CodeQL](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/actions/workflows/codeql-analysis.yml)\n[![Read the Docs](https://img.shields.io/badge/read-%20docs-yellow)](https://lucit-backtesting.docs.lucit.tech/)\n[![Github](https://img.shields.io/badge/source-github-cbc2c8)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting)\n[![Telegram](https://img.shields.io/badge/community-telegram-41ab8c)](https://t.me/unicorndevs)\n[![Get Free Professional Support](https://img.shields.io/badge/chat-lucit%20support-004166)](https://www.lucit.tech/get-support.html)\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/kernc?color=pink)](https://github.com/sponsors/kernc)\n\nBacktest trading strategies with Python.\n\nKudos to ***Zach L\u00fbster*** for the original project [`kernc/backtesting.py`](https://github.com/kernc/backtesting.py) \nwhich he built and maintained for 5 years. \n\nWe at [LUCIT](https://www.lucit.tech) like to use `backtesting.py` with our customers in smaller projects. \nUnfortunately the project is missing important updates, and therefore we decided to fork the project and release new \nstable versions. \n\nWe are happy to maintain [our forked repository](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting) \nand take care of code reviews, pull requests and releases and hope for good support from the community!\n\nInstallation\n------------\nYou can have either `backtesting.py` or `lucit-backtesting` installed, but not both!\n\n $ pip uninstall backtesting\n $ pip install lucit-backtesting\n\n\nUsage\n-----\n```\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[![Backtesting HTML result](https://raw.githubusercontent.com/LUCIT-Systems-and-Development/lucit-backtesting/master/images/screenshot_html_result.png)](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting)\n\n\n```\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\nKelly Criterion 0.6134\n_strategy SmaCross(n1=10, n2=20)\n_equity_curve Equ...\n_trades Size EntryB...\ndtype: object\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\nBugs\n----\nBefore [reporting bugs](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/issues) or posting to the\n[discussion board](https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/discussions),\nplease read [contributing guidelines](https://lucit-backtesting.docs.lucit.tech/contributing.html), \nparticularly the section about crafting useful bug reports and ```` ``` ````-fencing your code. We thank you!\n\n",
"bugtrack_url": null,
"license": "AGPL-3.0",
"summary": "Backtest trading strategies in Python",
"version": "1.0.0",
"project_urls": {
"Author": "https://www.lucit.tech",
"Changes": "https://lucit-backtesting.docs.lucit.tech/changelog.html",
"Documentation": "https://lucit-backtesting.docs.lucit.tech",
"Get Support": "https://www.lucit.tech/get-support.html",
"Homepage": "https://github.com/LUCIT-Systems-and-Development/lucit-backtesting",
"Issue Tracker": "https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/issues",
"License": "https://lucit-backtesting.docs.lucit.tech/license.html",
"Source": "https://github.com/LUCIT-Systems-and-Development/lucit-backtesting",
"Telegram": "https://t.me/unicorndevs",
"Wiki": "https://github.com/LUCIT-Systems-and-Development/lucit-backtesting/wiki"
},
"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",
" simulation",
" stocks",
" strategy",
" ticker",
" trader",
" trading",
" tradingview",
" usd"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e8528c7bd167725b8a6ba6a61119fb559245a8086b3a89d8ef77e978e5c6b86b",
"md5": "55399ca96333affbee551fd792673a9f",
"sha256": "f62bd3bcf1cc323ef9b860c5976bac679caa50d20b9a43c97a669b9ed099fabe"
},
"downloads": -1,
"filename": "lucit_backtesting-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "55399ca96333affbee551fd792673a9f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 176218,
"upload_time": "2024-06-06T21:38:02",
"upload_time_iso_8601": "2024-06-06T21:38:02.684819Z",
"url": "https://files.pythonhosted.org/packages/e8/52/8c7bd167725b8a6ba6a61119fb559245a8086b3a89d8ef77e978e5c6b86b/lucit_backtesting-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a73850a71f0ad311be2149d96409fb9c6dcf3d4900910d818a4d705d2d86118c",
"md5": "d51137ae9c2a3e80ffd087ecbf16ab02",
"sha256": "84faf76ab53a15ad707ae0a1570f9db0536a70291a0eedfae000790a3c70daa8"
},
"downloads": -1,
"filename": "lucit-backtesting-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "d51137ae9c2a3e80ffd087ecbf16ab02",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 611896,
"upload_time": "2024-06-06T21:38:05",
"upload_time_iso_8601": "2024-06-06T21:38:05.519815Z",
"url": "https://files.pythonhosted.org/packages/a7/38/50a71f0ad311be2149d96409fb9c6dcf3d4900910d818a4d705d2d86118c/lucit-backtesting-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-06 21:38:05",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "LUCIT-Systems-and-Development",
"github_project": "lucit-backtesting",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "lucit-backtesting"
}