Run & evaluate

Preview & Backtest

VeriRun Lab separates “show me what my strategy does” from “tell me whether it holds up”. Previews answer the first question with fast, idealized fills over a few sessions; backtests answer the second with deliberately conservative execution over the full window. Knowing which question each one answers is the key to reading both correctly.

Two run modes, two fill models

PreviewBacktest
Purpose A teaching surface: see setups, entries, exits and annotations on a chart, fast. Research-grade evidence: a graded result under pessimistic assumptions.
Scope Bounded — up to 5 sessions. The full window declared by the strategy's spec.
Fills Idealized: a limit order fills when price touches it; a stop entry fills exactly at its trigger price. Conservative: a limit order needs price to trade through it (someone actually traded past your price); maker orders are post-only; per-contract fees are charged; a triggered stop entry fills slightly worse than its trigger price.
Unlocks after Tests green. Tests green and the version explicitly approved.
Cost Free — previews never consume credits. Shows a credit estimate before launch.

The app never lets you forget which one you're looking at. Every preview carries the banner “Preview uses idealized fills — full backtests apply conservative execution”, and every backtest result carries its method banner: “Conservative fills (trade-through required, maker post-only, per-contract fees). Research result — probabilities, not promises.”

Why the pessimism?

Optimistic fills are the classic way backtests flatter you: in real markets, the limit orders that fill effortlessly are disproportionately the ones you'll wish hadn't. Requiring trade-through, charging fees and filling stop entries with slippage means that when a strategy still looks good, the edge is less likely to be an artifact of the simulator. The gap between the two fill models is itself a diagnostic — see the fill-realism gap.

Launching a run

  1. Press Preview or Backtest in the workspace header. If the button is disabled, its tooltip names the reason (tests gate, missing version, missing approval).
  2. Review the launch dialog. For a preview you choose Sessions (up to 5) and optionally a tick limit. For a backtest, the window and data slice come from the strategy's versioned spec and are shown read-only — e.g. “Window: 2026-01-05 → 2026-03-27” with a coverage check. If part of the window has no data on the platform, the dialog says so before anything runs.
  3. Check the estimate. Backtests show Estimated cost (credits) — approximate compute minutes and credits, with an honest caveat that cost bases are estimates. See Data & credits for how to read it.
  4. Press Launch. The run is queued; its status chip moves through queued → running → succeeded (or failed / cancelled / timed out). You can leave the page — every run lands in the run library.

Reading the chart

The preview viewer: a candlestick session chart with entries and exits marked
A preview session: candles with entry/exit markers, level lines, and volume, delta and cumulative-delta panes below.

Preview results open a per-session chart with a tab per symbol and date. The visual vocabulary:

Markers

  • Blue arrows — entries; the arrow points up for longs, down for shorts.
  • Green markers — winning exits; red markers — losing exits.
  • Amber markers — signals (a setup was detected).
  • Gray markers — rejected setups: the pattern fired but no order ever filled or the setup was refused. The marker's text is the reject reason.

Lines

  • Selecting a trade draws its entry (blue solid), stop (red dotted) and target (green dotted) price lines.
  • Level lines show market structure your strategy used: point of control (amber), value-area high/low (dashed), opening-range high/low (blue dashed), swept levels (sparse dots), and VWAP (amber).
  • Your own chart_annotations draw here too — this is where you verify the code sees the market the way you meant.

Panes

  • Volume — per-bar volume histogram.
  • Delta — per-bar buy-minus-sell volume, green/red by sign.
  • CVD — cumulative volume delta as a line.

The setups & trades blotter

Below the chart, Setups & trades lists every event: time, side (LONG/SHORT), outcome (win / loss / open), and a detail line with entry, stop, target and exit prices. Rejected setups appear as rows tagged with their reject reason and the note “rejected — no order worked”.

The debug trace and reject reasons

For custom strategies, the Debug trace panel shows, per setup, the decision-relevant values your strategy's debug_trace method emitted — each setup expands to reveal exactly what the code saw and decided. It is the fastest way to answer “why did it (not) trade here?”.

Reject reasons you'll commonly see, and what they mean:

ReasonMeaning
no_profileThe level or profile the setup needed was never built, so no order could rest.
no_rth_windowThe level existed, but there was no valid regular-trading-hours window left for an order to rest in.
no_fill_timeoutAn order rested but expired without filling — price never came to it (or, in a backtest, never traded through it).
rejected_geometryThe setup's price geometry was invalid — e.g. a stop and target arranged so the trade could never make sense.
rejected_sizingYour own risk rules refused the trade (stop too wide, size would exceed limits).

Rejects are information, not noise

A strategy that detects 40 setups and fills 6 is telling you something important about itself. If most rejects are no_fill_timeout, your entries may be too passive for the pattern; if they're rejected_sizing, your stops may be structurally too wide for your risk rules. Read the distribution, not just the trades.

Backtest results at a glance

A finished backtest opens the results viewer with tabs: Overview, Equity (equity curve, daily net P&L and drawdown-from-peak charts, with optional buy-and-hold / random-entry benchmark overlays), Trades, Fills (the idealized-versus- conservative diagnostics), Gates (the scorecard — covered on the next page), Regimes, Sensitivity, Stress, Walk-forward and Provenance (the exact data slice, code version and parameters behind every number).