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

Telemetry

Every install sends one anonymous ping a day: an anonymous install id, the ManifoldBT version, your OS, CPU architecture, whether it is a CUDA build, your Python major version, and Community or Pro. No email, no license key, no strategy, no data, no results. It tells us which versions and platforms are still in use, so we know what we can stop supporting.

Turn it off with either of:

export MANIFOLDBT_NO_TELEMETRY=1
export DO_NOT_TRACK=1

CI runners are skipped automatically. Pro license validation is a separate mechanism and is not affected by these variables.

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

Uploaded CPython 3.9+Windows x86-64

manifoldbt-0.17.2-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.2-cp39-abi3-musllinux_1_2_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9+macOS 11.0+ ARM64

manifoldbt-0.17.2-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.2-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: manifoldbt-0.17.2-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.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5f3d49bf05532443c593c07ee70e7ffe9c7475acc009f3a0fe4630c31242326a
MD5 52d8678c299d1390a9704734e34791eb
BLAKE2b-256 256c7016dc494c8ba72db1410fcc6c8753cf7fa83786b3a36eb0c14db9a6a872

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.17.2-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ccbc04533cd80d0751c7869a42cb165f3bb796f535e6e65e6005e5e3d65f9338
MD5 543f0dfbdf6234260a6468c690bc0d0e
BLAKE2b-256 a6f78307b3dd07545aa7382eaae2d49134837444bd38c27671e87e73e28dee7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.17.2-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ff0f311f4dbff9f8293bf662f73b04a33eee72bc45b7ee4fdd45779e1eec3831
MD5 683b2f484d4a94d9cba5e5914e5d30d4
BLAKE2b-256 68651d1bb1e25a8d095fad13f90f196f93321d312e63593c001f1da2191ced34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.17.2-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 364cb6467f509884e4b9147e3498f568fb1fa2ace5965c20a298e63c1ef865b1
MD5 ffe4ea78468dc25426f3b1ae380ccf0f
BLAKE2b-256 441a49cfd5db91cdd7188928e385bdb3a8f47019147c977cf1f935d68bb81d77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.17.2-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5ef71e144e9ab54faae9dfba67dd88af00122c6619849d92fffdeba786c4d102
MD5 b4e2e45517f35e3d2797c5e89944e075
BLAKE2b-256 6cce80bf0609f54201f5cc8b25bd9fbe8115ea0523d98f51befcc846b9e519a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.17.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e92abcf731cb970e3732b98684271c756191982a8ea4188d0c2369bc7875cd71
MD5 24d33b3028f657dffc6f519348856531
BLAKE2b-256 86efd286254df326ba4e0816f83585b83e125dec37f28a78c5e4ab4c60d34aea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.17.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a40799912610a0ffc7f7cb61e4e1ee33343f84b7255da72c6d9a3d7f62145932
MD5 92d2232f00fdf93858ecb550da9d4d79
BLAKE2b-256 73a7b6d1a7a745c995cfe2ec234c2f72793ab0d5ce5758318935707e7eaa58fc

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

This release

0.17.2 This release

7 files

0.17.1

7 files

0.17.0

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