BDPO_
Join the list
Private beta · opening soon

Backtest everything.
Guess nothing.

BDPO is a strategy lab that runs in the browser. Write a trading idea in TypeScript or wire it together as a node graph, replay it over years of real broker candles, and read a report that charges every cost you would actually pay.

One email when the doors open. Nothing else.

[ the bench ] try it — the numbers are computed, not drawn
ema-crossover.ts
const fast: int = input.int(5);
const slow: int = input.int(20);

export function tick() {
  const f = bdpo.ema(fast);
  const s = bdpo.ema(slow);
  if (bdpo.getCloses().length < slow) return;

  if (bdpo.getOrdersCount() === 0 && f > s) {
    bdpo.orderSend("BUY", 0.1);
  }
  if (bdpo.getOrdersCount() > 0 && f < s) {
    bdpo.closeAllOrders("MA cross down");
  }
}
DEMO-1 · H1 · 300 barssimulated series
equity10,000 12,297
return
23.0%
trades
9
win rate
44%
profit factor
1.69
max dd
15.2%
exposure
50%

Synthetic series, generated in your browser from a fixed seed — not market data. Every fill above is charged 0.04% spread and 0.02% commission. The real engine runs the same loop over archived M1 candles from broker feeds.

[ authoring ]

Two ways in.
One engine.

Write the strategy as a small TypeScript script, or build it on a canvas by connecting nodes. The graph compiles to the same strategy the editor produces, so the choice is about how you think, not what you get.

bdpo api
87 methods — 42 indicators, plus candles, math, trading and account access.
no imports
Declare init, tick and shutdown. No classes, no build step, no tooling to install.
both ways
Open a coded strategy on the canvas, or send a graph to the editor and keep typing.
ai on hand
QuantPilot drafts, explains and debugs strategies alongside you.

The switch on the bench above is not a mock-up of this idea — it is this idea. The code pane and the node pane describe the same strategy, and both drive the same run.

editor
TypeScript · esbuild-wasm
canvas
nodes · drag to connect
worker
sandboxed · no network
engine
deterministic replays
[ data ]

An H1 candle here is 60 M1 candles.

The archive stores one-minute candles from broker feeds, and every higher timeframe is built from them as the run streams. Nothing is resampled or approximated, so a multi-timeframe strategy sees the same hour your broker saw.

base
M1 — the finest archived resolution, sourced from broker feeds.
timeframes
Nine, from M1 to monthly, aggregated live inside the run.
streaming
Parquet tiles read in order; memory stays flat however long the test.
repeatable
Same strategy, same data, same trades — every single time.
aggregation · M1 → H160 → 1
60 × M11 × H1
open
first M1 open
high
max of 60
low
min of 60
close
last M1 close
[ broker ]

The costs are charged, not assumed.

Most backtests flatter you by filling at the close for free. This one runs a broker: every order pays the spread, takes the slippage, is charged commission and swap, holds margin, and gets stopped out if the account can't carry it.

spread
Charged from the broker's own published symbol specification.
commission
Per side, on the notional you actually traded.
swap
Financing on every night the position stays open.
margin
Held for the life of the position; stop-out closes you like a broker would.
fill · BUY 0.10 EURUSDillustrative
mid price
1.08412
+ spread
0.8 pts
1.08420
+ slippage
0.2 pts
1.08422
fill price
1.08422
commission
per side
−0.70
swap
3 nights held
−1.14
gross move
18.6 pts
+9.40
net result
+7.56

Margin is held against the position for its whole life, and a run that breaches the stop-out level is closed the way a broker would close it — not quietly allowed to continue.

[ report ]

Every way to be wrong, measured.

A run ends in a report, not a number. Equity and drawdown curves, the month-by-month grid, the full trade ledger, and the risk statistics that tell you whether the return was skill or leverage.

two drawdowns
Balance drawdown on closed trades, and equity drawdown including floating losses.
risk-adjusted
Sharpe, Sortino and Calmar, alongside volatility and annualised return.
per trade
Expectancy, SQN, streak runs and MAE — where each position hurt most.
exportable
Save a report, compare runs, or publish it attached to the strategy.
monthly returns · %sample
JFMAMJJASOND
2020-20-11-12-1-1-33-0-1
2021-4-2-2-113-07320-1
20220-10-1-22-44-1-0-53
202332012-2-20-0-111
2024-256-0-51-3-45-3-1-3
2025-5-3-41311-0-2-311
returns
  • net profit
  • gross profit
  • gross loss
  • return %
  • annualised %
risk
  • balance drawdown
  • equity drawdown
  • volatility
  • Sharpe
  • Sortino
  • Calmar
trades
  • win rate
  • average win
  • average loss
  • profit factor
  • expectancy
  • SQN
shape
  • monthly returns
  • rolling metrics
  • streak runs
  • MAE scatter
  • trade ledger
[ desk ]

What else is on the desk.

Backtesting is the centre of the platform, not the whole of it.

agent desk
QuantPilot

Hand it an objective. A team of specialist agents scopes it, drafts the code, runs the tests and briefs you back — with every decision on the record.

institutional
13F filings

What the large holders actually own, filing by filing: positions, changes, concentration, and the funds that moved together.

community
Marketplace

Publish a strategy with its report attached, or read someone else's before you trust it. The numbers travel with the code.

The doors open soon.

Leave an email and we'll send one message when they do — with an account waiting behind it. No newsletter, no drip, no sharing your address.

Coming soon | BDPO