What the Backtester does for you
The Backtester is your historical confidence builder. Live trading has a small but real cost in mistakes — you can’t undo a bad mode-and-symbol choice without taking a drawdown to find out. Backtesting lets you find out the cheap way. You submit a backtest: “Run BasicMode onBTCUSDT from January 2024 to December 2024 with a $10,000 starting balance and 0.075% fees.” A worker picks up the job, replays every candle in that window through the mode’s logic, and persists the entire trade ledger plus the per-second equity curve. You then inspect: how many trades were there? What was the max drawdown? How did equity behave around the May 2024 chop? What’s the Sharpe?
You can also share a backtest read-only with a partner, an auditor, or a fellow operator — using a generated share token, no account required.
The Backtester is the single most-used “before live” tool in the unCoded suite. Operators who skip backtesting before scaling up almost always wish they hadn’t.
Same execution rules as live
Realistic fees and slippage
0.075%, the Binance/BNB rate) and slippage model. The reported equity is net of these costs, not idealized.Per-trade ledger
Equity curve sampling
Concurrency-capped queue
Read-only share tokens
Reproducible by ID
Cached candle data
What you can backtest
The Backtester supports two flavors of input.Pre-built modes — every shipped mode is backtestable
Pre-built modes — every shipped mode is backtestable
Custom strategies — your SignalEditor graphs
Custom strategies — your SignalEditor graphs
How a backtest works
You submit the job
Worker picks up the job
Historical candles are replayed
Trades are recorded
Equity is sampled
Summary metrics are computed
What summary metrics actually mean
The Backtester returns a standard set of summary statistics. Here’s what each one means and what to look for.Total return
Total return
+30% total return over 12 months can hide a -40% drawdown in the middle. Always look at total return alongside max drawdown.What’s “good”? Highly regime-dependent. In a crypto bull market, +50% to +150% is achievable. In chop, +15% to +40% is decent. In a bear, breakeven is a win.Max drawdown
Max drawdown
2x the worst drawdown you can stomach in real life. If you can tolerate a -10% real-time drawdown, the backtest’s max drawdown should be ≤ 20%.Why? Live trading hits drawdowns the backtest didn’t. Live operator psychology compounds drawdowns (you might pull capital at the worst moment). A backtest’s drawdown is the floor for what you’ll see live, not the ceiling.Number of trades
Number of trades
5–10 trades is too few to draw conclusions. 100+ trades over a year is solid. 1000+ trades in a year suggests you might be overtrading (high frequency = high fees = thin per-trade margin).Pro tip: divide by months. 100 trades / 12 months = ~8 trades/month. Does that match your expectation? If you expected ~30 trades/month and the backtest shows 8, the mode is undertrading the symbol; reconsider.Win rate
Win rate
2x ratio is a great strategy. A 90% win rate with 0.1x ratio is a disaster waiting to happen.The pre-built modes (BasicMode, FullBullMarket, etc.) tend to have high win rates (~70–90%) by design — they have many small profit targets via the sell ladder. The asymmetry is reversed: when they lose, they lose larger. This is the deliberate trade-off of grid-style trading.Average trade duration
Average trade duration
Profit factor
Profit factor
> 1.5 is decent. > 2.0 is strong. < 1.0 means you’re losing money.Profit factor is a useful complement to win rate — it tells you the magnitude story, not just the count story.Realistic limitations of backtesting
Common backtesting pitfalls in detail
Overfitting to a single window
Overfitting to a single window
Look-ahead bias
Look-ahead bias
+200% strategy with -2% max drawdown is almost certainly look-ahead biased.Survivorship bias
Survivorship bias
BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT — symbols whose continued existence is high-confidence. Don’t extrapolate from major-symbol backtests to long-tail altcoins.Ignoring drawdown for total return
Ignoring drawdown for total return
+50% annual return looks great on paper. The same backtest with -35% max drawdown is terrible — most operators capitulate during a -35% drawdown and crystallize the loss.Mitigation: judge backtests on the worst quartile of drawdowns, not the headline return. Ask: “could I emotionally hold through this drawdown for the recovery?” If no, the strategy is wrong for you regardless of total return.Curve-fitting parameters
Curve-fitting parameters
Fee underestimation
Fee underestimation
0.025% instead of 0.075%, or no fees). The reported return is much higher than live would be.Mitigation: always use the realistic fee for your venue. For Binance with BNB discount, 0.075%. For Binance without BNB, 0.1%. For Coinbase, taker fee can be 0.3% for small accounts. Check your venue and your tier.Slippage underestimation
Slippage underestimation
0.05% slippage is reasonable. For altcoins or large size, 0.2% or more.Not testing enough windows
Not testing enough windows
How most operators use it
Mode validation
Symbol selection
BTCUSDT, ETHUSDT, SOLUSDT, etc. See which symbol the mode works on best. Add the winners to your active set.Strategy refinement
Regime stress testing
Forward-test pipeline
Comparison reports
Operational footprint
Resource cost (vendor-hosted)
€0 to you — the vendor runs it. Reasonable fair-use limits apply (most operators run far below the cap).Resource cost (self-hosted)
500 MB – 2 GB RAM per active backtest. With concurrency cap of 2, plan for 1–4 GB peak RAM. Most operators don’t bother self-hosting.Storage
1–10 GB for an active operator.Failure mode
Throughput
1m-candle backtests take single-digit minutes. Throughput is concurrency-capped — don’t expect to run 50 in parallel.Determinism
Common questions
Why is the Backtester vendor-hosted by default?
Why is the Backtester vendor-hosted by default?
4 GB extra RAM monthly to support that is wasteful.Historical data caching. The Backtester maintains a centralized cache of imported historical candles. When you ask for BTCUSDT 1m from 2022-01-01, the data is already there — instant access. If every operator self-hosted, every operator would re-fetch the same historical data from the exchange’s API independently, hitting rate limits and slowing everyone down.Self-hosting is technically possible (the Docker images are available) — it makes sense for operators with serious privacy-of-strategy concerns or unusual workloads.How long does a backtest take?
How long does a backtest take?
5-minute candles — backtests complete in a few seconds to a minute. The compiled engine is fast.Longer windows (multi-year, 1-minute candles) and complex SignalEditor strategies take longer — single-digit minutes. The Backtester reports progress, and you can poll its status endpoint or open the frontend to watch the run.Can I backtest a strategy that hasn't been published live yet?
Can I backtest a strategy that hasn't been published live yet?
Are backtest results reproducible?
Are backtest results reproducible?
Do I get charged per backtest?
Do I get charged per backtest?
Can the Backtester tell me which mode to use?
Can the Backtester tell me which mode to use?
Can I backtest the SignalEditor's preview faster?
Can I backtest the SignalEditor's preview faster?
What happens if my backtest fails mid-run?
What happens if my backtest fails mid-run?
failed so the system has a clean state. You can re-submit the same backtest; the Backtester will not double-bill for failed runs.Is my strategy private when I submit a backtest?
Is my strategy private when I submit a backtest?
Can I parameter-sweep automatically?
Can I parameter-sweep automatically?
How far back does the data go?
How far back does the data go?
BTCUSDT, ETHUSDT, etc.) typically have data going back to their listing date — for Bitcoin, this is years of 1m candles. For newer symbols, data starts at the listing.If you need data older than what’s already cached, the Backtester fetches it from the exchange on demand (subject to the venue’s historical data limits — most exchanges keep at least a year of 1m data, often more).