Candles hide. Trades don't.
Replay your orders against every trade on Binance perpetuals: 1,000 variants over 90 days in 17 seconds and 80 MB on a laptop. pandas needed 7.5 GB for the same run.
How we measured
Deptho Pro, from $290/year pip install deptho
Works with orders from any backtester, pandas or your own code.
The deeper the cap, the fewer engines survive.
Same 90 days of trades, same 10,000 market orders. Each engine gets a hard memory limit and no swap. · Methodology
Replay 90 days of tick data in 512 MB of memory. pandas, Polars and DuckDB ran out of memory at that cap. Deptho Pro replayed 10,000 orders across 90M trades in 1.4 seconds, warm or cold.
| Engine | 2 GB cap | 1 GB cap | 512 MB cap |
|---|---|---|---|
| pandas + Parquet | Out of memory | Out of memory | Out of memory |
| Polars + Parquet | Out of memory | Out of memory | Out of memory |
| DuckDB | Out of memory | Out of memory | Out of memory |
| Deptho Pro | 0.11 s / 1.05 s | 1.33 s / 1.24 s | 1.38 s / 1.31 s |
pandas + Parquet
- 512 MB cap
- Out of memory
- 1 GB cap
- Out of memory
- 2 GB cap
- Out of memory
Polars + Parquet
- 512 MB cap
- Out of memory
- 1 GB cap
- Out of memory
- 2 GB cap
- Out of memory
DuckDB
- 512 MB cap
- Out of memory
- 1 GB cap
- Out of memory
- 2 GB cap
- Out of memory
Deptho Pro
- 512 MB cap
- 1.38 s / 1.31 s
- 1 GB cap
- 1.33 s / 1.24 s
- 2 GB cap
- 0.11 s / 1.05 s
With no cap, Deptho Pro replays the same 90 days in 0.11 seconds warm. See the full results, including where Polars wins.
Replay of 10,000 market orders across 90 days / 90,000,000 Binance-format trades under a hard memory cap (cgroup, swap off), each engine on its own idiomatic storage. Cells show warm / cold time. Trades are synthetic, generated in Binance's archive format. Intel(R) Xeon(R) Processor @ 2.10GHz, 4 CPUs, 16 GB RAM, Ubuntu 24.04.5 LTS.
On real data: 30 days of BTCUSDT perp trades (36M) on a 16 GB MacBook Air: Deptho Pro replayed 10,000 orders in 0.016 s (warm) using 76 MB, where pandas used 3.0 GB.
How Deptho Pro works
- Sync.
dpp.syncpulls the daily trade files you don't have yet from Binance's public archive, converts each once, and appends it to one memory-mapped dataset. Adding a day took 0.18 s. An interrupted sync repairs itself on the next run. - Replay. Pass a DataFrame of market orders. Each one fills at the VWAP of the trade prints that followed it on the same side, lookahead-safe by default. Book depth and queue position aren't modelled yet; depth-aware fills are next.
- Local. The license is checked offline, so Pro runs on air-gapped machines. Nothing about your data or strategy leaves your machine.
import deptho_pro as dpp
# Download new days and append them to one memory-mapped dataset
tape = dpp.sync("BTCUSDT", "2026-07-01", "2026-09-30")
# orders: DataFrame of side, qty, indexed by time
fills = tape.replay(orders, fill_model="trade_prints")
bars = tape.bars("1s")Free and open source
See below the surface of every backtest.
Funding is easy to leave out of a perp backtest, or to charge to the wrong position. The open-source
deptho library charges it to the position you actually held at each funding time, alongside
fees, so you see net against gross. You get drawdowns, rolling Sharpe and Sortino, and rolling alpha in one
report. Lookahead-safe by default: a position decided at a bar's close earns from the next bar.
pip install deptho
python -m deptho.demo
The demo downloads 90 days of BTCUSDT perpetual data from Binance's public archive to your
machine, runs a sample trend strategy, and opens the report. Add --synthetic to run it offline.
Sample EMA trend strategy on real BTCUSDT perp data, Jul–Sep 2026. It loses money; fees cost it 10% of equity. Seeing why is the point.
import deptho as dp
pnl = dp.pnl_from_positions(prices, positions, funding=funding_rates, fee_bps=5)
report = dp.tearsheet(pnl=pnl, benchmark=prices.pct_change(), fills=fills)
report.show() # inline in Jupyter / VS Code, or opens a browser tab
report.save("report.html") # one self-contained file, works offline
Pricing
Draft pricing, not final.
Pro Individual
$24.17/mo billed yearly, $58 less than monthly. One key per year instead of one per month. 14-day refund window.
One person trading their own capital or a client's. Commercial use.
Pro Team
Minimum 3 seats ($597/month).
Crypto funds and desks. Seats are counted per person.
Academic
Pro Individual for non-commercial research and teaching.
Open Source
The deptho library: perp tearsheets with funding and fee attribution, plus the demo. Apache-2.0.
Early buyers keep their price, including when order book replay (BookBuilder) ships.
Guides
- pandas read_csv MemoryError on a large file: why it happens and how to fix it
- pandas rolling window running out of memory on tick data
- Plot an interactive drawdown (underwater) curve in Python
- Free historical BTC order book data (CSV) from Binance's archive
- Download Binance funding rate history (CSV) for any perpetual
- Include funding costs in a crypto perpetual futures backtest
- Rolling Sharpe ratio in Python, annualised correctly for 24/7 crypto
- Download free BTC tick data and analyse it in one command