给定一个日收益率序列,如何计算复合年化收益率? 如果你用backtrader (使用Returns分析者统计),quantstats(cagr函数), empyrical(annual_return函数),pyfolio分别统计同一个收益率序列的年化收益率,会发现quantstats统计的和其它几个不一样(backtrader,empyrical,pyfolio是一样的,pyfolio底层采用的也是empyrical的),为啥会这样呢?其实他们都没有错。 复合年化收益率理论公式是这样的: CAGR =([(Ending Value / Beginning Value) ^ (1 / number of years)] - 1) 之所以有不同结果,是因为其中的年数number of years各家计算方式不一样。 假设收益率系列如下:
quantstats是这样计算年数的,它用最后日期2016-10-21减去起始日期2016-8-24,得到期间有几个“自然日”,这里是58天,然后除以365,得到年数是0.1589年。而其它库计算年数是这样的:统计交易日数,这里是22天,然后除以一年252个“工作日“数,得到年数为0.8730年。 正是年数计算方法不一致,导致quantstats的年化收益率与其它库的不一样,有时差异极大,可能差异高达几倍。
|