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

Uploaded CPython 3.9+Windows x86-64

manifoldbt-0.12.3-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.12.3-cp39-abi3-musllinux_1_2_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9+macOS 11.0+ ARM64

manifoldbt-0.12.3-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.12.3-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: manifoldbt-0.12.3-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 8.3 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.12.3-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 26293d7535413840fa5d6167345355d238463b770232009860d9cdc9b23b32d6
MD5 aa1b492617fe0bcf395d13600f68652e
BLAKE2b-256 cf6b537bb083b2e73b201ed7af40486537dbe7615781e9eb4edec09407c8b144

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.3-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9e5567997c21b759c56185ca87758c599fb1b715015943f09fd0e11129bc6896
MD5 c7f08bec3a90fbbb004b3c0247f66e2b
BLAKE2b-256 a3e1b7d89354d2148c4e83642c33ee89f0abae9f9dff2ea1480a0e6cdb3d3836

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.3-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 fc90221a54323216e6866e3d38ec6fe8d97818a76dbf4bbffe6a8fac500091a9
MD5 8fbc74cb4813312752c971aaafd153a6
BLAKE2b-256 30cc0528616a21eb8a0783e6586d49c28ea57c8e38a4d6b783c20c84278f4ac5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.3-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2483c05fa6e51e0a6142cf27d5ba0ea16f89778ea89c110bdaec438fc2a8873f
MD5 487de39c11bbbf797b96809a8423f93a
BLAKE2b-256 41d0d39fe4cfe35fd3f6ae05bddf4483b32db420c9cdc47d35897232ef5f2b52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.3-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e1a90bedb33024159d483e0e92bdf12650c35d98daac190708b95c219788651a
MD5 25c5c8655d73dbb7f26901a8485717e9
BLAKE2b-256 d6df56ae5b44ccb3695ff12e01066d91efb32ae4c81fb8b469c4f27424d86101

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.3-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 37bbac4f89d3b8b5c781aa683799034da20c6364472c4396c1f0954f3ae11e7b
MD5 8496f3c4a7082ae747ac1443a516d917
BLAKE2b-256 997eb8f3e0c2d82b34f2da8906a71038f9292fc9fec43a1883f0f88a54a2d8d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.3-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3dd8601d54ce0ad2a4ac652de0c078f3302e2addfd8e099537b77e772d3663d8
MD5 42c3b28228f40a35a4d4a72e9ec82cd3
BLAKE2b-256 be16e28d0609d51ec98399a45884e4a13f5795302316bf928a059f962e1df3d5

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