# Reading results

> The strategy page after a run: the Overview chart and tiles, the Report, the Runs and Trades views, what each metric and column means, open positions and exit reasons.

Source: https://orbitalaip.com/docs/backtesting/reading-results

> [!IMPORTANT] Disclaimer
> Backtest results are hypothetical and do not predict future performance. Nothing here is investment advice: Orbital computes the rules you supplied and recommends nothing. Orbital is not a registered investment adviser or broker-dealer. Costs are as modelled by the chosen cost profile and may differ from live trading.

## The strategy page

The header shows the strategy's name, its state, such as **Tested** or **Paper**, and its kind: **Rules**, **Program** or **Signals**. The line under it states the run's settings, from the version and the bar to how orders fill. The version is a menu that opens another version's newest completed run, and **Main** marks the version the strategy stands on; see [Versions](https://orbitalaip.com/docs/backtesting/versions#main).

Four views share the run: **Overview**, **Report**, **Trades** and **Runs**, and **Workflow** or **Code** opens the editor. The actions are **Export evidence…**, **Forward test…** and **Run…**; while a run is in flight, **Cancel run…** takes the place of **Run…**. **More actions** (⋯) can hold **Make main**, **Stop forward test…**, **Deploy signals to alerts…** or **Stop signals…**.

The page opens on the run named in its address. Without one, it opens on the newest run still queued or running, then on a running forward test's newest update, then on the newest completed run, and otherwise on the newest run. Every run has its own address, so a link from the **Runs** view, a notification or a chat card lands on that run.

## While the run is in flight

The Overview shows **Equity so far**, a chart that advances as the engine replays, beside the **Progress** card. The tiles read **Waiting for the verdict**, and **Report** and **Trades** stay dimmed until the run finishes.

A run that ends without a result shows **This run failed** with the engine's reason and its code, or **Cancelled before completion**.

## The equity chart

On a completed run the **Equity** card leads, with the account on the last session, its change since the first session and the benchmark's change over the same days. Toggles add the benchmark (a dashed line), **Drawdown** (a pane under the curve) and, on a forward test's update, **Forward**; **%** and **$** switch the units. Hover to read any day, and drag to measure a stretch against the benchmark.

Each configuration keeps one curve, from its newest run. An older run of the same configuration keeps its figures, and its chart says a later run replaced the curve. Running the period again brings it back.

A forward test's update adds a **Forward test** card between the chart and the tiles, with **Return since start**, **Max drawdown**, **Against the backtest** and **Today**. See [What the page shows](https://orbitalaip.com/docs/backtesting/forward-testing#what-the-page-shows).

## The verdict tiles

Five tiles state the result. **Return** carries the yearly compounded rate under it. **Max drawdown** carries the peak and trough dates when the daily curve can place them. **Sharpe** is the raw figure. **Trades** carries the open count, the share won and the profit factor. **Alpha (yr)** carries the beta against the benchmark and the benchmark's own return. A tile the run cannot state is left out.

## What the headline metrics mean

