Skip to content

Reading a report

run_backtest returns a Report. The engine computes everything; a UI only draws it. This page decodes what you see.

The series

FieldWhat it is
datesTrading dates as YYYYMMDD integers (e.g. 20240102).
equityThe NAV curve, rebased to 1.0 at the first date. 1.35 means +35%.
benchmarkBenchmark equity rebased to 1.0 and aligned to dates — only when a benchmark_key was configured. NaN before the benchmark’s first point.
rolling_sharpe / rolling_vol252-day rolling annualized figures, aligned to dates.

Headline metrics

Everything derivable from the equity curve. Returns are fractions (0.20 = 20%).

MetricMeaning
total_returnEnd-to-end return over the whole sample.
cagrCompound annual growth rate.
ann_volatilityAnnualized standard deviation of daily returns.
sharpe / sortinoRisk-adjusted return; Sortino penalizes only downside.
max_drawdownWorst peak-to-trough decline (a negative-ish magnitude).
calmarCAGR ÷ max drawdown.
max_drawdown_durationLongest time underwater, in trading days.
ulcer_index / avg_drawdownDepth-and-duration shape of drawdowns.

Trade-level metrics

Derived from the realized trade list.

MetricMeaning
num_tradesNumber of closed trades.
win_rateFraction of trades that were profitable.
profit_factorGross profit ÷ gross loss.
expectancyAverage P&L per trade.
avg_win / avg_loss / payoff_ratioAverage winner, loser, and their ratio.
best_trade / worst_tradeExtremes.
avg_holding_periodMean bars held per trade.
max_consecutive_lossesLongest losing streak.
recovery_factorTotal return ÷ max drawdown.

Exposure & distribution

MetricMeaning
time_in_market / avg_exposureHow often / how much you were invested.
best_day / worst_dayBest and worst single-day returns.
skew / kurtosisShape of the daily-return distribution.
var_95 / cvar_95Value-at-risk and conditional VaR at 95%.

Conditional blocks

Some fields appear only when applicable:

  • ytd, one_year, three_year — lookback returns, present when the sample is long enough to cover the window.
  • benchmark_return, alpha, beta, excess_return, tracking_error, information_ratio — present only when a benchmark was supplied.
  • A live segment block — metrics on the post-go-live slice of the curve, present only when live_performance_start was set.

For the exact NAV model, metric conventions, and the full JSON contract, see the backtest engine reference.