Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 2.2.0 instead.

slim-backtrader

A fork of backtrader, slimmed down and brought up to date with modern Python.

Aims of this project:

  • Slim down unnecessary features
  • Improve performance
  • Update aged implementations

The work so far has removed every integration that depended on an abandoned package, deleted the Python 2 compatibility layer, and moved the project onto a standard PEP 621 build. See changelog.txt for the record and reports/ for the detail.

Feel free to contribute!


Installation

pip install slim-backtrader

The distribution is named slim-backtrader; the import name stays backtrader, so existing strategy code keeps working unchanged:

import backtrader as bt

Upstream owns backtrader on PyPI and a name there can never be reused, hence the different distribution name. The flip side is that this fork and upstream cannot be installed side by side — both claim the backtrader import name. Uninstall one before installing the other.

The engine has no third-party runtime dependencies. Optional features are installed as extras:

pip install "slim-backtrader[plotting]"    # matplotlib, for cerebro.plot()
pip install "slim-backtrader[pandas]"      # pandas >= 2.2, for the PandasData feed
pip install "slim-backtrader[online]"      # requests, for the Yahoo online feed
pip install "slim-backtrader[calendars]"   # pandas_market_calendars
pip install "slim-backtrader[talib]"       # TA-Lib indicator bindings

To work on the fork itself, install it editable from a clone instead:

pip install -e ".[dev]"         # the test suite and tooling

Python Compatibility

Python >= 3.13. Older interpreters are not supported: the compatibility shims that made 2.7 and early 3.x work have been removed, and the code uses zoneinfo from the standard library rather than pytz.

Features

  • Data feeds
    • CSV files: the backtrader format, a fully configurable generic reader, SierraChart and MetaTrader 4 exports, and Yahoo CSV downloads
    • Yahoo Finance online (needs requests)
    • pandas DataFrames
    • Composite feeds: Chainer (concatenate) and RollOver (futures rolling)
  • Data management
    • Filters: Heikin-Ashi, Renko bricks, session filtering and filling, calendar-day filling, day-step splitting
    • Multiple data feeds and strategies, multiple simultaneous timeframes
    • Integrated resampling and replaying
  • Backtesting modes — step-by-step (next) or vectorised (runonce)
  • Indicators — 122 built in, plus optional TA-Lib bindings and an easy path to writing your own
  • Analyzers — TimeReturn, Sharpe, SQN, DrawDown, TradeAnalyzer, VWR, Calmar, PeriodStats, Transactions and more
  • Broker simulation — Market, Close, Limit, Stop, StopLimit, StopTrail, StopTrailLimit, OCO and bracket orders, slippage, volume-based filling, continuous cash adjustment for futures-like instruments
  • Position sizing via Sizers, and order_target_size/value/percent
  • Cheat-on-close and cheat-on-open modes
  • Schedulers and trading calendars
  • Plotting (requires matplotlib)

Removed in 2.0.0

Interactive Brokers, VisualChart and Oanda (live trading and their data feeds), the pyfolio analyzer, and the blaze, InfluxDB and Quandl feeds. Each depended on a package that is abandoned, Python-2-only, or serves an API that no longer exists. See reports/DECISIONS.md.

Plotting is non-interactive

cerebro.plot() renders through the Agg backend and does not open a window. It returns the figures, so save them yourself:

figs = cerebro.plot(iplot=False)
figs[0][0].savefig("result.png")

Running the tests

conda env create -f environment.yml
conda activate slim-backtrader
pip install -e ".[dev]"
pytest                       # 254 tests, ~50s
pytest --cov                 # with coverage

Documentation

Releasing

Publishing is a manual, maintainer-only step — there is no CI and no automated release. From a clean checkout of master:

conda activate slim-backtrader
pytest                              # must be green before anything else
rm -rf dist build                   # stale artefacts get uploaded otherwise
python -m build                     # writes dist/*.tar.gz and dist/*.whl
twine check dist/*                  # metadata and README render
twine upload --repository testpypi dist/*      # dry run on TestPyPI first
twine upload dist/*                            # the real thing

Notes that save a wasted upload:

  • A version can only be uploaded once. PyPI rejects a re-upload of the same version even after a delete, so bump __version__ in backtrader/version.py rather than retrying. Everything else — the version in the wheel, the sdist and the metadata — is derived from that one string.
  • Authenticate with a PyPI API token (username __token__), stored in ~/.pypirc or passed as TWINE_USERNAME / TWINE_PASSWORD. Scope the token to this project once it exists.
  • Verify the built artefacts before uploading, in a throwaway environment: pip install dist/slim_backtrader-*.whl && python -c "import backtrader".

Version Numbering

Plain semantic versioning, X.Y.Z, starting at 2.0.0:

  • X: Major version — incompatible API changes. Removing features is the point of this fork, so expect these.
  • Y: Minor version — new functionality, backwards compatible.
  • Z: Patch — bug fixes and documentation.

Upstream backtrader used a fourth digit for the number of built-in indicators (1.9.78.123). That digit is retired as of 2.0.0, and __btversion__ is now a 3-tuple.

License

GPL-3.0-or-later, inherited from upstream backtrader.

Metadata

Release files for slim-backtrader 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for slim-backtrader 2.0.0
File Size Uploaded
slim_backtrader-2.0.0.tar.gz 916.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for slim-backtrader 2.0.0
File Interpreter ABI Platform
slim_backtrader-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / slim_backtrader-2.0.0.tar.gz

Download URL slim_backtrader-2.0.0.tar.gz
Size 916.6 kB
Tags Source
SHA-256 checksum
How to use checksums
11cf25aec6d33dd657a1d762c0cba920038c886ab6ccb155459e3949bf6e7f42
BLAKE2b-256 checksum
How to use checksums
2f43931ace9b582504abb4db0342addf93f6f766db264551eccd42b85ae89b30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release files / slim_backtrader-2.0.0-py3-none-any.whl

Download URL slim_backtrader-2.0.0-py3-none-any.whl
Size 333.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
633bdf27612574122d787d2b2aa5a4d53d3262b2de8bb40e79f0cf547094f234
BLAKE2b-256 checksum
How to use checksums
5ccb903641371bfe156269b16bdf354aa94602fc652efb23e6b8a5baf4afa515
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release history Release notifications | RSS feed

2.2.0

2 release files

2.1.0

2 release files

2.0.1

2 release files

This release

2.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page