Un euro demain n'est pas un euro aujourd'hui
Si vous pouvez gagner 5 % par an, 100 aujourd'hui deviennent 105 dans un an. Donc 105 promis dans un an ne valent que 100 aujourd'hui. C'est l'actualisation : convertir un montant futur en valeur actuelle en retirant l'intérêt qu'il aurait pu rapporter. Pour un taux annuel r et t années, VA = cash / (1 + r) ** t. Toute obligation, tout prêt, toute rente et toute retraite sont évalués ainsi, ce qui en fait la base des produits de taux et de la valorisation d'options des sujets suivants.
def present_value(cash, rate, years):
return cash / (1 + rate) ** years
print(round(present_value(100, 0.05, 3), 4)) # 86.3838 100 received in 3 years, worth 86.38 today
print(round(present_value(100, 0.05, 0), 4)) # 100.0 no waiting, no discount
print(round(present_value(100, 0.10, 3), 4)) # 75.1315 a higher rate discounts harderValeur actuelle nette
Les vrais investissements paient en flux : une obligation verse des coupons et un principal final, un projet coûte de l'argent maintenant et le restitue sur plusieurs années. La valeur actuelle nette (VAN) actualise chaque flux selon son propre moment et les additionne. Listez les flux avec le premier à l'instant 0, donc les instants sont 0, 1, 2, ... (np.arange(len(flows))), et actualisez tout le tableau en un appel. Une VAN positive signifie que l'investissement rapporte plus que le taux d'actualisation ; négative, qu'il rapporte moins. Quand le taux monte, la VAN baisse.
import numpy as np
flows = np.array([-100.0, 30.0, 40.0, 50.0]) # pay 100 now, receive 30, 40 and 50 over the next three years
times = np.arange(len(flows)) # 0, 1, 2, 3
for rate in (0.08, 0.12, 0.20):
print(rate, round((flows / (1 + rate) ** times).sum(), 3))
# 0.08 1.763 positive: worth doing at 8%
# 0.12 -5.738 negative: not at 12%
# 0.2 -18.287 the higher the rate, the lower the NPVCapitaliser, et taux continus
Aller vers l'avant est l'image miroir : VF = PV * (1 + r) ** t. Si l'intérêt est versé m fois par an au taux annoncé r, chaque période rapporte r / m et il y a m * t périodes : VF = PV * (1 + r / m) ** (m * t). Un versement plus fréquent fait croître un peu plus : 100 à 5 % deviennent 105,00 par an, 105,12 par mois, 105,13 par jour. À la limite du versement continu, le facteur de croissance est exp(r * t) et le facteur d'actualisation exp(-r * t), la forme utilisée pour valoriser les options car elle se multiplie bien dans le temps.
import math
for m in (1, 2, 12, 365):
print(m, round(100 * (1 + 0.05 / m) ** (m * 1), 4))
# 1 105.0
# 2 105.0625
# 12 105.1162
# 365 105.1267
print(round(100 * math.exp(0.05), 4)) # 105.1271 continuous compounding, the limit
print(round(math.exp(-0.05 * 3), 5)) # 0.86071 the continuous discount factor for 3 years
print(round(100 * (1 + 0.05 / 12) ** (12 * 3), 3)) # 116.147 100 grows for 3 years with monthly interest# How long to double the money at 5%? Exactly ln 2 / ln 1.05, roughly 72 / 5
print(round(math.log(2) / math.log(1.05), 2), round(72 / 5, 1)) # 14.21 14.4ln(1 + r) ou exp(r) - 1 quand vous passez d'une convention à l'autre.VA = cash / (1 + r) ** t: l'argent plus tardif vaut moins ; un taux plus élevé actualise plus fort.- VAN = somme des flux actualisés, le premier à l'instant 0 :
(flows / (1 + r) ** np.arange(n)).sum(); positive = rentable. VF = PV * (1 + r / m) ** (m * t); continu : croissanceexp(r * t), actualisationexp(-r * t); indiquez toujours la convention.
À suivre : les prix d'obligations, actualiser un flux de coupons et un principal final à un taux de marché.
Lab : ce qui est noté
- Ramener un paiement futur à aujourd'hui avec
present_value25 pts - Valoriser un flux de paiements avec
npv25 pts - Capitaliser les intérêts avec
future_value25 pts - Actualiser en continu avec
continuous_discount_factor25 pts