Skip to main content

ManifoldBT logo

ManifoldBT
Rust-powered backtesting engine for quantitative research

Discord

Website · Documentation · Examples


ManifoldBT is a Python backtesting library with a Rust core. Strategies are written in a fluent Python DSL, compiled to a vectorized Rust expression graph, then run through a sequential fill simulation with realistic fees, slippage, funding and look-ahead protection. Vectorized speed with event-driven execution realism.

Why ManifoldBT

  • Fast — 500K bars in ~13 ms. 353x faster than vectorbt, ~3,500x faster than backtrader.
  • Expressive — fluent DSL with 30+ indicators, conditional logic, cross-asset references
  • Rigorous — Monte Carlo, walk-forward, parameter sweeps, lookahead detection, exposure diagnostics
  • Portablepip install, no Rust toolchain needed. Works on Python 3.9+.

Installation

pip install manifoldbt              # engine only: backtests, sweeps, metrics
pip install manifoldbt[plot]        # + interactive charts and native windows (show=True)
pip install manifoldbt[all]         # everything: plots, windows, PNG export, pandas/polars

The base install stays light (no browser, no GUI) for scripts, servers and CI. [plot] adds plotly and a native window backend; [all] also pulls kaleido for static PNG/SVG export (which bundles a headless Chromium).

Quick Start

import manifoldbt as mbt
from manifoldbt.indicators import close, ema
from manifoldbt.helpers import time_range, Interval, Slippage

fast = ema(close, 12)
slow = ema(close, 26)

strategy = (
    mbt.Strategy.create("ema_crossover")
    .signal("fast", fast)
    .signal("slow", slow)
    .signal("signal", mbt.when(fast > slow, mbt.lit(1.0), mbt.lit(-1.0)))
    .size(mbt.col("signal") * mbt.lit(0.25))
)

start, end = time_range("2022-01-01", "2025-01-01")

config = mbt.BacktestConfig(
    universe=[1],
    time_range_start=start,
    time_range_end=end,
    bar_interval=Interval.hours(12),
    initial_capital=10_000,
    execution=mbt.ExecutionConfig(allow_short=True, max_position_pct=0.5),
    fees=mbt.FeeConfig.binance_perps(),
    slippage=Slippage.fixed_bps(2),
    warmup_bars=30,
)

store = mbt.ingest(provider="binance", symbol="BTCUSDT", symbol_id=1,
                   start="2022-01-01T00:00:00Z", end="2025-01-01T00:00:00Z", interval="1h")
result = mbt.run(strategy, config, store)
print(result.summary())

Loading data

Bring your own data, or pull it from a built-in connector — both return a DataStore ready for mbt.run(...).

CSV — free on all tiers, auto-detects standard / MetaTrader 4 / MetaTrader 5:

store = mbt.import_csv("EURUSD_1m.csv", symbol="EURUSD", symbol_id=1,
                       interval="1m", asset_class="forex")

Exchange connectors — Binance, Bybit, Hyperliquid, dYdX, Bitstamp (free); Databento, Massive (Pro):

store = mbt.ingest(provider="binance", symbol="BTCUSDT", symbol_id=1,
                   start="2024-01-01T00:00:00Z", end="2025-01-01T00:00:00Z")

Or from the CLI:

manifoldbt import-csv data.csv --symbol EURUSD --symbol-id 1 --interval 1m
manifoldbt ingest --provider binance --symbol BTCUSDT --symbol-id 1 --start ... --end ...

Examples

# Example What it shows
00 Template Minimal starting point
01 Trend Following EMA crossover, volume filter, stop-loss
02 Mean Reversion EMA crossover with parameter sweep
03 Multi-Asset Momentum Cross-asset signals
04 Linear Regression Regression-based signal
05 Statistical Arbitrage Pairs trading, spread z-score
06 Full Visualization Tearsheet and charts
07 Walk-Forward Out-of-sample validation
08 2D Sweep Parameter grid heatmap
09 3D Surface Parameter surface plot
10 Monte Carlo Permutation-based robustness
11 Portfolio Multi-strategy portfolio
12 Diagnostics Lookahead & exposure safety checks
13 Stochastic Simulation SDE path simulation (GBM, Heston, …)
14 Multi-Timeframe Combining signals across timeframes
15 Cross-Exchange Signal on one venue, execute on another
16 Exogenous Data External series (e.g. hashrate) as a signal
17 Per-Venue Fees Per-venue funding & borrow costs
18 CSV Import Load OHLCV from CSV (standard / MT4 / MT5)

Performance

EMA(12/26) + RSI(14) on 500K synthetic 1-min bars (manifoldbt/vectorbt: median of 5 runs; backtrader: median of 3):

Engine Time vs ManifoldBT
ManifoldBT (Rust) 13 ms 1x
vectorbt (NumPy) 4,662 ms 353x slower
backtrader (Python) 46,944 ms ~3,556x slower

ManifoldBT and vectorbt produce identical results (−30.23% vs −30.24% return, same trade count); backtrader's event-driven fills give a different PnL.

Reproduce: python benchmarks/bench_vs_competitors.py --rows 500000 --runs 5

How it compares

