Same engine. Same spec. Same answers.
The backtester and the live executor are the same code. There is no “backtest version” vs “live version” — they cannot diverge.
What you backtest is what you trade.
- Single spec, both modesA backtest run reads the same StrategySpec the live executor will run. No translation, no glue.
- Modelled spreadsPer-symbol spread series. Widens around news. Yes, including the 2 am Sunday spike.
- Slippage simulatorConfigurable per-symbol slippage with a stochastic component. Defaults match real-broker live data.
- Weekend gaps preservedFriday close → Sunday open is a real gap, not a smoothed line. Stops trigger correctly.
- Margin-aware sizingLot size capped by available margin × leverage. The strategy can't over-leverage by accident.
{
"strategyId": "strat_a82c3f...",
"symbol": "NAS100",
"from": "2025-11-05",
"to": "2026-05-05",
"initialBalance": 200000,
"leverage": 50,
"perTradePct": 1.0,
"compounding": true,
"dailyDDStopPct": 5,
"maxDDStopPct": 8,
"stopOnConsecutiveLosses": 3,
"spreadModel": "broker.real",
"slippage": "broker.real"
}Prepare once. Replay forever.
A single O(N) pass pre-computes EMAs, swing-level deques, FVG arrays, news blackouts.
- No O(N²) per-bar recompute
- Cached for the run
- Re-used across replay seeks
Bar-by-bar evaluation against the spec. Decisions come out as a TimelineEvent stream.
- OPEN / CLOSE / BE_SET / TRAIL / STOPPED
- Stripped of payload bloat
- Cheap to seek and replay
Net P&L, win rate, profit factor, expectancy, Sharpe, Calmar, max DD, drawdown series.
- Per-symbol & per-session attribution
- Monthly returns table
- Streak histograms
cTrader-style chart replay. Speed 1×–500×. TP/SL ribbons, BUY/SELL arrows, live KPI tape.
- No blinking
- No event-walks
- requestAnimationFrame clock
cTrader-grade chart replay, in the browser.
Step bar-by-bar or fast-forward. Time-driven cursor, not event-walk.
Closed positions render as ribbons; live ones as floating brackets.
RAF accumulator + 100 ms commit throttle. Smooth at 100×.
Equity, today's P&L, drawdown — tape ticks with the chart.
Click the equity curve to jump to that moment. State rebuilt deterministically.
Save the replay run. Share it with a teammate. Re-load it next week.
What we model. What we don't.
- • Per-symbol spread series, time-of-day variation, news-time widening
- • Stochastic slippage with broker-realistic distributions
- • Weekend and holiday gaps preserved as gaps
- • Order-of-events within a bar (OPEN before STOP unless conflict)
- • News blackouts (per-currency, per-impact level)
- • Margin caps (notional / leverage ≤ available balance)
- • Daily DD halt, max DD halt, consecutive-loss skip-day
- • Session boundaries, DST transitions, IANA timezones
- • Live order-book impact (your fill never moves the price)
- • Broker-specific quirks (requotes, partial fills, last-look)
- • Connection drops and re-routing
- • Extreme tail events the historical sample didn't contain
- • Behavioural variance (you closing early in real life)
Treat backtest numbers as an upper bound, not a forecast. We say this on the report screen, too.
Every metric your prop desk would want.
Total return, % return, basis-point return per trade.
Win rate, profit factor, expectancy, payout ratio.
Peak-to-trough series, time-under-water, Calmar, MAR.
Consecutive-win and consecutive-loss histograms.
Per-symbol, per-session, per-DOW, per-month attribution.
How often each risk cap bound, how much it cost.
Returns split by red-folder vs no-news days.
How execution latency affects fills (broker-realistic distributions).
What people ask after a too-good-to-be-true backtest.
See your strategy run, before you fund the account.
Six months in under a second. Zero glue.
Join the waitlist