ranaroussi / quantstats

Portfolio analytics for quants, written in Python
Apache License 2.0
4.59k stars 809 forks source link

Issue with cagr function in stats #356

Open lemming78 opened 1 month ago

lemming78 commented 1 month ago

I believe there is a mistake in the code when the return series is monthly.

I had to amend the periods argument to 365 to get a cagr figure that made sense. I can't help further, i'm not a python developer but was looking to help on this.

def cagr(returns, rf=0.0, compounded=True, periods=365):
    """
    Calculates the communicative annualized growth return
    (CAGR%) of access returns

Could you kindly implement a fix? Total return is fine instead.

jakewillms17 commented 1 month ago

Hey the reason they differ is because the utils_cagr function is incorrectly counting calendar days instead of trading days when identifying the annualization period.

years = (returns.index[-1] - returns.index[0]).days / periods

this method will unfortunately count calendar days, when in reality it would be more accurate to count the length of the returns object.

hopefully they fix this, I had to do this locally as I was getting incorrect CAGR's.