ManifoldBT vectorbt backtrader Nautilus
Engine Rust (vectorized + sequential fills) Numba/NumPy (vectorized) Python (event-driven) Rust/Python (event-driven)
Execution realism¹ High Basic High High
Focus Backtesting + research Backtesting at scale Backtest + live Backtest + live (production)

¹ fees, slippage, funding, partial fills, look-ahead detection.

On GPU (Pro), the Monte Carlo engine runs ~36x faster than the all-core CPU path (SDE path simulation, RTX 3090, f32).

Documentation

Full API reference, indicator list, configuration guide, and best practices:

www.manifoldbt.com/docs/documentation.html

Community vs Pro

Community Pro
Output resolution Daily 1m, 5m, 15m, 1h
Monte Carlo 1K sims Unlimited
Walk-Forward - Anchored + Rolling
Parameter Stability - Yes
Crypto connectors (Binance, Bybit, Hyperliquid) Yes Yes
Databento & Massive connectors - Yes
Safety checks (lookahead, exposure) - Yes
Tearsheets & export - Yes

License

Apache 2.0 with Commons Clause. The source is available, free to use, modify and self-host. Reselling the software or offering it as a paid hosted service is not permitted. See LICENSE for the full text.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

manifoldbt-0.17.0-cp39-abi3-win_amd64.whl (8.5 MB view details)

Uploaded CPython 3.9+Windows x86-64

manifoldbt-0.17.0-cp39-abi3-musllinux_1_2_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ x86-64

manifoldbt-0.17.0-cp39-abi3-musllinux_1_2_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

manifoldbt-0.17.0-cp39-abi3-manylinux_2_34_x86_64.whl (8.3 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.34+ x86-64

manifoldbt-0.17.0-cp39-abi3-manylinux_2_28_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

manifoldbt-0.17.0-cp39-abi3-macosx_11_0_arm64.whl (7.4 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

manifoldbt-0.17.0-cp39-abi3-macosx_10_12_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file manifoldbt-0.17.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: manifoldbt-0.17.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 8.5 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for manifoldbt-0.17.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 74c2d5eaa9e7ec9ee4d383c0f7587a9869f694c0f0c296006f29d32e47e0e613
MD5 b0e8a847e9a96d86d49b13f83fc747e5
BLAKE2b-256 790278e04e98784474037966d76e581f6c3851c075c89d68906fd95319e2280b

See more details on using hashes here.

File details

Details for the file manifoldbt-0.17.0-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for manifoldbt-0.17.0-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e499ed133b922df8f685e22e1dc34971a7bdcc9e568cc6f84c1b4d78c838f9c8
MD5 132cb2096c1b007b5946dbbe39097e25
BLAKE2b-256 482ee8a56987ed3ae3200f68e94bbdeab81586cf106cda140224a29cccd9965d

See more details on using hashes here.

File details

Details for the file manifoldbt-0.17.0-cp39-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for manifoldbt-0.17.0-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 850819f0a79a324dad1ad6082c8ae79724fe98389efb4a574c78f012014b50dc
MD5 d116bbb3c7bb9af04c837bf773a01c74
BLAKE2b-256 43b70e0ca52db8ed37946b94b080559e2194b9cd98f0a552b93968a467928dee

See more details on using hashes here.

File details

Details for the file manifoldbt-0.17.0-cp39-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for manifoldbt-0.17.0-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 843a56b9b76f36a02d45d320c7fa2a6a8155f3fc0e3f383ca24b21943520bcab
MD5 ac0c3f2f392b4be17fc7c4fd935a3e4a
BLAKE2b-256 f58032cebf4aa87d0f0f408bd6b079d3429f6cf61760b892bf03c94115167f38

See more details on using hashes here.

File details

Details for the file manifoldbt-0.17.0-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for manifoldbt-0.17.0-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c91e173914c98fd114e1ee73f83e9656cd63f45fb0ebca39e45aa473cbba1d8a
MD5 04618792299e5047a280bf2bd389372f
BLAKE2b-256 1e0bf1a5e4d385491350653899cf53a7421de2fd105479492ec22a3823ee5238

See more details on using hashes here.

File details

Details for the file manifoldbt-0.17.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for manifoldbt-0.17.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 340905d53104a24c1daf514d7aa05a90abecc570c214112f76a9a37faab54ee3
MD5 7e33d4afd1db91f655a45e747a4bff8a
BLAKE2b-256 41c5be87b28e70f8ec51c0881837b305d5eb3f0630025f15e09c6b99ea57700c

See more details on using hashes here.

File details

Details for the file manifoldbt-0.17.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for manifoldbt-0.17.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8d982c173c2e71584a0114e04c5d53c6aa66b8e6b3a1f77dd22c1aafaeb90e5a
MD5 34de2ab99d5c6257100fe023857ec0e2
BLAKE2b-256 c22fa2c9773430b8c49ce5c4bd935a9f317c518e05ee000d87985cef403d5509

See more details on using hashes here.

Release history Release notifications | RSS feed

0.24.0

7 files

0.23.0

7 files

0.22.0

7 files

0.21.0

7 files

0.20.1

7 files

0.20.0

7 files

0.19.1

7 files

0.19.0

7 files

0.18.0

7 files

0.17.3

7 files

0.17.2

7 files

0.17.1

7 files

This release

0.17.0 This release

7 files

0.16.0

7 files

0.15.0

7 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