Skip to content
Backtest

Test a strategy on past data

A backtest replays a strategy across historical market data so you can see how it would have performed — without risking real money.

💡New to backtesting?

Pick a preset below, hit "Send to bot creator", and on the dashboard click "Run Backtest" — that's the existing one-click flow we already had. The Monte Carlo button next to it stress-tests the same parameters by reshuffling trades.

Conservative · BTC spot

Slow timeframe, tight risk per trade, small drawdown profile.

Risk: 1% risk per trade, no leverage
Timeframe: 1h candles
Horizon: Last 90 days

Expected: Low trade frequency, smoother equity curve.

Send to bot creator →

Balanced · ETH swing

Mid-speed setup that aims for day-to-multi-day moves.

Risk: 2% risk per trade, optional 2× leverage
Timeframe: 15m candles
Horizon: Last 90 days

Expected: Moderate activity, balanced wins/losses.

Send to bot creator →

Aggressive · SOL scalping

Fast reactions on short candles with tighter exits.

Risk: 3% risk per trade, leverage allowed
Timeframe: 5m candles
Horizon: Last 30 days

Expected: Many trades, larger drawdown swings.

Send to bot creator →

What you'll see in the results

Equity curveHide explanation

A line chart of your account value over time. Smooth and rising = good. Jagged with deep dips = risky.

Max drawdownWhat does this mean?
Sharpe ratioWhat does this mean?
Win rate vs. profit factorWhat does this mean?

Already have a bot? Backtest from the form

On the dashboard the create-bot form already has "Run Backtest" and "Run Monte Carlo" buttons — they run the parameters you've entered against the bot you've selected on the sidebar. Use this page when you want to start from a preset; use the dashboard when you've already built the bot.

Open dashboard

Advanced: full config schema

Power users can paste a full historical_test JSON into the bot form's advanced editor. Schema mirrors the backend backtest engine.

Show schema reference
{
  "data_dir": "/tmp/past_data",
  "symbol": "BTCUSDT",
  "timeframe": "5m",
  "max_candles": 1500,
  "bot": { /* full BotFormState payload (see bot creator form) */ },
  "backtest": {
    "initial_balance": 10000.0,
    "fee_bps": 6.0,
    "slippage_bps": 10.0
  },
  "monte_carlo": {
    "iterations": 100,
    "horizon_steps": 288,
    "trades_per_step": 0.15
  }
}