Ein Euro morgen ist nicht ein Euro heute
Wenn Sie 5 % im Jahr verdienen können, werden 100 heute in einem Jahr zu 105. Also sind 105, die in einem Jahr versprochen sind, heute nur 100 wert. Das ist Diskontierung: einen künftigen Betrag in seinen Barwert umzurechnen, indem man die Zinsen entfernt, die er hätte verdienen können. Bei einem Jahreszins r und t Jahren gilt BW = cash / (1 + r) ** t. Jede Anleihe, jeder Kredit, jede Rente und jede Pension wird so bewertet, was es zur Grundlage von Festverzinslichem und Optionsbewertung in den nächsten Themen macht.
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 harderKapitalwert
Echte Investitionen zahlen in Strömen: Eine Anleihe zahlt Kupons und am Ende den Nennwert, ein Projekt kostet jetzt Geld und bringt es über Jahre zurück. Der Kapitalwert (NPV) zinst jeden Zahlungsstrom nach seinem eigenen Zeitpunkt ab und addiert sie. Listen Sie die Zahlungen mit der ersten zum Zeitpunkt 0 auf, die Zeiten sind also 0, 1, 2, ... (np.arange(len(flows))), und zinsen Sie das ganze Array in einem Aufruf ab. Ein positiver Kapitalwert heißt, die Investition bringt mehr als der Diskontsatz; ein negativer, weniger. Steigt der Zins, fällt der Kapitalwert.
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 NPVAufzinsen und stetige Zinssätze
Vorwärts ist das Spiegelbild: FW = PV * (1 + r) ** t. Werden Zinsen m-mal pro Jahr zum quotierten Satz r gezahlt, bringt jede Periode r / m, und es gibt m * t Perioden: FW = PV * (1 + r / m) ** (m * t). Häufigere Zahlung wächst etwas stärker: 100 zu 5 % werden jährlich 105,00, monatlich 105,12, täglich 105,13. Im Grenzfall stetiger Zahlung ist der Wachstumsfaktor exp(r * t) und der Abzinsungsfaktor exp(-r * t), die in der Optionsbewertung verwendete Form, weil sie sich über die Zeit gut multipliziert.
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) oder exp(r) - 1 um, wenn Sie zwischen Konventionen wechseln.BW = cash / (1 + r) ** t: spätere Zahlungen sind weniger wert; ein höherer Zins diskontiert stärker.- NPV = Summe der abgezinsten Zahlungen, die erste bei Zeitpunkt 0:
(flows / (1 + r) ** np.arange(n)).sum(); positiv = lohnend. FW = PV * (1 + r / m) ** (m * t); stetig: Wachstumexp(r * t), Abzinsungexp(-r * t); nennen Sie stets die Konvention.
Als Nächstes: Anleihepreise, einen Kuponstrom und einen Nennwert zu einem Marktzins abzinsen.
Lab: Was bewertet wird
- Mit
present_valueeine künftige Zahlung auf heute holen25 Pkt. - Mit
npveinen Zahlungsstrom bewerten25 Pkt. - Mit
future_valueZinsen aufzinsen25 Pkt. - Mit
continuous_discount_factorstetig abzinsen25 Pkt.