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

Uploaded CPython 3.9+Windows x86-64

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

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9+macOS 11.0+ ARM64

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

File metadata

  • Download URL: manifoldbt-0.12.2-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.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8b30a6296c6add7c7cded594849af4b568c8f0dd7d76cb3d86094979d4eb115f
MD5 bad7fb66b6c2078f6ffb649a6dca6d6f
BLAKE2b-256 77692c66560749375e7225efa5ebb2bfaa16fd95b574b1f9fbf7e5802cda8b30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.2-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4f2d3fc656636afb763c0e59d90001e47a365121deaeae928a4e4eb8a1ea8a5a
MD5 0a5dbdd53e70e2063e1c5ab718e380e6
BLAKE2b-256 b9e675acf34e090b94011324703a37b3950acba41551c7f94c292a77a5697f10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.2-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 aa69fd9b9f078139fd9064357fa6b74b751db27846f3235f93fa2227ea490a2e
MD5 71899ef42df505e05b17742f226a1661
BLAKE2b-256 51ad2868e4a52e9c62b6d9aa8b307d5c3ba3f78b9408a27920a10000a13f586e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.2-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 78ab1a10e37011b0ef0ec77d2d0fec97d446ed910cfcb72d5336c62c516a8be0
MD5 330c66f39b03e00e1447f2267999f94d
BLAKE2b-256 e918bb350d2dfab602952b3c7ebcf1dccbff0b74a1954cdcbf79ee8b0c53fb8f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.2-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 543c56cba07217509b10194ad7a3dc87bca267d54b23d19c96dbc9851d13269d
MD5 1fd684d16baa2b12b9870e6f44db7380
BLAKE2b-256 b4a027592080b65897b2c443f870bf1dae0290961792f30db4ee023ce0014e0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f8214c4885f3f2e4dadad8441106147213c218b124250f2dbcae5db51580b401
MD5 5dd0ff830fcb529280ed5f695964e3d9
BLAKE2b-256 5a9986028ac1cada2517db633b768d573d966a2f9bdbdf037b48eda7bfcf2070

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for manifoldbt-0.12.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e27a42dcef4740394a06c6ca9240555553bab8483b440fa96a5549c4acaea2c8
MD5 4f1bf50e6e76492a5b577ec6c55a7559
BLAKE2b-256 174ff42575209609e38e326f91e18365bb12ecf0ea48ce6fa683337bb5d6973f

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