python中使用irr与xirr 使用XIRR函数

文章目录

可直接调用Numpy中的库函数,直接使用即可

1
print(np.irr([30000, -5100, -5100, -5100, -5100, -5100, -5100]))

使用XIRR函数

很遗憾,不知道为什么Numpy中没有提供该函数。

参考网上的大神:https://stackoverflow.com/questions/8919718/financial-python-library-that-has-xirr-and-xnpv-function

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def xirr(transactions):
years = [(ta[0] - transactions[0][0]).days / 365.0 for ta in transactions]
residual = 1
step = 0.05
guess = 0.05
epsilon = 0.0001
limit = 10000
while abs(residual) > epsilon and limit > 0:
limit -= 1
residual = 0.0
for i, ta in enumerate(transactions):
residual += ta[1] / pow(guess, years[i])
if abs(residual) > epsilon:
if residual > 0:
guess += step
else:
guess -= step
step /= 2.0
return guess-1
from datetime import date
tas = [ (date(2010, 12, 29), -10000),
(date(2012, 1, 25), 20),
(date(2012, 3, 8), 10100)]
print(xirr(tas)) #0.0100612640381