The ActiveState Recipes site has a function implementing Internal Rate of Return in Python:
def irr(cashflows, iterations=100):
"""The IRR or Internal Rate of Return is the annualized effective
compounded return rate which can be earned on the invested
capital, i.e., the yield on the investment.
>>> irr([-100.0, 60.0, 60.0, 60.0])
0.36309653947517645
"""
rate = 1.0
investment = cashflows[0]
for i in range(1, iterations+1):
rate *= (1 - npv(rate, cashflows) / investment)
return rate
This code returns correct values (at least for the couple of examples that I have checked against Excel), but I would like to know why.
- It doesn't appear to be an implementation of Newton's Method (no derivative) or the Secant Method (only keeps track of one iteration).
- In particular, the definition of the investment variable as the first cashflow element (and it's subsequent use) confuses me.
Any ideas?