A C++ execution core and Python strategy API verified against a formal execution spec — local, deterministic, and built to defend a research process under real scrutiny.
Every fill is priced by a published execution spec and checked against a 267-check conformance suite.
Every fill on the way to that result is priced by the same published execution spec the 267-check conformance suite verifies against.
Write strategies in ordinary Python. NumPy, Pandas, AI-generated code — everything works naturally, without learning a proprietary language.
Fetch historical bars directly from Databento's API into Reamer Stream's format — no CSV export, no manual timezone math. Databento serves fixed UTC epoch nanoseconds, so DST-driven bar misalignment (timestamps silently shifting an hour, twice a year) isn't something you have to catch — it isn't possible through this path.
Reamer Py runs on Reamer Stream — a standalone, ticker-addressed data engine, reachable over a documented Unix-socket protocol usable by any language. See how it works →
Attach arbitrary JSON to any timestamp — earnings, macro releases, sentiment, anything your research depends on — resolved to the latest value actually known as of that bar, so a strategy can never see a fact before it happened.
Run one strategy across dozens of instruments with synchronized timelines and a single portfolio equity curve.
Risk-of-ruin, drawdown percentiles, probability-of-loss — computed from bootstrapped equity curves over actual trade returns.
Same seed, same intra-bar tick path, every run — including which side of a same-bar bracket collision fires first.
Commission, slippage, spread, and swap all modeled explicitly by DefaultExecutionModelConfig, not assumed.
| Capability | Backtrader | QuantConnect LEAN | reamer_py |
|---|---|---|---|
| Published execution specification | ✗ | Partial — documentation, not a formal spec | ✓ EXECUTION_SPEC.md |
| Behavioral conformance suite | ✗ | Internal, not published | ✓ 267 tests |
| Deterministic intra-bar tick model | Limited | Depends on data resolution | ✓ seeded, reproducible |
| Execution semantics explicitly documented | Partial | Partial | ✓ |
| Throughput — minimal callback 50-ticker portfolio, steps/s |
122 | 131 | 25,899 (212x / 198x) |
| Throughput — realistic breakout 50-ticker portfolio, steps/s |
108 | 103 | 3,637 (33.8x / 35.3x) |
Same machine, same synthetic data, same 20-bar Donchian breakout logic in all three engines. Multipliers are reamer_py vs. Backtrader / vs. QuantConnect LEAN. Full methodology, single-ticker figures, and the 500K/5M-bar tiers: see the numbers.
import reamer_py
from engine.orders import buy_market, close_position
class MyStrategy:
lookback = 1
def on_bar(self, data):
tv = data["SPX"]
if not tv.valid:
return None
if tv.close[-1] > tv.close[-2] and tv.position.qty == 0:
return buy_market(1.0, ticker="SPX")
if tv.close[-1] < tv.close[-2] and tv.position.qty > 0:
return close_position(ticker="SPX")
reamer_py.load_csv("data.csv", "SPX")
result = reamer_py.run_backtest(data=["SPX"], strategy=MyStrategy())
Real, runnable code — trimmed from the full quickstart, which also covers execution config, save_result(), and the HTML report.
No subscription, no forced renewal, no self-serve checkout. Contact us for pricing, multi-seat/invoicing terms, or a free time-limited test license to evaluate reamer_py first.