Tasso interno di rendimento di flussi datati (tvm.xirr)¶
Trova il tasso annuo al quale il valore attuale netto di flussi di cassa datati è nullo. È la
controparte per flussi datati di tvm.irr: si usa per investimenti i cui flussi
non cadono su periodi regolari, come un commitment in un fondo con richiami e distribuzioni
irregolari. L'algoritmo è deterministico, rifiuta gli input per i quali più di un tasso
risolve l'equazione e dichiara se l'unicità del tasso restituito è dimostrata. Con i valori di
default il risultato coincide con quello della funzione XIRR dei fogli di calcolo.
Formula¶
Trova \(r\) tale che
dove \(D_1\) è la data del primo flusso e \(DF\) è il fattore di sconto di
tvm.xnpv: \((1 + r/m)^{-m t}\), oppure \(e^{-r t}\) con capitalizzazione continua.
Con i valori di default (Actual/365 (Fixed), capitalizzazione annuale):
Esempio¶
Un'uscita di 10000 il 1° gennaio 2008 e quattro entrate fino al 1° aprile 2009.
from decimal import Decimal
import fairmark as fm
flows = [
("2008-01-01", -10000),
("2008-03-01", 2750),
("2008-10-30", 4250),
("2009-02-15", 3250),
("2009-04-01", 2750),
]
r = fm.tvm.xirr(flows)
assert abs(r.xirr - Decimal("0.37336253351883151031")) < Decimal("1e-15")
assert abs(r.xirr - Decimal("0.373362535")) < Decimal("0.00000001") # valore pubblicato
assert r.uniqueness_verified # un solo cambio di segno in ordine di data
print(r.solver, r.iterations, r.tolerance) # newton 6 1E-18
print(r.xnpv_at_xirr) # circa zero: verifica del risultato
Il valore pubblicato è 0.373362535. Excel interrompe le iterazioni quando il tasso è preciso allo 0.000001 per cento, quindi la nona cifra decimale non è significativa: il valore esatto è 0.37336253351883..., che arrotondato a nove decimali dà 0.373362534.
Algoritmo¶
Lo stesso algoritmo deterministico di tvm.irr, con due differenze:
- La griglia è definita su tassi annui effettivi (−0.99, −0.95, da −0.90 a 1.00 passo 0.05, da 1.25 a 10 passo 0.25) e convertita nella capitalizzazione scelta prima della scansione. L'intervallo di tassi economici esplorato, e quindi il giudizio sull'unicità, non dipende da come è espresso il tasso.
- I cambi di segno sono contati sui flussi in ordine di data; i flussi con la stessa data sono compensati.
La regola di unicità è quella di tvm.irr: più di una radice trovata, uno scarto dispari tra i
cambi di segno \(s\) e le radici trovate, oppure nessuna radice trovata con \(s > 1\) danno
FM-E011. Una radice trovata con uno scarto pari e positivo è restituita con
uniqueness_verified = false, perché non si possono escludere ulteriori tassi a coppie. Con
\(s = 1\) l'unicità del tasso è dimostrata.
Input¶
| Campo | Significato | Default |
|---|---|---|
cash_flows |
Flussi datati {date, amount}, in qualsiasi ordine; almeno un importo positivo e uno negativo |
obbligatorio |
day_count |
act_365_fixed, act_360, act_act_isda, thirty_360 oppure thirty_e_360 |
act_365_fixed |
compounding |
Capitalizzazione del tasso restituito: annual, semi_annual, quarterly, monthly oppure continuous |
annual |
guess |
Punto di partenza del metodo di Newton, frazione decimale annua | 0.10 |
Output¶
| Campo | Significato |
|---|---|
xirr |
Tasso annuo al quale l'XNPV è nullo, frazione decimale, con la capitalizzazione scelta |
uniqueness_verified |
true quando nessun altro tasso può risolvere l'equazione; false quando non si possono escludere ulteriori tassi a coppie |
xnpv_at_xirr |
XNPV al tasso restituito (circa zero) |
solver |
newton, bisection oppure grid (exact root) |
iterations |
Iterazioni dell'algoritmo che ha prodotto il risultato |
tolerance |
Criterio di arresto sul passo del tasso, \(10^{-18}\) |
Convenzioni (esplicite, riportate in explain.conventions)¶
| Convenzione | Opzioni | Default |
|---|---|---|
| Calcolo dei giorni | cinque convenzioni, vedi dates.year_fraction |
Actual/365 (Fixed), il default dei fogli di calcolo ECMA-376 |
| Capitalizzazione | annuale, semestrale, trimestrale, mensile, continua | annuale, il default dei fogli di calcolo ECMA-376 |
| Origine dei tempi | data del primo flusso | fissa |
| Griglia dell'algoritmo | tassi annui effettivi da −0.99 a 10, convertiti nella capitalizzazione | fissa |
| Criterio di arresto | passo sul tasso inferiore a \(10^{-18}\), al massimo 200 iterazioni | fisso |
| Punto di partenza del metodo di Newton | guess |
0.10 |
Ogni convenzione è riportata indicando se è stata fornita o se è il default, e il risultato dichiara se l'unicità è dimostrata o non verificata, con il motivo.
Errori¶
| Codice | Quando |
|---|---|
FM-E001 |
Un campo è mancante o sconosciuto, oppure una convenzione non è tra le opzioni elencate |
FM-E005 |
Nessuna radice è stata isolata sulla griglia e il metodo di Newton a partire da guess non converge |
FM-E006 |
Gli importi non sono di entrambi i segni (incluso il caso di lista vuota) |
FM-E008 |
Overflow aritmetico durante il raffinamento della radice |
FM-E009 |
Una data è malformata, non esiste o è fuori dall'intervallo 1900-01-01 - 2199-12-31 |
FM-E011 |
Più di un tasso annulla l'XNPV, oppure è noto che esiste un altro tasso; il messaggio elenca gli intervalli |
Precisione¶
Le frazioni d'anno sono rapporti esatti. I fattori di sconto con esponente frazionario usano la funzione potenza decimale, e la capitalizzazione continua l'esponenziale decimale. Rispetto a un calcolo indipendente a 60 cifre, questi concordano entro circa \(10^{-18}\) in termini relativi o meglio su input tipici; le potenze intere concordano entro circa \(10^{-24}\) in termini relativi o meglio. La tolleranza di \(10^{-18}\) è un criterio di arresto sul passo del tasso, non un limite all'errore, e vicino a una radice doppia la precisione è minore. Il caso di riferimento a piena precisione è verificato entro \(10^{-19}\).
Verificato con¶
- Esempio pubblicato: esempio della funzione
XIRRdi ECMA-376 / Excel, 0.373362535. - Concorda con la funzione
XIRRdi Excel e LibreOffice e conpyxirr.xirr. - Convenzioni di calcolo dei giorni: definizioni delle 2006 ISDA Definitions, sezione 4.16.