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.15.0-cp39-abi3-win_amd64.whl (8.4 MB view details)

Uploaded CPython 3.9+Windows x86-64

manifoldbt-0.15.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.15.0-cp39-abi3-musllinux_1_2_aarch64.whl (7.9 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

manifoldbt-0.15.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.15.0-cp39-abi3-manylinux_2_28_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

manifoldbt-0.15.0-cp39-abi3-macosx_11_0_arm64.whl (7.3 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

manifoldbt-0.15.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.15.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: manifoldbt-0.15.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 8.4 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.15.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 596f2f8baf6869fe15aec4096e7a3134dc1ddc3c31f8e6e5108cc36f3261b326
MD5 81371a393f0b025bcdcc279348b73a22
BLAKE2b-256 c661ae239819a629a2d52e4e7c5f45c1c83b62ac386dee56ede34477ca5c6b47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.15.0-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8bf89c91873dcafaaee5fe91a5d490264fa2b5032e35a9914832293d18a41eed
MD5 ed67d3df7b61fda7ec3431165b5f3995
BLAKE2b-256 6303d60ec566184b7f6b68e57ab01b03d5a0b32d2498dec44583bbf2c69e2eb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.15.0-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d71adaed83c82b51d874c0b04a7326b4384b7f78b6a0ae9782d07d19490f51a7
MD5 36345e00c3ea089ecd4490df6dcebdd6
BLAKE2b-256 44aa13fd9ce9af9c57136069b2fc66274058a5fa1bda85e44da064e89d5f6f81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.15.0-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0c756d21798a246480109bf3bec2b4893d8eddada3383e8605d022659430bda7
MD5 597b5019e40563a0116be8f6ac08262a
BLAKE2b-256 fd5022531948b3d5d3ddb0fb9a407549647bf2ab4589f787089252464d8fd580

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.15.0-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 620fb5e5097fc0804c025c0e8622fe67e87b7225e19647165373b283859f9e43
MD5 b66fef9fdf58946854b320c6d140df18
BLAKE2b-256 50850e513122f8ac75cc6aba14042439e5a077b1112fb034365dfae1fba4daae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.15.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f50772b0f2e37d79eb4e3a6cefdfc1b1f80597ce9b15e1fcc9c65a83e82be51b
MD5 fa0c71da7c90ed7befcbc739e4754e8c
BLAKE2b-256 6e31ce40739850f7f75914493b46669e17f3d6627c76dd613614b5278cd3c43a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.15.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 42d1717221e31b30af55ed2c4986d7357b74bd035d28f7062087229a45bd9051
MD5 d794e06da0f977872c83ca3d266310af
BLAKE2b-256 573f5b43631d239091282e4fff29db0f415eea73a5fe43d92def3e99e9339844

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

0.17.0

7 files

0.16.0

7 files

This release

0.15.0 This release

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