In the Detailed Portfolio Report, how are "Avg Annual ROR" and "Compound Annual ROR" calculated?

...And why is this the number that's used for annual return in the CloudQuant Summary?

Maybe I just haven't read through a finance glossary in a while, but I can't make heads or tails of where this number comes from. Just gonna demonstrate a few calculations to try and work through this in my head. Here are some stats taken from a backtest I ran:

Start Date: 2011-11-01
End Date: 2014-11-03
Avg Annual ROR: 19.09%
Compound Annual ROR: 17.47%

Please note that my algorithm invests a base $10,000,000 per day, regardless of how much was gained or lost in the days before. Returns and losses are not reinvested.

Alright, so further down the report, there are some other ROR numbers that are recorded. Here they are:

Avg Daily Return: 9 bps
Avg Monthly ROR: 1.92%
Avg Quarterly ROR: 5.75%

These numbers seem to make sense to me, with the way my algorithm operates. If you divide 5.75% by 3 (three months per quarter), you get 1.92%. Then if you divide 1.92% by 21 (that many trading days per month), you get 0.09%.

But... Multiply 5.75% by 4 (four quarters per year), and you get 23.00%, which is higher than BOTH the Average and the Compound Annual ROR that are reported above. And if for some reason it was compounded, the number would be even higher.

So that doesn't seem to make sense. So then I look at my yearly performance numbers:

2011: 1.35%
2012: 34.74%
2013: 20.80%
2014: 12.29%

If I want to average these, I'll need to do a time-weighted average because I was only in the market for parts of 2011 and 2014. Here's the math:

((1.35 * 2/12) + (34.74 * 12/12) + (20.80 * 12/12) + (12.29 * 10/12)) / ((2/12) + (12/12) + (12/12) + (10/12)) = 22.00%

Very similar to the last number I calculated, but still nowhere near the originally reported numbers. So maybe the calculation forgets to time-weight it?

(1.35 + 34.74 + 20.80 + 12.29) / 4 = 17.30%

Alright, now we're getting somewhere. Looks very similar to the Compound Annual ROR number. Is there a mistake in how this number is calculated, or am I just looking at this completely the wrong way? Some documentation on how these reports are generated would be greatly appreciated.

Comments

  • Hi,

    If you already downloaded the report, you can scroll to the bottom and click on the "Toggle on/off the raw code" button and search the stats you are looking for and see how they are calculated. The way report calculates the avg annual return as you can find in the code is:

    np.power((1.0+self.totalProfit/self.denominatorCapital),1.0/self.numOfYears) - 1,

    which is basically the common compound return since it is applied by the power of inverse number of years. The same methodology is implemented for daily, monthly and quarterly return. The compound annual return measures the continuously compound return which is basically the log return over the period assuming 1yr (365.25 days) as the unit. The corresponding code is:

    self.compAnnualReturn = np.log(1.0+self.totalProfit/self.denominatorCapital)/self.numOfYears,

    Let me know if you have any other question over the stats and any suggestion is appreciated. Thanks!

Sign In or Register to comment.