- [Net P&L](https://orbitalaip.com/docs/glossary#net-pnl): final equity minus starting capital, in dollars, after costs, open P&L included.

- [Return](https://orbitalaip.com/docs/glossary#return): the same gain or loss as a share of starting capital.

- [CAGR](https://orbitalaip.com/docs/glossary#cagr): the steady yearly growth rate that would produce the same result, over calendar days.

- [Sharpe ratio](https://orbitalaip.com/docs/glossary#sharpe-ratio): return per unit of volatility above a 4.25% risk-free rate, from daily close-to-close equity returns, annualised with the square root of 252.

- [Sortino ratio](https://orbitalaip.com/docs/glossary#sortino-ratio): like Sharpe, but only downside days count against the strategy.

- [Max drawdown](https://orbitalaip.com/docs/glossary#max-drawdown): the worst peak-to-trough fall of the account, marked at the bar closes of the execution feed.

- [Profit factor](https://orbitalaip.com/docs/glossary#profit-factor): dollars won per dollar lost across closed trades.

- [Win rate](https://orbitalaip.com/docs/glossary#win-rate): the share of closed trades that ended positive, net of fees.

- [Expectancy](https://orbitalaip.com/docs/glossary#expectancy): the average net dollars each closed trade added.

- [Alpha](https://orbitalaip.com/docs/glossary#alpha): yearly return above what the benchmark, dividends included, would explain. [Beta](https://orbitalaip.com/docs/glossary#beta) is how much the strategy moves when the benchmark moves.

- [MAE](https://orbitalaip.com/docs/glossary#mae) and [MFE](https://orbitalaip.com/docs/glossary#mfe): how far a trade went against you and for you, from bar highs and lows.

- [Open P&L](https://orbitalaip.com/docs/glossary#open-pnl): what the positions still held at the end had gained or lost at the last close.

The [benchmark](https://orbitalaip.com/docs/glossary#benchmark) is measured on total return, dividends reinvested. Alpha and beta appear only when the run named one.

## Overall and rolling statistics

**Overall statistics** covers the whole run in two columns, from **Total trades** to **Treynor ratio**. **Loss rate** is losers over trades; a break-even trade is neither a win nor a loss.

**Rolling statistics** shows **Sharpe ratio**, **Beta**, **Alpha** and **Annual standard deviation** over **6 months** and **12 months**. A six-month window needs more than 126 sessions and a twelve-month window more than 252, so the lines start late.

## Open positions at the end of a run

Positions still held at the last close stay open and are marked there. **Latest trades** lists them first, with **Marked** on the exit leg and **Open** under **Closed by**, and **Net profit** counts them while closed-trade statistics leave them out. See [Open positions at the end of a run](https://orbitalaip.com/docs/backtesting/backtest-vs-forward-test-vs-paper#open-positions-at-the-end-of-a-run).

## The trade log

**Latest trades** on the Overview shows the six newest rows, with a link to **All N trades**. The **Trades** view shows every row, newest first, with **Load older trades** in pages of 5,000. The engine keeps a trade log for 30 days; after that the view says so, and the run's figures stay. A run that never entered a position reads **No trades: the strategy never entered a position.**

- **Symbol** and **Side**: the ticker, and **Long** or **Short**.

- **Size at entry**: the shares, and what they cost or what the short sold for.

- **Entry** and **Exit**: the date and price of each leg. With fill times, the headers read **Entry · ET** and **Exit · ET**.

- **Held**: completed bars between the two legs.

- **Against · for**: a bar from the trade's worst point to its best, with a dot where the trade closed or was marked.

- **Return**: the price move, signed.

- **Net P&L**: dollars after costs.

- **Closed by**: the exit reason.

**Return** and **Net P&L** are each coloured by their own sign, so green can sit beside red: a small price gain can be a net loss after costs.

## Exit reasons

**Closed by** names why each trade closed: **Signal**, **Stop**, **Target**, **Trailing**, **Time**, **Margin call**, **Delisted**, **Left universe**, **Unpriced**, **Left the tape** or **Account blown**. A position still held reads **Open**. The [glossary entry](https://orbitalaip.com/docs/glossary#exit-reason) explains each reason.

## The Report view

To save the report as a PDF:

1. **Click Download PDF**
   
   Your browser's print dialog opens.

2. **Choose PDF as the destination**
   
   Then save the file.

The Report holds **Key statistics**, the **Returns** charts, **Risk** with the five deepest falls, **Market events** and **Settings of this run**. Among the key statistics, **Turnover** is what was traded each day as a share of equity, and **Probabilistic Sharpe ratio** is the chance the true Sharpe is above zero. **Market events** compares the strategy with the benchmark across named stretches of market stress wholly inside the run.

### Resampling

**Resampling** redraws the run's closed trades 1,000 times at random, with replacement. The table gives the return and deepest drawdown of **This run**, the **Median resample** and the **Worst 1 in 20**, and counts the paths that **Lost money**. Resample drawdowns are measured trade to trade, while the run's own is on daily marks, and open positions are left out. A run with fewer than two closed trades, with closed trades that all came out the same, or with more than 50,000 closed trades has no resampling. See [Avoiding overfitting](https://orbitalaip.com/docs/backtesting/avoiding-overfitting).

### Run properties

**Run properties** at the foot of the Report opens the run's record: the version that ran and how many configurations were tried to reach it, **P&L and costs by side**, what the run was billed and the exact settings. Rows follow for any orders the account could not fund or that allocation limits reduced or rejected. Under them sit the engine's **Honesty ledger**, **Where this differs from paper trading** and **What the engine did, rule by rule**.

## The Runs view

**Runs** lists every test of the strategy. Its strip shows the run's window over the available data; drag the window and click **Run this window…** to run another.

**Versions** lists every saved version, newest first. Each row shows its tag, **Main**, its change note and a sparkline of its best run, with the date it was saved, how many runs it has and its best Sharpe. Click a version to narrow the runs table to it, and again to release it. **Show all** opens the list past six.

**Every run, by Sharpe** gives each of the newest eight versions with completed runs a lane, newest at the top, with one dot per completed run. Hover a dot to find its row in the table.

The table filters by version and by status. Its columns are **Period**, **Version** (with **Main**), **Setting** (that run's parameter values), **CAGR**, **Sharpe**, **Max DD**, **Trades**, **Credits** and **When**, then a state chip: **On chart**, **Queued**, **Running**, **Cancelled** or **Forward**. A finished run that was not charged says **not charged** under its credits. A failed run's second line gives the engine's reason; a replaced run's says which later run took its curve. Hover a row for **Run this period again…**.

## Where the deflated Sharpe appears

The strategy page prints the raw Sharpe only. The deflated figure appears only in the Strategies list's **Evidence** column, with **Columns** set to **Full**, and in what Chat, agents and the Orbital AI connector read. See [The deflated Sharpe](https://orbitalaip.com/docs/backtesting/avoiding-overfitting#the-deflated-sharpe).

## Export run evidence

**Export evidence…** appears on a completed run for project editors and above when Trade is on in the project. Trade does not accept the file, so the download fails with **Evidence is unavailable. Confirm Trade is installed and active in this project, then try again.** Trade reads each strategy's Backtesting results itself; see [Deploy a strategy](https://orbitalaip.com/docs/trade/deploy-a-strategy).

## Data notes

On a run over a watchlist, a note at the top of the Overview names any symbols that listed too recently to [warm up](https://orbitalaip.com/docs/glossary#warm-up) by the start; see [A symbol listed too recently](https://orbitalaip.com/docs/backtesting/troubleshooting#a-symbol-listed-too-recently).

The footer of the **Overview** and the **Report** gives the date the data ran through, and says when bars in the run's window were restated or corporate actions for its symbols changed. Run the period again to compare.
