Valore attuale netto di flussi datati (tvm.xnpv)¶
Attualizza a una data di valutazione flussi di cassa che avvengono in date di calendario, come
un closing, una distribuzione o un earn-out. Il tempo di ciascun flusso è la sua frazione d'anno
dalla data di valutazione secondo la convenzione di calcolo dei giorni scelta, e il tasso è un
tasso annuo con capitalizzazione esplicita. Con i valori di default il risultato coincide con
quello della funzione XNPV dei fogli di calcolo.
Formula¶
dove \(D_0\) è la data di valutazione, \(D_j\) la data del flusso \(j\), \(m\) il numero di periodi di
capitalizzazione all'anno, e la frazione d'anno è calcolata come in
dates.year_fraction. Con i valori di default (Actual/365 (Fixed),
capitalizzazione annuale, valutazione alla data del primo flusso):
Esempio¶
Tasso del 9%, cinque flussi dal 1° gennaio 2008 al 1° aprile 2009. Il valore pubblicato è 2086.65, arrotondato a due decimali.
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.xnpv("0.09", flows)
assert round(r.xnpv, 2) == Decimal("2086.65")
assert abs(r.xnpv - Decimal("2086.64760203153662166361")) < Decimal("1e-15")
print(r.valuation_date) # 2008-01-01, la data del primo flusso
print(r.conventions[0]) # day count: Actual/365 (Fixed), ... (default, ECMA-376)
# Gli stessi flussi valutati sei mesi prima.
early = fm.tvm.xnpv("0.09", flows, valuation_date="2007-07-01")
assert abs(early.xnpv - Decimal("1997.93821626701985989269")) < Decimal("1e-15")
Le date sono stringhe ISO 8601 oppure oggetti datetime.date; i flussi possono essere in
qualsiasi ordine.
Input¶
| Campo | Significato | Default |
|---|---|---|
rate |
Tasso di attualizzazione annuo, frazione decimale (0.09 = 9%), espresso con la capitalizzazione compounding |
obbligatorio |
cash_flows |
Flussi datati {date, amount}; gli importi negativi sono pagamenti, quelli positivi incassi |
obbligatorio |
valuation_date |
Data alla quale è calcolato il valore; nessun flusso può precederla | data del primo flusso |
day_count |
act_365_fixed, act_360, act_act_isda, thirty_360 oppure thirty_e_360 |
act_365_fixed |
compounding |
annual, semi_annual, quarterly, monthly oppure continuous |
annual |
Output¶
| Campo | Significato |
|---|---|
xnpv |
Valore attuale netto alla data di valutazione |
valuation_date |
La data di valutazione usata, fornita o di default |
flows |
Per ciascun flusso: date, year_fraction (anni dalla data di valutazione), discount_factor, present_value |
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 |
| Data di valutazione | qualsiasi data non successiva al primo flusso | data del primo flusso |
Ogni convenzione è riportata indicando se è stata fornita o se è il default. ECMA-376 valuta alla data del primo flusso elencato e rifiuta i flussi anteriori; il default alla data del primo flusso dà lo stesso valore ogni volta che il foglio di calcolo accetta l'input.
Errori¶
| Codice | Quando |
|---|---|
FM-E001 |
Un campo è mancante o sconosciuto, oppure una convenzione non è tra le opzioni elencate |
FM-E002 |
cash_flows è vuoto |
FM-E003 |
Il tasso per periodo di capitalizzazione, \(r/m\), è pari o inferiore a −100% |
FM-E008 |
Overflow aritmetico (input molto al di fuori di un intervallo realistico) |
FM-E009 |
Una data è malformata, non esiste o è fuori dall'intervallo 1900-01-01 - 2199-12-31 |
FM-E010 |
Un flusso ha una data anteriore alla data di valutazione |
Precisione¶
Le frazioni d'anno sono rapporti esatti, e i flussi che cadono a un numero intero di periodi di capitalizzazione usano potenze intere esatte; rispetto a un calcolo indipendente a 60 cifre, concordano entro circa \(10^{-24}\) in termini relativi o meglio. Gli esponenti frazionari usano la funzione potenza decimale e la capitalizzazione continua l'esponenziale decimale; questi concordano entro circa \(10^{-18}\) in termini relativi o meglio su input tipici. I tassi negativi sono attualizzati tramite il reciproco di \(1 + r/m\), mantenendo la piena precisione relativa. I casi di riferimento a piena precisione sono verificati entro \(10^{-19}\).
Verificato con¶
- Esempio pubblicato: esempio della funzione
XNPVdi ECMA-376 / Excel, 2086.65. - Concorda con la funzione
XNPVdi Excel e LibreOffice e conpyxirr.xnpv. - Convenzioni di calcolo dei giorni: definizioni delle 2006 ISDA Definitions, sezione 4.16.