Edgoro
Backtest Lab

Options

Backtest Lab: how the engine works

Short answer

Backtest Lab ($9 per month, on top of a plan) simulates a strategy on real crypto candles. The AI reads your strategy once and translates it into a strict rule set; a deterministic engine then simulates every trade, so the same candles, rules and settings always give the same result. It covers 20 USDT spot pairs on 15m, 1h, 4h, 1d candles over 6 months to 3 years, charges fees and slippage, holds back the last 25% of the period as an out-of-sample check, and gives a verdict: robust, fragile, over-fitted or not enough trades. The numbers come from the engine, not from the AI.

On this page

From your strategy to rules

You pick a creation from your library (an indicator or strategy, an MT5 bot or a crypto bot; chart analyses can't be backtested) or describe the strategy in a sentence or two. The AI translates it into a small rule language and lists every assumption it had to make. The same strategy version on the same timeframe always gives the same rules: the translation is cached.

The rule language supports:

  • Indicators: EMA, SMA, RSI, ATR, MACD, Bollinger Bands, Stochastic, VWAP (daily reset at 00:00 UTC), highest and lowest over N candles, on any price (open, high, low, close, volume, hl2, hlc3, ohlc4), with values up to 50 candles back.
  • Conditions: crosses above, crosses below, greater than, less than, between, grouped as "all of" and "any of".
  • Exits: a stop (ATR multiple, percentage or swing low/high), a take-profit (R multiple or percentage), a trailing stop (ATR or percentage), exit on the opposite signal, exit conditions and a maximum number of candles in a trade.
  • Filters: UTC session hours, weekdays, and a moving-average trend filter, optionally on a higher timeframe.
  • Sizing: a risk percentage of equity divided by the stop distance, or a share of equity.

If part of a strategy can't be simulated, the run is refused and the unsupported parts are listed, rather than approximated.

Market data

  • Pairs: BTC/USDT, ETH/USDT, SOL/USDT, BNB/USDT, XRP/USDT, ADA/USDT, DOGE/USDT, AVAX/USDT, LINK/USDT, DOT/USDT, LTC/USDT, TRX/USDT, ATOM/USDT, NEAR/USDT, UNI/USDT, AAVE/USDT, SUI/USDT, ARB/USDT, OP/USDT, INJ/USDT.
  • Timeframes: 15m, 1h, 4h, 1d. Periods: 6 months, 1 year, 2 years, 3 years.
  • Sources: spot candles from Binance's public market data (data-api.binance.vision, then api.binance.com), with KuCoin and OKX as fallbacks when Binance doesn't answer.
  • Window: it ends at the start of the current UTC day, so only closed candles are used and a re-run the same day is identical. Earlier candles warm up the indicators (at least 300, or 5 times the longest lookback) and are never traded.
  • Candles are cached month by month and shared by all users, since market data isn't personal.

Execution model and costs

  • Signals are evaluated on closed candles only, and orders fill at the next candle's open: no lookahead.
  • One position at a time, no pyramiding. If a long and a short signal fire on the same candle, neither is taken.
  • Fees: 0.1% per side by default, charged on the traded value at entry and exit. Slippage: 0.02% by default, against you on market fills (entries, signal exits and stops). Both can be set from 0% to 1%.
  • Take-profits are limit orders filled at their price. Stops and targets are checked inside each candle from its high and low; if both could have been hit in the same candle, the stop is assumed first. A candle that opens beyond the stop fills at that open.
  • Trailing stops move at the candle close and apply from the next candle.
  • Starting equity 10,000 USDT; position size never above 1× equity; long, short or both.
  • Equity is marked to market at every close.

The engine doesn't model funding rates, borrowing costs for shorts, the order book or partial fills.

Metrics computed

For the whole period, the first 75% of candles (in-sample) and the last 25% (out-of-sample):

  • net profit, net return and annualised return (CAGR);
  • number of trades, wins, losses and win rate;
  • profit factor (gross profit / gross loss, shown as "no losing trade" at the cap of 100);
  • maximum drawdown on the marked-to-market equity curve;
  • expectancy per trade, in money and as a share of equity, and the average result in R for trades with a stop;
  • Sharpe ratio from daily equity returns, annualised with √365;
  • longest losing streak, exposure (share of candles in a position), average trade length and total fees.

The report also shows the buy-and-hold return of the same pair, monthly returns, the equity and drawdown curve, and the trade list (up to 2,000 trades stored).

The verdict

  • Not enough trades: fewer than 30 trades over the period.
  • Over-fitted: profitable in-sample (profit factor at least 1.1 and a positive return) but losing out-of-sample, or, with at least 5 out-of-sample trades, an out-of-sample profit factor below half the in-sample one.
  • Robust: profit factor at least 1.2 after costs, out-of-sample profit factor at least 1.1 with a positive return, at least 10 out-of-sample trades, and a maximum drawdown of 35% or less.
  • Fragile: anything else, with the checks that failed.

Each verdict comes with its reasons in plain English. "Robust" means consistent on this data, not a prediction. After a run, the AI writes advice once: a few observations, two or three changes to test and a risk reminder. A suggested change can be sent back to the creation in one click ("Apply to my strategy").

The optimizer

On a finished backtest, the optimizer tests 1 to 3 parameters over ranges you choose, up to 50 combinations. Each combination is simulated on the whole window; the table is ranked by out-of-sample profit factor, among combinations with at least 30 trades and 5 out-of-sample trades. Next to it, it reports the combination you would have picked from the in-sample data alone and how it did afterwards, and a heat map for two parameters. Choosing from the table re-uses the held-back data, so confirm any change on a new period.

Limits

100 backtests and 10 optimizer runs per calendar month (UTC), with failed runs not counted; 30 runs per hour. Crypto spot pairs only: forex, indices and stocks can't be tested. A backtest describes the past on one market and one period; it doesn't predict results.

Trading involves substantial risk of loss and is not suitable for every investor. Edgoro is a software tool, not a broker or financial adviser: nothing it produces is investment advice, and past or backtested performance does not guarantee future results.

Something wrong or missing? Email contact@edgoro.com