Enter what the position cost you on the start date, and what it was worth on the end date. The page gives you the compound annual growth rate, and every line of the arithmetic is printed below the result with your own numbers in it. The beginning value is the money you actually put in, not what the position was worth that day; use the market value instead and the answer comes out different.
The compound annual growth rate is the one steady yearly rate that would take the beginning value to the ending value over the stretch you measured. It is not the average of the yearly returns you actually had along the way, and it is not a report on any single year: it is the rate that, applied once a year and compounded, lands on the same ending value.
CAGR = (ending value / beginning value) ^ (1 / number of years) minus 1
then × 100 to read it as a percent
The number of years is not typed in anywhere. It is worked out from your two dates: the actual count of days between them, divided by 365.25, so a leap year is spread across the whole stretch instead of landing on one year. The multiple is the ending value divided by the beginning value. The root is that multiple taken to the power of one over the number of years, and the rate is the root minus 1, read as a percent.
The page prints every one of those steps with your own numbers under the result, rather than only the last figure, so you can follow it and check it. Here it is with an example, 10,000 in on 2022-01-01 and 15,200 out on 2026-03-01:
Beginning value = 10000
Ending value = 15200
Actual days = 2026-03-01 minus 2022-01-01 = 1520 days
Years = 1520 / 365.25 = 4.1615
Multiple = 15200 / 10000 = 1.52
Root = 1.52 ^ (1 / 4.1615) = 1.10585107
CAGR = (1.10585107 minus 1) × 100 = 10.58%
So the figure is 10.58% a year. The multiple of 1.52 says the position ended at 152% of what it cost, a total change of 52.00% over the 4.1615 years. The yearly figure is smaller than the total because it is charged again each year on a larger value, which is what compounding does.
One line, and it is the rule everywhere on this site: nothing here is ever rounded up. The number of years and the multiple are shown to four decimals, the root to eight, and the rate to two, and each figure is cut off at that point rather than brought to the nearest. The figure on the screen is therefore never higher than the number it came from.
Each line of the working is worked out from the line above it exactly as that line is printed. Check the arithmetic with the figures on the screen and the last step lands on the printed answer, instead of a hundredth away from it. A spreadsheet does not cut figures down the way this page does, so on the same two values the last decimal can come out differently. The spreadsheet section below sets out both routes.
The beginning value is the money you put into the position, on the start date. It is a cost, not a valuation, and the choice changes the answer. If you enter the market value the position had on the start date instead, you get a different figure: the ending value is divided by a larger number whenever that market value is above what you paid, so the rate comes out lower, and it comes out higher when the position was worth less that day than it cost. This page uses the cost.
Dividends are not counted by this page. If the position paid you dividends during the stretch and you reinvested them, the extra shares are part of what the position is worth at the end, so enter the ending value with them included. If you took the dividends as cash, the ending value does not contain them, and this page does not add them back: the two boxes are the whole of the money it looks at.
Taxes, commissions, platform fees, spreads and currency movements are not deducted from either box, and nothing is added to them either. Both values are used exactly as you typed them, and the rate that comes back is the rate of those two numbers over those two dates, nothing more.
A blank box is not worked out, and neither is a beginning value of 0: the rate divides by it. The page says so under the button rather than printing a figure that could not be trusted.
A fall is printed with a minus sign and read as a fall. Here is the same 10,000 over the same two dates, with an ending value of 9,200:
Multiple = 9200 / 10000 = 0.92
Root = 0.92 ^ (1 / 4.1615) = 0.98016296
CAGR = (0.98016296 minus 1) × 100 = -1.99%
Read that as a fall of 1.99% a year. The total change over the stretch was minus 8.00%, and the note under the result says plainly that the ending value is below the beginning value, so the minus sign is the fall and not a mistake. The yearly figure is closer to zero than the total, because the same rate is charged again each year on a smaller value.
An ending value of 0 is worked out rather than refused. The multiple is 0, the root is 0, and the rate comes out as minus 100 percent, which is as low as this formula can go for an ending value of 0 or more. The page prints that figure, the whole working and a line saying what it means, rather than hiding it behind an error.
The two boxes and the two dates are the whole input. These things are outside it, and none of them is a rounding difference:
There are no live prices anywhere on this page. Both values are typed by you and no quote is fetched, so every figure on the screen traces back to your own two numbers and your own two dates.
Both routes use the same four things. Put the beginning value in A1, the ending value in A2, the start date in A3 and the end date in A4.
As a formula, typed into any empty cell:
=(A2/A1)^(1/((A4-A3)/365.25))-1
With a function, Excel and Google Sheets both have RATE, which returns the rate per period and gives the same figure when the period is a year:
=RATE((A4-A3)/365.25,0,-A1,A2)
The middle zero is the payment box and it has to be there, because nothing is paid in or taken out during the stretch. The beginning value goes in as a negative number, because a function like RATE wants money going out and money coming in to carry opposite signs. Format the cell as a percentage to read it.
One difference is worth knowing about: a spreadsheet rounds a number when it displays it but keeps the full value underneath, while this page cuts every figure down at the point shown. On the same inputs the last decimal can differ, and when it does, this page is the one that matches the working printed above it.
The rate answers one question about a position, and two others come up beside it. If you want the money rather than the rate, the stock profit calculator takes your buys and your sell price and works out what the position made or lost, with the fee on the way in and the fee on the way out counted. If the position paid you income during the stretch, the dividend calculator works that out on its own, and the ending value you type here is the place to put it back in if you reinvested it. And if what you are after is the price you paid rather than a rate, the average down calculator pools your buys into one figure per share, and it will include a buy you have not made yet if you want to see what that would do.
Divide the ending value by the beginning value to get the multiple. Take that multiple to the power of one over the number of years, then subtract 1. Multiply by 100 and you have the rate as a percent. The number of years is the actual count of days between your two dates divided by 365.25, never a number you type in. With the example above: 15200 / 10000 = 1.52, then 1.52 ^ (1 / 4.1615) = 1.10585107, then (1.10585107 minus 1) × 100 = 10.58%. Those are the same three steps the boxes above run on your own figures, and the page prints each one of them rather than only the last.
It is the steady yearly rate that would carry the beginning value to the ending value across five years. A 5 year CAGR of 10% a year means the value multiplied by about 1.10 each year, five times over, which is a multiple of 1.6105 (1.10 ^ 5, cut down to four decimals) and a total change of 61.05%. It is not the same thing as the five yearly returns you actually had: those can be up and down, and still produce the same end figure, and a 5 year CAGR says nothing about any one of them. Five years is also a number this page gets from your dates rather than from the box, and a stretch that reads as five calendar years does not always land exactly on 5.0000 here. For example, 2021-01-01 to 2026-01-01 is 1,826 days, which is 4.9993 years, so the years box is worth reading alongside the rate.
Doubling is a multiple of 2, so over five years the rate is 2 ^ (1/5) minus 1. The root is 1.14869835 to eight decimals, and (1.14869835 minus 1) × 100 is 14.86% on this page's rule of cutting down, or 14.87% before anything is cut. The same sum for other stretches: 2 ^ (1/3) is 25.99% over three years, and 2 ^ (1/10) is 7.17% over ten. When the years come from two real dates they are whatever the dates give: 2021-01-01 to 2026-01-01 is 4.9993 years on this page, and a doubling from 10,000 to 20,000 over that stretch comes out at 14.87%.
This page does not grade a rate, and there is no line of arithmetic in it that could: what counts as good depends on the risk that was taken, on how long the money was committed, and on what else that money could have done, and none of those is an input here. What the page can do is show you what 12% comes to in figures. A rate of 12% a year over five years is a multiple of 1.7623, since 1.12 ^ 5 is 1.7623416832 cut down to four decimals, and that is a rise of 76.23% on the money at the start. Read the other way round, a multiple of 1.7623 over five years works back to 11.99% a year rather than 12.00%. That gap of one hundredth is the four decimal cut showing up in the last step, not an error in the sum.
This page is a calculator, not investment advice. Taxes, commissions, fees, spreads and currency movements are not counted anywhere on this page. There are no live prices here: the beginning value and the ending value are both typed by you. Contact: [email protected]