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.
The execution core itself runs single-threaded by design — on_bar calls into multi-threaded or GPU-accelerated model code exactly as it would in any other Python script.
Write strategies in ordinary Python. NumPy, Pandas, AI-generated code — everything works naturally, without learning a proprietary language.
Pull bars straight from whatever you already run — a database, an internal service, a feed like kdb+ — and hand them directly to a backtest, no file ever written to disk. A data loader is a plain function that fetches bars and calls one of two functions: write them to a reusable local file, or pass them straight into the backtest run. The Connectors SDK Guide walks through four complete, copy-and-adapt implementations — Databento, Alpaca, Massive.com (Polygon.io), and Parquet — full code inline, not a bundled feature, plus the direct database-to-backtest pattern above. A custom loader for your own source is deliberately simple to write, not something you wait on us to support. Read the Connectors SDK Guide →
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.
#include "reamer_research_abi.h"
ReamerResearchStrategyVtable strategy = {
.user_data = NULL,
.on_bar = on_bar_callback
};
ReamerBacktestHandle result = NULL;
ReamerResearchStatus status = reamer_research_run_backtest(
&bars_by_ticker, bar_counts, ticker_ids, ticker_count,
&strategy, &exec_config,
initial_capital, leverage);
if (status == REAMER_RESEARCH_SUCCESS) {
ReamerBacktestSummary summary;
reamer_research_get_summary(result, &summary);
printf("Net PnL: %.2f\n", summary.net_pnl);
reamer_research_free_result(result);
}
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. A one-time payment covers unlimited use on one machine forever, with free updates to every Reamer product indefinitely — no version scoping, no renewal required. Contact us for pricing, multi-seat/invoicing terms, or a free time-limited test license to evaluate reamer_research first.