How it works
Set up a backtest, trade a random stretch of real market history bar by bar, and read the report. Each step, how orders fill, and what the report measures.
Set up a backtest
Pick a market, US stocks or crypto, and the timeframe you want to read it on. Choose how long each session runs, how much cash you start with, and whether to hide the dates. Under Advanced sit the range of history the start is drawn from, and your costs: spread, maker and taker commission, and a fee per fill.
Nothing is downloaded yet. A backtest is a set of rules you can play as many sessions of as you like.
Start a session
Each session starts at a random instant inside your range, moved forward to the first real bar. The chart opens with enough history behind that point to read it, about two hundred candles on your timeframe, and the replay waits for you.
You don't choose the start, so you can't pick a stretch you already know went well. Start another session and you land somewhere else.
Trade forward

Play and pause, step one bar at a time, or let it run at up to a hundred bars a second. Underneath, the engine always advances one one-minute bar. Every timeframe from one minute to one day is built from those bars and cut at the cursor, so a forming candle looks exactly as it would live. Change timeframe whenever you like without losing your place.
The ticket takes market, limit and stop orders, long or short. A stop loss and a take profit ride on the position: they size themselves to it, survive partial closes and cancel each other. Type them in, or drag the lines on the chart.
Everything has a key:
- Space play or pause
- → the next one-minute bar, ⇧ → the next candle
- ↑ ↓ faster or slower
- 1 to 6 timeframe, from 1m to 1D
- B and S buy or sell
- ? the full list
How orders fill
- Market orders fill at the open of the next one-minute bar, with half the spread against you.
- Limit orders fill when a bar reaches them, at the better of the open and the limit, with no spread.
- Stop orders fill when a bar trades through them, at the worse of the open and the stop, plus half the spread.
- When one bar touches both exits, the stop loss is assumed to have hit first.
- There is no leverage. A position, long or short, has to fit in your cash. An order that no longer fits when it would fill is cancelled, and the reason is recorded.
A resting limit and a take profit pay the maker rate. Everything else pays the taker rate. There is more on this, with the arithmetic, in what a fill really costs.
Keep a journal
Write a note at any moment of a session. It is stamped with the real time you wrote it, grouped under its session, and shown both beside the chart and on the backtest's page, so you can read what you were thinking once you know how it turned out.
Stop and come back
A session saves itself when you pause, on every fill, every ten seconds while it plays, and when you close the tab. Open it again and you are on the same bar.
The report

On the final bar the session asks whether to close an open position at the last price or leave it open, then ends. The results page names the market and the dates you traded, including a blind session's, and shows:
- your equity and drawdown, against buy-and-hold of the same market over the same days, and any benchmarks you add
- return, net P&L, maximum drawdown, and Sharpe and Sortino ratios
- win rate, profit factor, expectancy, average and largest win and loss, streaks and time in the market
- every trade and every fill
Play it again
One session tells you little: a good result can be a lucky stretch of market. Every finished session is listed on the backtest's page with its return, drawdown and number of trades, so as you play more of them you can see whether a result repeats or was the market doing the work.
The market data
Real one-minute bars for US-listed stocks, adjusted for splits, and the major crypto pairs. Stocks trade in their regular session by default, with extended hours as an option. Bars are fetched as a session needs them and kept, so the first few seconds of a new stretch of history are the only wait.

