Trading

Real Historical Backtesting

7 min read

What it is

Test your trading strategies against real historical OHLCV candles from 8 exchanges (Binance, Kraken, Bybit, OKX, KuCoin, Gate.io, Bitget, HTX). Computes Sharpe, max drawdown, win rate, profit factor on actual market data.

How to think about it

Backtesting validates strategies BEFORE you deploy real capital. We fetch real candles via CCXT, cache them in our storage, and run your strategy logic against them.

Step-by-step

  1. Pick exchange and pair

    Strategy Builder → Backtest tab. Select exchange, symbol, timeframe (1m to 1d), and date range (start/end).

  2. Set initial capital

    Default $10,000. Sets your starting equity for the simulation.

  3. Configure strategy parameters

    Position size %, stop loss %, take profit %. Backtest engine computes RSI, EMA9/20/50, Bollinger Bands automatically and uses standard entry/exit rules unless you override.

  4. Run backtest

    Click Run Backtest. First run for a given period fetches real candles from the exchange (may take 5-30 seconds depending on date range). Subsequent runs use cached data.

  5. Review results

    Final equity, total return %, Sharpe ratio, max drawdown, win rate, profit factor. Trade list shows last 100 trades with entry/exit/PnL. Equity curve downsampled to ~200 points for the chart.

Tips & pitfalls

  • Sharpe ratio >1.0 is solid, >2.0 is excellent. Anything below 0.5 means the strategy is barely profitable on a risk-adjusted basis.
  • Max drawdown <20% is acceptable for most strategies. Above 30% means you'll likely abandon the strategy during a real losing streak.
  • Beware of overfitting — if you backtest 50 parameter combinations, the best one is likely lucky. Validate winners on out-of-sample data (different time period or different symbol).
  • Real backtest is no substitute for paper trading. After a good backtest, run paper trading for at least 1 week before going live.
  • Cache hits make repeat backtests instant. Same period + same symbol + same timeframe = no re-fetch from exchange.