Skip to main content

No project description provided

Project description

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.

Project details


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

Uploaded CPython 3.9+Windows x86-64

manifoldbt-0.14.1-cp39-abi3-musllinux_1_2_x86_64.whl (8.4 MB view details)

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

manifoldbt-0.14.1-cp39-abi3-musllinux_1_2_aarch64.whl (7.9 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

manifoldbt-0.14.1-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.14.1-cp39-abi3-manylinux_2_28_aarch64.whl (7.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9+macOS 11.0+ ARM64

manifoldbt-0.14.1-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.14.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: manifoldbt-0.14.1-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/6.1.0 CPython/3.13.14

File hashes

Hashes for manifoldbt-0.14.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 fade027c9b5902890b3282787c3bc1082ed72a364348d4485b7f3d062efb97a1
MD5 cca3f1734c0da5fdc8a50cf55446078f
BLAKE2b-256 caf6543bf4e0f3a285e2b0cfb08834051971c9c1d221184f4163da1d535812de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.14.1-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cbccc30ff067fb61f15fcb9adcbb1ea5df7f0a5b8490fa78ac568c3a4062ba7c
MD5 92c105d147f863a976733824f9fedf94
BLAKE2b-256 0225992a0dad09055c705358eda79c4a5a4d42f73fd9226d8bf7195441bb87a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.14.1-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c7a8b101f0882acd47f9b96a4102e49bbb10e064c30d31b9b2c77e226fd207d3
MD5 58c1792cc4b1d257ae09953ac3660e5a
BLAKE2b-256 1ba65635d5b81db9e0d5042f2b98b1522bbbe70348ad6270090ba7721634c94b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.14.1-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 38284b82c92cf09e6a3cab46e7982feba634f202bb1047211256eb204af5e74d
MD5 1cf4b369976360de337d77bad3f0e2e1
BLAKE2b-256 8cc35b21745248b4a493744de7f7b9c332007854dd9c7a3573f904fc73639964

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.14.1-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a1feeecc59f8434d4e6954e2c2a7168273c7fe0cf0c17a69e06f8690ce27586f
MD5 ad5f5ff741f4b8d9cfa2fb8a932704a3
BLAKE2b-256 3ba6893a09d19f03a03b123eb7e930c844be70cf38c6b14a8d7e82eb33c2d6ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.14.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2207c0c578f37a5162db6d44560b1533e15b7c283c00f4fb2a547eacae4f3f61
MD5 cbbefcc931dde0856d21daddbf0b6793
BLAKE2b-256 7b0ac68a72e07d1e81ad147ac74649368950c5841bb37ecdff616f9a9496f175

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.14.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8271ec43358219474d576e677a3b7fdde8dc867a048b5bf3d5e5dcfb038361b5
MD5 4277c7500d64f565aca3ab047bde35fb
BLAKE2b-256 12c8b8ceb39ba62ad174c0267c690212479b652020e04c1b3a168356ba2f3fff

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page