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 compiles Python strategy definitions into an optimized Rust expression graph. Write strategies in a fluent Python DSL — execute them on a vectorized Rust engine.

Why ManifoldBT

  • Fast — 500K bars in ~26ms. 161x faster than vectorbt, 1000x+ 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 (median of 5 runs):

Engine Time vs ManifoldBT
ManifoldBT (Rust) 26 ms 1x
vectorbt (NumPy) 4,094 ms 161x slower
backtrader (Python) ~1000x slower

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

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

Uploaded CPython 3.9+Windows x86-64

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

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

manifoldbt-0.13.0-cp39-abi3-manylinux_2_34_x86_64.whl (8.2 MB view details)

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

manifoldbt-0.13.0-cp39-abi3-manylinux_2_28_aarch64.whl (7.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9+macOS 11.0+ ARM64

manifoldbt-0.13.0-cp39-abi3-macosx_10_12_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: manifoldbt-0.13.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/6.1.0 CPython/3.13.12

File hashes

Hashes for manifoldbt-0.13.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 99e7959026045e0617d936ba8f3fead681bfd74a4809844f9af3c883a778ecf5
MD5 5f685ead94db4bd3b5d844ac3707eddb
BLAKE2b-256 d5a8b8d157ee030691b3c5f78c82d59f89fba652b68ee46fa530fdaa89d56f76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.13.0-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 131c23621663f2f008535c0237a8fc419b966dd6b94c050b93e2c522844d8ca2
MD5 9221651d665290f959fb0efdc6f30138
BLAKE2b-256 2119936737f452944a87fc7b2008fea508bda153affe0fb2b57ee4385ace244f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.13.0-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6dd5a6afc503e846afd044677c8a3a04e436edc7ea58b095b7be2d1749505f6d
MD5 ab0222ffa5aba2ce68610b11187a56be
BLAKE2b-256 5c97d5b92f505aa85db9c55e0123da784c23d1a08e68f5e0eeb8989bd26404ff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.13.0-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1e6cfd6c0f0d85f2508b9f74bb8e13f7a02ee6d8aaf4c7f6e386d39491dac08d
MD5 b80cbff4448cea6b8f675589e54ab54d
BLAKE2b-256 5e3714e8f7cd497a816db14db532b12974a00cc0a9a6b6a393ffd74c73b788d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.13.0-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3ddd755e88da1017aaa553b8d56ee4eaeaaa61c43d9dddc1e95d7ff1b5d55bdc
MD5 2fb0c49ef0ebccf5ad8ac0c1dec381c4
BLAKE2b-256 1c4eca86d745d3aa4c1d2ab8391cde0f2a10a56d78892851f805d03987447739

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.13.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a57ddcad7f1fed9f696f5ea140b29309b82a7847e40b320a51e6cdf6299cf656
MD5 1993d6b29ef66f4dc48cb93c0c681499
BLAKE2b-256 95f7b47ab2b6ea0f43ad60b2bfe082618d95b98faf11befd1f7d3c5ac06a26d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.13.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ebc4ce4570566604fd6ec4a6e175a9148d8fe2cb9036ad7fbfa7efe1c056e46a
MD5 98ee04870891ed595e05fedeec7846d5
BLAKE2b-256 c14e4413c7226d60a5ab992e2b8df5bb498f31e90eae80475e95a56d1a797669

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