TradingView Backtesting

Annualized Backtest Returns: Holding Period, CAGR and Short Samples

Annualized return expresses a measured return as a yearly rate. With no external cash flows, CAGR equals (ending equity / starting equity)^(1 / years) - 1. Holding period return reports the change over the actual test; simple annualization divides that return by years without compounding. A short backtest can produce a large annualized number even though it contains very little evidence about a full year.

See the decision guide

Three return measures from the same equity values

Let B be starting equity, E ending equity, D elapsed calendar days and Y = D / 365. This page uses a fixed 365-day year for its examples. Assume B > 0, D > 0, no deposits or withdrawals, and that equity includes retained investment income and the stated trading costs. Use decimal returns in formulas; multiply by 100 only for display.

  • For a single asset with income paid out and not included in its ending value, HPR = (ending value - beginning value + income) / beginning value. Do not add income twice when using total-return equity.
  • CAGR can summarize a fixed-size trading strategy as an equivalent growth rate. It does not prove that trade sizes or profits were reinvested during the test.
  • Averaging annual percentages does not reproduce account growth: +50% followed by -50% has a 0% arithmetic average, but $10,000 ends at $7,500. The two-year CAGR is sqrt(0.75) - 1 = -13.40%.
MeasureFormulaWhat it answers
Holding period return (HPR)R = E / B - 1How much did the account grow during the measured period?
Simple annualized returnR / YWhat is the linear yearly pace without compounding?
CAGR / geometric annualized return(E / B)^(1 / Y) - 1What constant annual compound rate connects the two equity values?

Recalculate gains, losses and a partial final year

These hypothetical accounts each start with $10,000 and have no external cash flows. Ending equity already includes all assumed costs. Results are rounded to two decimals. Rows shorter than 365 days show mathematical extrapolations for comparison, not returns earned over a full year.

  • For 730 days: R = 12,100 / 10,000 - 1 = 0.21; Y = 2; simple = 0.21 / 2 = 10.50%; CAGR = 1.21^(1/2) - 1 = 10.00%.
  • For 500 days: keep Y = 500 / 365. Rounding the duration down to one year would turn a 17.69% annualized rate into 25%. Do not discard the partial final year.
  • For a 180-day loss: 0.9^(365/180) - 1 = -19.24%. Multiplying the -10% loss by 365/180 gives a different, linear extrapolation.
Elapsed daysEnding equityHPRSimple annualizedGeometric annualized
30$11,00010.00%121.67%218.87%
180$11,00010.00%20.28%21.32%
365$11,00010.00%10.00%10.00%
730$12,10021.00%10.50%10.00%
180$9,000-10.00%-20.28%-19.24%
500$12,50025.00%18.25%17.69%

Why 30 days at +10% does not establish a 218.87% year

The exponent 365/30 repeats a 10% growth factor about 12.17 times. The measured evidence is still only a 30-day gain of $1,000. A single favorable move, a small number of trades or one market regime can dominate that result. Annualization adds no observations and cannot establish that the next period will resemble the last.

  • Label a short result with its actual dates, return and trade count. If an annualized conversion is shown, identify it as an extrapolation and keep the observed return beside it.
  • GIPS Standards for Firms prohibit annualizing returns for periods shorter than one year in the presentations they govern. That reporting requirement is not a claim that the mathematical conversion is impossible, nor a claim that this backtest is GIPS compliant.
  • Retain losing and inactive periods in the evaluation window. Extending the same account to 365 days with no further gain leaves a 10% annual return, rather than the 30-day extrapolation.
  • Compare the frozen rules on later data and report drawdowns and costs. A longer backtest still does not guarantee future performance.

A deposit can make the endpoint formula misleading

Suppose an account starts at $10,000, rises to $11,000 after one year, then receives a $10,000 deposit. During the second year it grows from $21,000 to $23,100. Each year earns 10%, but blindly applying CAGR to $10,000 and $23,100 produces sqrt(2.31) - 1 = 51.99%. That calculation treats the deposit as growth.

  • A withdrawal is also an external flow. Investment income retained inside the account is part of performance; a transfer from the investor is not.
  • Cash flow methods need dated flows and, for exact time weighting, valuations at flow boundaries. A closed-trade CSV alone may not contain these records.
  • Money-weighted and time-weighted returns need not match when returns differ across subperiods. An IRR solver can also fail or have multiple solutions for some cash flow patterns.
