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) andRollOver(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
- Project reports and decisions:
reports/ - Original backtrader repository: https://github.com/mementum/backtrader
- Blog: Backtrader Blog
- Docs: Full Documentation — written for upstream; the removed integrations above no longer apply
- Indicators Reference: List of Built-in Indicators
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__inbacktrader/version.pyrather 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~/.pypircor passed asTWINE_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)
| File | Size | Uploaded | |
|---|---|---|---|
| slim_backtrader-2.0.0.tar.gz | 916.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|