我正在编写一个Python函数,将复合回报率转换为年回报率:

annual_rate = ((1 + ((1 + compound_rate) ** (1 / nb_days) - 1)) ** 365 - 1)

这行得通
compound_rate = 0.1
nb_days = 100
>>0.41606536550485806

但在某些情况下,返回复数
compound_rate = -1.8536
nb_days = 362
>>(-1.852192062046392-0.022192088919279443j)

下面是一个真实的例子:
如果我有以下付款押金表:
03/03/2018  £1000
03/04/2018  £1000
03/05/2018  £1000
03/06/2018  £1000
03/07/2018  £1000
03/08/2018  £1000
03/09/2018  £1000
03/10/2018  £1000
03/11/2018  £1000
03/12/2018  £1000
03/01/2019  £1000
03/02/2019  £1000

.. 如果我把所有的钱都输光了,到2019年2月底的时候,我会投入12000英镑,损失11900英镑,超过362天。
如果我从那里应用我的公式,就会返回一个复数(见上面的第二个例子)。
有什么我没看到的吗?从字面上讲,这个结果对我来说并不真实。

最佳答案

这可能是你想要的:

import numpy as np
l = [-1000]*12
l.append(100)
print(l)
#[-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 100]
print(np.irr(l))
#-0.9090909090908827

10-05 21:09
查看更多