mirror of
https://github.com/manifoldbt/manifoldbt.git
synced 2026-08-24 14:38:04 +00:00
Initial commit: manifoldbt public repo
Python DSL, examples, docs, benchmarks, and tests. Rust engine distributed as pre-compiled wheel via PyPI.
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
# ManifoldBT
|
||||
|
||||
**Rust-powered backtesting engine for quantitative research.**
|
||||
|
||||
ManifoldBT is a high-performance backtesting framework with a Python DSL that compiles strategies into an optimized Rust expression graph. It is designed for speed, correctness, and ergonomics.
|
||||
|
||||
## Highlights
|
||||
|
||||
- **Rust core** — vectorized engine handles 1-minute resolution across years of data
|
||||
- **Python DSL** — fluent strategy builder with indicators, signals, and sizing
|
||||
- **Monte Carlo** — permutation-based simulation for robustness testing
|
||||
- **Walk-Forward** — out-of-sample validation with rolling windows
|
||||
- **Parameter Sweeps** — 2D heatmaps and 3D surface plots
|
||||
- **Portfolio** — multi-strategy portfolio with risk rules and rebalancing
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install manifoldbt
|
||||
```
|
||||
|
||||
With plotting support:
|
||||
|
||||
```bash
|
||||
pip install manifoldbt[all]
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```python
|
||||
import manifoldbt as mbt
|
||||
from manifoldbt.indicators import close, ema
|
||||
from manifoldbt.helpers import time_range, Interval, Slippage
|
||||
|
||||
# Define indicators
|
||||
fast = ema(close, 12)
|
||||
slow = ema(close, 26)
|
||||
|
||||
# Build strategy
|
||||
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))
|
||||
)
|
||||
|
||||
# Configure backtest
|
||||
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,
|
||||
)
|
||||
|
||||
# Run
|
||||
store = mbt.DataStore(data_root="data", metadata_db="metadata/metadata.sqlite")
|
||||
result = mbt.run(strategy, config, store)
|
||||
print(result.summary())
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
See the [examples/](examples/) directory for complete runnable strategies:
|
||||
|
||||
| # | Example | Description |
|
||||
|---|---------|-------------|
|
||||
| 00 | [Template](examples/00_template.py) | Minimal starting point |
|
||||
| 01 | [Trend Following](examples/01_trend_following.py) | EMA crossover with stop-loss and volume filter |
|
||||
| 02 | [Mean Reversion](examples/02_mean_reversion.py) | EMA crossover with parameter sweep |
|
||||
| 03 | [Multi-Asset Momentum](examples/03_multi_asset_momentum.py) | Cross-asset momentum signals |
|
||||
| 04 | [Linear Regression](examples/04_linear_regression.py) | Regression-based signal |
|
||||
| 05 | [Statistical Arbitrage](examples/05_stat_arb.py) | Pairs trading with spread z-score |
|
||||
| 06 | [Full Visualization](examples/06_full_visualization.py) | Complete tearsheet and charts |
|
||||
| 07 | [Walk-Forward](examples/07_walk_forward.py) | Out-of-sample validation |
|
||||
| 08 | [2D Sweep Heatmap](examples/08_sweep_2d_heatmap.py) | Parameter grid search |
|
||||
| 09 | [3D Surface](examples/09_surface_3d.py) | 3D parameter surface plot |
|
||||
| 10 | [Monte Carlo](examples/10_monte_carlo.py) | Permutation-based robustness |
|
||||
| 11 | [Portfolio](examples/11_portfolio.py) | Multi-strategy portfolio |
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Strategy Authoring Guide](docs/strategy-authoring.md) — full DSL reference
|
||||
|
||||
## Performance
|
||||
|
||||
ManifoldBT's Rust engine is orders of magnitude faster than pure-Python alternatives:
|
||||
|
||||
| Engine | 500K bars | 5M bars |
|
||||
|--------|-----------|---------|
|
||||
| **ManifoldBT** | ~0.02s | ~0.15s |
|
||||
| vectorbt | ~0.8s | ~8s |
|
||||
| backtrader | ~12s | ~120s+ |
|
||||
|
||||
Run `python benchmarks/bench_vs_competitors.py` to reproduce.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user