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.
- engine
- bdpo runtime
- methods
- 87
- indicators
- 42
- timeframes
- 9 · M1 base
- execution
- browser worker
- costs
- fully modelled
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");
}
}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.
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.
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.
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.
- 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.
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.
| J | F | M | A | M | J | J | A | S | O | N | D | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2020 | -2 | 0 | -1 | 1 | -1 | 2 | -1 | -1 | -3 | 3 | -0 | -1 |
| 2021 | -4 | -2 | -2 | -1 | 1 | 3 | -0 | 7 | 3 | 2 | 0 | -1 |
| 2022 | 0 | -1 | 0 | -1 | -2 | 2 | -4 | 4 | -1 | -0 | -5 | 3 |
| 2023 | 3 | 2 | 0 | 1 | 2 | -2 | -2 | 0 | -0 | -1 | 1 | 1 |
| 2024 | -2 | 5 | 6 | -0 | -5 | 1 | -3 | -4 | 5 | -3 | -1 | -3 |
| 2025 | -5 | -3 | -4 | 1 | 3 | 1 | 1 | -0 | -2 | -3 | 1 | 1 |
- net profit
- gross profit
- gross loss
- return %
- annualised %
- balance drawdown
- equity drawdown
- volatility
- Sharpe
- Sortino
- Calmar
- win rate
- average win
- average loss
- profit factor
- expectancy
- SQN
- monthly returns
- rolling metrics
- streak runs
- MAE scatter
- trade ledger
What else is on the desk.
Backtesting is the centre of the platform, not the whole of it.
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.
What the large holders actually own, filing by filing: positions, changes, concentration, and the funds that moved together.
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.