BACKTESTING

Backtest XAUUSD, forex and crypto on your own machine.

Bar by bar, over the file you imported, on your broker’s clock. Nothing is queued, nothing is metered, and no result is held behind a plan. What follows is the four places the simulator refuses to flatter itself — every one of them named in the engine’s own source, because a backtester is only worth the number it prints.

  1. No lookahead

    A rule evaluated on a bar can see that bar and the ones before it, never the ones after. The order it raises fills at the next bar’s open. Deciding on a close and filling at that same close is the most common way a backtest invents money that was never available.

  2. An ambiguous bar is a loss, and it is counted

    When one bar’s range spans both the stop and the target, OHLC cannot say which was touched first. Assuming the target is the single biggest source of fantasy in retail backtesting, so every ambiguous bar resolves as a loss — and the number of them is reported with the result. If that number is large, the result rests on the assumption rather than on the strategy, and you can see that it does.

  3. Gaps fill at the open, not at the level

    A stop at 1900 on a bar that opens at 1880 fills at 1880. Filling at the price you asked for silently deletes gap risk, which is the risk stops exist for.

  4. Costs are charged, not assumed away

    Spread on the way in and on the way out, commission per lot, swap per lot for every night a position is held. The total paid is reported beside the profit, so the two are never confused.

Money

13

Risk-relative (R)

7

Free3 runs, and 3 scripts of your own kept in the library.

See pricing

Strategies you write yourself

Three worked examples ship with it — EMA cross, RSI reversal, Donchian breakout — written against the same public API your own strategies use. Runs happen in a worker, so a slow rule costs a frame rather than the chart.

Trades drawn where they happened

Every fill is placed on the chart at the bar it filled on, with an equity curve in its own pane underneath. A row in a results table cannot tell you the entry was on a wick; the chart can.

An open position is not a trade

A position still running when the data ran out was closed artificially, so it is excluded from the win rate and reported separately. Counting an unfinished bet would flatter every figure above it.