# Backtest Center guide

A backtest validates strategy behavior against specified historical data and execution assumptions. It is a research tool, not a promise of future returns or proof that live connectivity and venue rules are ready.

## Before running

Verify these inputs:

- Source and manifest are the intended strategy version.
- Market, instruments, and frequency use canonical identifiers.
- The start leaves enough warmup history for indicators and universe selection.
- Initial capital, fees, slippage, and position limits match the test.
- The benchmark is comparable to the strategy market and quote currency.

## Read a result

Review in this order:

1. **Data and status:** success does not prove complete data. Check first and last timestamps, bar counts, warmup, and missing fields.
2. **Execution assumptions:** inspect fees, slippage, liquidity, and unmodeled items. Strategy API V2 currently does not model Crypto funding payments.
3. **Risk:** review maximum drawdown, volatility, concentration, and the worst period.
4. **Execution ledger:** sample entries, exits, quantities, prices, fees, and position changes against the source.
5. **Benchmark:** compare both absolute return and relative performance.
6. **Robustness:** vary ranges, parameters, and regimes instead of keeping only the best run.

### Benchmark-relative metrics

When benchmark data is available, Strategy API V2 includes
`benchmarkRelativeMetrics`. The calculation samples the portfolio at the
benchmark's native observation times before calculating returns. This matters
when a long intraday backtest uses a coarser benchmark series: both return
streams and the annualization factor use that coarser frequency, without
forward-filled prices creating artificial tracking error.

Annualized portfolio, benchmark, and active returns use arithmetic periodic
means. Annualized tracking error uses the sample standard deviation of periodic
active returns, and the Information Ratio divides annualized active return by
annualized tracking error. Continuous-market gaps and non-consecutive equity
sessions are excluded rather than treated as one ordinary period.

Check `status` before reading the ratio. `insufficient_history` means fewer than
two valid aligned return observations were available. `zero_tracking_error`
leaves the ratio and classification unset instead of emitting infinity.
Missing, non-finite, and non-positive observations are excluded, while negative
Information Ratios are preserved.

The default interpretation bands (`weak`, `acceptable`, `good`, and
`exceptional`) are operational labels rather than a universal market standard.
The calculation accepts alternative bands for mandates that require them.

Benchmark choice remains part of the research hypothesis. CDI can be suitable
for Brazilian cash-like and low-duration fixed-income strategies, but it is not
an automatic default for inflation-linked, longer-duration, or credit-risk
mandates. CDI ingestion and its canonical identifier require a separate market
data design; do not substitute a static annual CDI rate for periodic benchmark
observations.

## Common misreadings

- Zero executions may mean missing data, insufficient warmup, or unreachable conditions.
- Intraday history is often shorter, so a long requested range may be unavailable.
- Leveraged results cannot be extrapolated without funding and liquidation risk.
- Tokenized equities, exchange equity perpetuals, and broker securities are different execution products.
- Historical data availability does not imply live support.

## Continue safely

Save the strategy version, parameters, data range, and result. Create a stopped deployment and then use `signal` mode. Complete the [live-trading safety checklist](../trading/LIVE_TRADING_SAFETY.md) before real capital. See the [Strategy API V2 guide](../trading/STRATEGY_DEV_GUIDE.md) for the programming contract and errors.
