PyInvesting
Back to research notes

Methods and evidence

How to review a completed backtest

A completed backtest is a record of a historical simulation under particular rules and data. Reviewing it means connecting the headline statistics to those rules, the period actually calculated and the trades behind the portfolio. This guide explains that review process; it does not present a verified historical performance result.

Start with the saved configuration and result identity

Open the result's Settings and record the saved configuration: strategy, instruments or universe mode, signals and weights, entry and exit rules, holdings limit, rebalance schedule, band, cash treatment and currency. Include execution assumptions wherever recorded. The relative strength builder is a place to inspect available controls; its current settings do not establish what an earlier run used.

Keep the result identifier and publication identity when available. A later rerun can use revised data or different assumptions even when its name matches. Compare the recorded status with the result you are viewing. A failed, cancelled, unfinished or unpublished attempt cannot be used as a completed performance result. A previous published result does not become a new successful calculation because a retry was submitted.

Separate simulation dates from publication dates

Record the requested interval, actual simulation observations and any shorter coverage shown. The date a result was published tells you when the calculation became available, not when the simulated investments occurred. Neither date establishes when each underlying filing or price became available to a historical decision.

Read the statistics scope beside the chart. A chart's visible window and the period used for recorded statistics can differ; zooming alone should not be treated as a fresh calculation. Check the benchmark's observed dates too. A comparison across different periods needs that difference stated clearly.

Check universe, benchmark and currency assumptions

A fixed list answers a different question from a historical point-in-time universe. Today's selected instruments do not reconstruct past membership. With historical membership, review information timing, identity changes, exclusions and qualifying coverage; the label alone does not prove a complete historical archive. The historical universe methodology explains these distinctions and remaining selection limitations.

Confirm the benchmark, reporting currency and treatment of currency conversion. Read the recorded price basis and dividend assumptions before comparing returns. Where a result states that adjusted close includes provider split and dividend adjustments, preserve that qualification. Do not assume every displayed series uses an identical dividend convention, or add dividends again without checking how they were represented.

Read return alongside drawdown

Consider net return together with drawdown, volatility, the length of the observation period and the path of portfolio value. A strong ending value can conceal a deep decline or a long recovery. An annualized statistic compresses that path; it does not describe what happened in each year.

Check what “net” includes in the recorded calculation. Missing cost information is unavailable, not zero. A simulation also cannot establish your eventual brokerage charges, taxes or achievable live execution.

Reconcile orders, fills and execution costs

A target allocation is not a fill. Compare intended orders with completed simulated fills, quantities, prices and dates. Review partial or unfilled orders, cash constraints and the execution policy before interpreting turnover or an unexpected holding.

PyInvesting's stored fill records distinguish commission, spread cost and impact cost. Review the available breakdown and assumptions rather than assuming a summary exposes every component. Check whether a quoted slippage allowance overlaps spread or market impact before adding costs together. Reconcile execution costs with the reported result without subtracting a cost twice when it is already reflected in execution prices or cash.

Preserve coverage and evidence with the result

Read missing-data warnings, exclusions, eligibility dates and any shortened benchmark coverage. Enough observations near the end do not establish coverage throughout the interval. An excluded instrument can change which candidates compete for portfolio places. An incomplete attempt offers no substitute for a published, qualified result.

Save the settings, result identity, dates, warnings and relevant trade evidence together. Where the interface offers downloads, retain them with that record and check their contents; a chart image alone cannot preserve the configuration or cost ledger. Treat changed inputs as another experiment. Historical simulation is not a forecast. Follow the research and correction policy when documenting assumptions, limitations or later corrections.

Prepared with AI assistance. PyInvesting is responsible for this guide; see our editorial policy for sources, limitations and corrections.