Valore terminale con l'H-model (tv.h_model)¶
Restituisce il valore terminale all'orizzonte N quando in N la crescita è ancora sopra il suo livello stabile e cala linearmente da una crescita di breve periodo \(g_s\) a una crescita di lungo periodo \(g_l\) in 2H periodi, per poi restare a \(g_l\) per sempre. L'H-model (Fuller e Hsia) è un'approssimazione in forma chiusa di questo andamento: il valore a crescita stabile più il valore della crescita aggiuntiva durante il declino. Si usa quando in N è già in corso una transizione.
Formula¶
Per \(g_l < r\) e \(H \ge 0\):
Con \(g_s = g_l\), oppure \(H = 0\), il secondo termine è nullo e il risultato coincide con
tv.gordon sull'ultimo flusso. La formula è un'approssimazione, non il valore
esatto di una crescita in calo lineare; il metodo lo dichiara in explain.conventions.
Esempio¶
from decimal import Decimal
import fairmark as fm
# CF_N 100, crescita dal 10% al 3% in 2H = 10 periodi, tasso 9%
r = fm.tv.h_model(100, "0.10", "0.03", 5, "0.09")
assert r.terminal_value == Decimal("2300")
assert round(r.extra_growth_value, 10) == Decimal("583.3333333333")
# Crescite uguali: l'H-model è il modello di Gordon sull'ultimo flusso
same = fm.tv.h_model(100, "0.02", "0.02", 4, "0.09")
gordon = fm.tv.gordon("0.09", "0.02", last_flow=100)
assert same.terminal_value == gordon.terminal_value
Input¶
| Campo | Significato | Default |
|---|---|---|
last_flow |
Flusso del periodo N, in unità monetarie | obbligatorio |
short_term_growth |
\(g_s\), crescita all'inizio del declino, frazione decimale per periodo, maggiore di −1 | obbligatorio |
long_term_growth |
\(g_l\), crescita stabile, frazione decimale per periodo, maggiore di −1 e inferiore a rate |
obbligatorio |
half_life |
H, in periodi, zero o positivo, anche frazionario; il declino dura 2H periodi | obbligatorio |
rate |
Tasso di attualizzazione della fase terminale, frazione decimale per periodo | obbligatorio |
growth_cap |
Limite alla crescita di lungo periodo, frazione decimale per periodo | nessuno, riportato come assente |
Output¶
| Campo | Significato |
|---|---|
terminal_value |
Valore terminale in N, non attualizzato |
stable_growth_value |
\(CF_N (1 + g_l) / (r - g_l)\) |
extra_growth_value |
\(CF_N H (g_s - g_l) / (r - g_l)\) |
growth_cap |
La crescita di lungo periodo confrontata con il limite; null senza limite |
Convenzioni (esplicite, riportate in explain.conventions)¶
| Convenzione | Opzioni | Default |
|---|---|---|
| Andamento della crescita | calo lineare in 2H periodi, poi \(g_l\) (approssimazione) | fisso |
| Crescita confrontata con il limite | la crescita di lungo periodo \(g_l\); \(g_s\) è transitoria | fissa |
| Tasso della fase terminale | fornito | nessuno: va fornito |
Errori¶
| Codice | Quando |
|---|---|
FM-E001 |
Una crescita è pari o inferiore a −100%, oppure un campo manca o è sconosciuto |
FM-E004 |
La crescita di lungo periodo è pari o superiore al tasso |
FM-E018 |
H è negativo |
FM-E008 |
Overflow aritmetico (input molto lontani da un intervallo realistico) |
Precisione¶
Solo operazioni razionali: risultato esatto fino alle 28 cifre significative del tipo decimale. L'errore di approssimazione dell'H-model rispetto a un andamento esatto in calo è una proprietà del modello e non viene corretto.
Verificato con¶
- Casi di riferimento in
tests/golden/tv.h_model/, da un calcolo indipendente a 50 cifre (scripts/reference_tv.py) e dalla forma chiusa riportata in ciascun file. - Un test unitario verifica che crescite uguali diano esattamente il risultato di
tv.gordon. - Fonte del modello: Fuller, R. J. e Hsia, C.-C. (1984), "A Simplified Common Stock Valuation Model", Financial Analysts Journal 40(5).