MethodCalculation in this exampleInterpretation
Time-weighted return(11,000 / 10,000) × (23,100 / 21,000) - 1 = 21%; annualized = 10%Value the account at the external flow and link the subperiod growth factors.
Money-weighted return10,000 × (1 + r)^2 + 10,000 × (1 + r) = 23,100; r = 10%Use the amount and timing of investor cash flows. Irregular dates require a dated cash flow calculation such as XIRR.
Subtract deposit from the ending value(23,100 - 10,000) / 10,000 - 1 = 31%This adjusts dollars but ignores how long the added money was invested; it is not the time-weighted return.

Define the denominator before comparing reports

A portfolio growth rate usually uses the full evaluation window, including days when capital sits idle. A rate measured only from the first entry to the last exit answers a narrower question. Record both endpoints and the equity definition rather than assuming two fields named CAGR use the same inputs.

  • Use elapsed calendar days consistently with the stated year basis. Do not replace 365 with 252 while retaining calendar days in the denominator. Trading-session conventions belong to calculations explicitly defined in session units.
  • A fixed 365-day convention, 365.25-day convention and an actual-year convention can differ around leap years. None should be silently mixed between a strategy and its benchmark.
  • Choose whether ending equity includes open-position mark-to-market profit. A closed-trade balance excludes that exposure; forcing liquidation changes costs and execution assumptions.
  • Check commission, slippage, dividends, funding costs and currency treatment before comparing endpoints. Annualizing a gross return does not convert it into a net return.

Reject invalid inputs instead of reporting a plausible rate

The conventional positive-capital CAGR needs a positive start, a positive elapsed duration and a positive ending value. A zero or negative duration has no annual rate. A zero starting balance has no meaningful percentage denominator. Missing values should remain missing.

  • A positive start ending at zero is a total loss: the endpoint power expression gives -100% for any positive duration. Report the wipeout explicitly; do not interpret it as a repeatable annual growth process.
  • Negative ending equity or a path through insolvency requires separate loss and funding analysis. A fractional power of a negative growth factor does not produce a conventional real CAGR.
  • If equity is unchanged, HPR and CAGR are zero for a valid duration. A software fallback of zero for missing or invalid inputs is not evidence of a flat strategy.

Reconcile TradingView and Pineify results

TradingView describes Annualized return (CAGR) as an annualized return based on initial capital. In Pineify Backtest Deep Report, the current calculation uses initial capital plus net P&L from closed trades, measured from the first entry to the latest exit with 365.25 days per year. This can differ from a full-window, mark-to-market calculation even when both use a compound formula.

  • Export the TradingView trade list and retain the report dates, initial capital, open positions and strategy properties. Upload the CSV to Backtest Deep Report and check the parsed trades and configured capital.
  • To reproduce the current Pineify calculation, use its closed-trade endpoint and 365.25-day basis. To evaluate the full capital commitment, calculate a separate result with the full window and a documented ending valuation.
  • The current report returns zero for fewer than two closed trades or invalid CAGR inputs. Inspect the source inputs before treating a displayed zero as measured performance.
  • Keep deposits and withdrawals in a separate dated ledger. This workflow does not establish that the report supports cash-flow-adjusted TWR or XIRR.
Where Pineify fits

Backtest Deep Report

Import your TradingView trade CSV and inspect the supported return and risk metrics. Reconcile capital, closed trades and elapsed dates before comparing its CAGR with another report.

Also useful: Pine Script AI Coding Agent. Ask for an explicit equity measurement window or a custom statistic after defining its inputs. Review the generated Pine Script and compare its output with a manual calculation.

Explore Backtest Deep Report

Frequently asked questions

Educational information, not investment advice. All numerical examples are hypothetical calculations, not measured strategy results. Annualized backtest returns do not predict future performance.

Sources and verification

Published by Pineify. Pineify is an independent product and is not affiliated with TradingView. Sources support the technical explanations; examples do not establish trading performance.