Researcher license$39/mo, $390/yr or $590 lifetime

Your fills decide the result. Researcher reads them off the tape.

A bar tells you where price went. It does not tell you who was buying, what the quote was when your order arrived, or whether the stop or the target printed first inside it. Researcher adds the layer that answers those three questions from the trades themselves, and the GPU to search it at the scale it deserves. Everything in Pro is included.

Or see exactly where Pro stops →
Tick
resolution: the tape itself, and bars rebuilt from it down to one second
BBO
the best bid and ask as they were, attached to every bar from the venue's book archive
GPU
sweeps, Monte Carlo and walk-forward on your NVIDIA card, bit-identical to the CPU in f64
3
ways to pay: monthly, yearly, or once for a perpetual license

What the license unlocks

Six things ship, and they are about execution: what the market was doing at the moment your order would have been there, read from the trades and the book rather than assumed from the bar.

The tape, ingested

ticks

ingest_trades pulls a venue's public trade archive into the store, one Arrow file per UTC day, for the days you name and nothing else. Bybit spot and Binance spot ship with it; your own tape comes in through the same import path as bars.

Order flow by aggressor side

order flow

Bars rebuilt from the tape carry what an exchange's bars do not: buy volume and sell volume kept apart, VWAP, the number of trades, down to one second. A strategy can read who was hitting and who was lifting, instead of inferring it from a close.

Real BBO at every bar

quotes

attach_quotes reduces a venue's public order-book archive to the best bid and ask per bar, so a fill is priced at the quote that stood there and not at a flat slippage guess. Order-book archives are heavy, roughly 200 MB a day per symbol; the reduction runs once and is stored.

Fills resolved on the tape

execution

fill_resolution="ticks" runs a bar backtest whose stops and targets are resolved on the trades inside the bar. When one bar contains both levels, the engine reads which one printed first instead of assuming the favourable order, which is the assumption that quietly flatters most bracket strategies.

How execution is modelled →

GPU acceleration

cuda

device="auto" moves a large grid onto your NVIDIA card and deliberately leaves small ones on the CPU, where the CPU is genuinely faster. In f64 the results are bit-identical to the CPU path, asserted metric by metric rather than within a tolerance. Decisive on the tape, where one combination costs far more than on minute bars.

Where the GPU wins and loses →

L2/L3 book, queue position, latency

order book

ingest_book stores Bybit's public order-book archive by price level, up to 500 on the days it is published at that depth, one Arrow file per UTC day. A strategy reads it like a bar column, the size, cumulative depth and imbalance at any level, through bt.book. A resting order waits behind the size the book showed at its price when it was posted, and where a market is stored order by order with ingest_mbo, it is served at its exact place in the queue. Orders and cancels can carry a latency, and the trade clock runs the simulation one print at a time.

Where Pro stops

Pro is the right license for most research, and this table is written so that you can tell whether yours is among the rest.

If your strategy trades on closes, holds for hours and sizes in a way where a tick of slippage is noise, Pro answers every question you have and Researcher answers questions you are not asking. Buy Pro.

Researcher is for the strategies where the fill is the strategy: brackets tight enough that the order of two prints inside one bar decides the trade, signals built on who was aggressing, quotes that move faster than the bar that summarises them.

Included from Pro
  • +Unlimited parameter sweeps and Monte Carlo
  • +One-second bars and one-second timeseries output
  • +Safety checks, built-in walk-forward, cross-exchange backtesting
  • +Databento and Massive connectors
  • +Everything Community ships: the engine, 104 indicators, multi-asset, MCP server, tearsheets
CapabilityProResearcher
Engine resolution
1s bars
Tick, BBO
Parameter sweeps and Monte Carlo
Unlimited
Unlimited
Safety checks, walk-forward, cross-exchange
Databento and Massive connectors
Tape ingestion (Bybit, Binance public archives)
Order flow by aggressor side
Real BBO at every bar
Tick-resolved fills inside bar backtests
GPU acceleration
L2/L3 book, queue position, latency

Three ways to pay for the same license

Identical features either way. The only difference is whether you would rather rent the tape by the month, by the year, or own it.

Monthly
$39/mo
Billed monthly, cancel whenever

The license follows the subscription. Cancel and it runs to the end of the period you already paid for, then the library drops back to Community on its next check. Your installs stay where they are, and nothing you have already computed is touched.

Annual
$390/yr
Billed yearly, ten months for twelve

The same license, ten months paid for twelve. One invoice a year, which is what an expense line prefers.

Lifetime
$590 lifetime
One payment, perpetual license, 24 months of updates

A permanent activation code, tied to a single user, with 24 months of engine updates included. After that the software keeps working exactly as it is, and later updates are offered at half the lifetime price. Break-even against the monthly plan: fifteen months.

Prices in USD, payment handled by Stripe, and promotion codes are accepted at checkout. Licenses are for a single user and sales are final; the terms spell out both. Distributed compute, custom integrations and a named contact are what Firm is for.

Activation is one command, once

Checkout hands you an activation code on the confirmation page. You run it once, and the license is fetched and stored locally from there on. The same code carries Pro and Researcher together: there is no second key to manage.

Nothing about the install changes. pip install manifoldbt is the same package on every tier, and the same code runs on all of them. The license only decides how far it is allowed to go.

The tape comes in the same way bars do: you name a venue, a symbol and a range, and the store keeps one file per day. A bar backtest then opts into tick-resolved fills with one keyword.

# Once, after checkout. The code is on your confirmation page.
manifoldbt activate "your-activation-code"
import manifoldbt as bt

# The public trade archive of a venue, one Arrow file per UTC day.
# Nothing is fetched that you did not ask for.
store = bt.ingest_trades("bybit", "BTCUSDT", symbol_id=1,
                         start="2026-08-25", end="2026-08-31")

# A bar backtest whose fills are read on the tape: which of the stop
# or the target went first is looked up, not assumed.
result = bt.run(strategy, config, store, fill_resolution="ticks")

FAQ

Stop assuming the fill

A strategy that survives its own fills, read off the trades that were actually there, is a different object from one that won on a bar's close. Researcher is what it costs to tell those two apart.