Every cent between backtest and live, accounted for.
A Rust trading engine that liquidates when a real venue would, runs backtest and live on one core, and is built to explain the gap between them — with a self-hosted console on top.
$ cargo run --example martingale_ladderLiquidatedEight venues on the order path
ticks per second with margin and a strategy (M4 Mac, in memory)
third-party dependencies in the engine
trades kept that a commercial archive lost
order outcomes: accepted, rejected, unknown
The dangerous error is the one that looks right.
Its predecessor traded real money for years and hit six walls. None of them raised an error.
Silent failure
Zero-price fills, endless cancel loops. Nothing crashed.
Unexplained gap
Live differs from backtest, and nobody can say where.
Two codebases
Backtest and live are supposed to agree. Nothing makes them.
Slow research
When a run takes tens of minutes, you stop asking questions.
Results that expire
Code, data and parameters moved. Does it still hold?
Free overfitting
Keep the best of 200 runs — and never price the luck.
Two layers. One account of the truth.
The engine produces evidence. The console makes it legible.
One deterministic core for backtest and live
OpenQuanter
Composable Rust crates with Python bindings. Take one, or the whole stack.
Quanterdeck
A self-hosted web console: backtests and sweeps, live reconciliation and attribution, and running the trading host — deploy, roll back, halt, alerts.
Built to not flatter you.
Margin-aware backtesting
Tiered margin, liquidation, funding, fees. Real venues liquidate you — so does this.
Fidelity ladder
Fast sweeps on L0, then queue, latency and the order book.
Gap attribution
A shadow kernel beside the venue splits the difference. What will not split is the residual.
Overfitting, priced
Every sweep reports the deflated Sharpe ratio and PBO, and rechecks the winner for look-ahead.
Deterministic journal
Replay reproduces state exactly. Recovery, audit and research are one mechanism.
Zero dependencies
The engine is plain std Rust. CI fails the build if that changes.
Python strategies
Write it in Python, run it on the Rust engine — up to 7× faster batched.
import openquanter as oq oq.run_backtest(MyStrategy(), ticks, balance=10_000)
Honest order path
A timeout is not a failure. Unknown is a first-class outcome.
A console that is allowed to say no.
“Cannot tell” never renders as “all clear”.
Keys stay local
Self-hosted. Never holds your API keys.
Login, always
Argon2id, Origin checks, a second factor off loopback.
Two-key operations
Risky actions need a code only the host agent can check.
Black box
Any moment of the last 90 days, opened up.
For people who answer for the number.
Levered traders
Prop desks, small funds, or you — money at stake, someone to answer to.
Engine migrations
Prove the behaviour did not change, trade by trade.
Anyone reporting results
Investors and risk can run it and check, not just believe.
Honest about where it stands.
Built and tested
- Deterministic core & journal replay
- L0 / L1 / L2 matching
- Margin, liquidation, funding, fees
- Capture proven on live venues
- DSR, PBO, look-ahead checks
- 8-venue order path, kill switch
- Python tier on PyPI
- Live loop on testnet + console
Not yet
- Long live runs for attribution
- API stability
- Trading real money on 2.x
- ONNX inference, LLM sandbox
- Crates on crates.io
Running in minutes.
Deflated Sharpe, overfitting probability, and Python strategies on the Rust engine. Linux, macOS, Windows.
pip install openquanter
Three examples in the Quickstart, no data to download.
git clone https://github.com/openquanter/openquanter cd openquanter cargo run --example martingale_ladder
The console, the host agent and the web interface, with a checksum.
v=1.0.0; t=x86_64-unknown-linux-gnu
curl -LO https://github.com/openquanter/quanterdeck/releases/download/v$v/quanterdeck-v$v-$t.tar.gz{,.sha256}
sha256sum -c quanterdeck-v$v-$t.tar.gz.sha256