Skip to main content

CAGR for Trading Accounts

TL;DR

CAGR (Compound Annual Growth Rate) is the annualized rate of return that would grow your starting equity into the ending equity over the measurement period, assuming compounding. It's the fairest single number for comparing strategies and traders across different timeframes.

The formula

CAGR = (Ending Value / Starting Value)^(1 / N) − 1

Where N is the number of years.

Example: $50,000 grew to $75,000 over 3 years.

CAGR = (75000 / 50000)^(1/3) − 1 = 1.1447 − 1 = 14.47%

That 14.47%/year, compounded, produces exactly 50% total growth over three years. The arithmetic average (50% / 3 = 16.67%/year) overstates it because compounding means returns build on a growing base.

Why CAGR beats total return

Total return ignores time. "My account doubled" is different if it happened over 1 year or 10 years.

CAGR normalizes to a per-year rate. "My account returned 14% CAGR over 5 years" tells you everything at a glance.

What's realistic

For futures traders, honest CAGR expectations:

CAGRInterpretation
0–10%Low — probably not worth the effort vs. index ETFs
10–20%Solid retail return; matches good fund performance
20–40%Strong; sustainable if drawdowns are controlled
40–100%Exceptional; highly dependent on leverage and account size
> 100%Usually small-account, high-leverage, unsustainable

Anyone telling you they run 500% CAGR for multiple years with a real account is either (a) starting from a tiny base, (b) lying, or (c) about to blow up.

CAGR is not the full picture

CAGR alone ignores risk. Two strategies with identical 25% CAGR:

Strategy A: smooth monthly returns, 8% max drawdown Strategy B: 25% CAGR achieved via one huge year and two losing years, 40% max drawdown

Same CAGR, wildly different tradeability. Always report CAGR alongside:

Calculating CAGR

import pandas as pd

equity = pd.read_csv("equity_curve.csv", parse_dates=["date"]).sort_values("date")
years = (equity["date"].iloc[-1] - equity["date"].iloc[0]).days / 365.25
cagr = (equity["equity"].iloc[-1] / equity["equity"].iloc[0]) ** (1 / years) - 1

print(f"CAGR: {cagr:.2%}")

Compounding in a futures account

Futures accounts compound unevenly because position size is discrete (1 contract, 2 contracts, 3 contracts — not fractions). A $50k account trading 1 ES contract scales up to 2 contracts around $75k–$100k, not smoothly.

This makes true CAGR calculations for small futures accounts a bit lumpy. For strategy evaluation, use the equity curve from a backtest where contract size scales continuously with equity. For live-account reporting, accept the jaggedness.

CAGR and position sizing

A strategy targeting 20% CAGR requires different position sizing than one targeting 50%. Higher CAGR targets = larger positions = larger drawdowns. There is no free lunch.

Best practice: pick a drawdown limit you can emotionally live with (say, 15%), size the strategy to hit roughly that drawdown ceiling, and accept whatever CAGR falls out. Don't size for a CAGR target and discover the drawdown mid-drawdown.

Frequently Asked Questions

What is a good CAGR for a trading account?

10–20% CAGR is solid retail performance. 20–40% is strong and sustainable if drawdowns stay controlled. Above 40% is exceptional but increasingly tied to leverage and small account size; most sustainable CAGRs fall in the 15–30% range.

CAGR vs annualized return — are they the same?

Essentially yes. CAGR is the specific geometric (compounded) annualized return. 'Annualized return' is sometimes used more loosely and can refer to arithmetic averages, which overstate actual compounding. When in doubt, use CAGR.

How long should my backtest be before CAGR is meaningful?

At least 3 years, ideally 5–10 years spanning multiple market regimes. A 1-year CAGR is dominated by the specific conditions of that year; a 5-year CAGR averages across bull, bear, and chop.

Can a strategy have negative CAGR?

Yes — if ending equity is below starting equity, CAGR is negative. A negative CAGR means you lose money at that annual rate, compounded. Stop trading that strategy.