# atoti.experimental.finance.irr module#

atoti.experimental.finance.irr(*, cash_flows, market_value, date, precision=0.001)#

Return the Internal Rate of Return based on the underlying cash flows and market values.

The IRR is the rate r that nullifies the Net Present Value:

$\begin{split}NPV = \\sum_{i=0}^{T} CF_i (1 + r)^{\\frac{T - t_i}{T}} = 0\end{split}$

With:

• $$T$$ the total number of days since the beginning

• $$t_i$$ the number of days since the beginning for date i

• $$CF_i$$ the enhanced cashflow for date i:

• CF of the first day is the opposite of the market value for this day: $$CF_0 = - MV_0$$.

• CF of the last day is increased by the market value for this day: $$CF_T = cash\\_flow_T + MV_T$$.

• Otherwise CF is the input cash flow: $$CF_i = cash\\_flow_i$$.

This equation is solved using the Newton’s method.

Parameters

Example

With the following data:

Date

MarketValue

CashFlows

2020-01-01

1042749.90

2020-01-02

1099720.01

2020-01-03

1131220.24

2020-01-04

1130904.32

2020-01-05

1748358.77

-582786.257893061

2020-01-06

1791552.54

The IRR can be defined like this:

m["irr"] = irr(cash_flows=m["CashFlow.SUM"], market_value=m["MarketValue.SUM"], date=h["Date"])
cube.query(m["irr"])
>>> 0.14397

Return type

MeasureDescription