σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademySkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
Skills
AO
+1,2 Tsd. Lernende
Anmelden
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python-Skill›Modul 4 · Bewertung von Anleihen und Optionen›Thema 4.1·~40 Min.Mittelstufe

Barwert und Diskontierung

Position in der SkillModul 4 von 11 · Thema 1 von 16
4.1 Barwert und Diskontierung
—Lab-Punkte— / 100XP gesamt—Serie—

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.

PV = cash / (1 + r)^t FV = PV * (1 + r)^t
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 harder

Kapitalwert

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 NPV

Aufzinsen 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.4
Sagen Sie immer, welchen Zins Sie meinen5 % jährlich, 5 % monatlich aufgezinst und 5 % stetig sind drei verschiedene Sätze: Sie machen aus 100 in einem Jahr 105,00, 105,12 und 105,13. Sie stillschweigend zu mischen ist eine klassische Quelle von Bewertungsfehlern. Nennen Sie die Verzinsungskonvention, halten Sie die Zeit in Jahren und rechnen Sie mit ln(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: Wachstum exp(r * t), Abzinsung exp(-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_value eine künftige Zahlung auf heute holen25 Pkt.
  • Mit npv einen Zahlungsstrom bewerten25 Pkt.
  • Mit future_value Zinsen aufzinsen25 Pkt.
  • Mit continuous_discount_factor stetig abzinsen25 Pkt.
Explorer · lab-66-1
▾ lab-66-1
…
bash · im Browser
learner@quantcraft:~/lab-66-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

Alles in lab-66-1 wird auf die Startdateien zurückgesetzt und das Terminal geleert. Ihre aktuelle Lösung geht verloren – das lässt sich nicht rückgängig machen.

Wird zurückgesetzt
  • main.py → Startcode
  • Terminal-Verlauf und Testausgabe
  • Nicht eingereichte Änderungen
Bleibt erhalten
  • Beste Lab-Punktzahl
  • Ihre XP und Ihre Serie
  • Vorlesungsfortschritt und Notizen

Melde dich an, um deinen Code auszuführen.

Alle Lektionen kannst du kostenlos lesen. Erstelle ein Konto oder melde dich an, um Code auszuführen, Tests zu starten und dieses Lab abzugeben.

  • IDE im Browser mit Bash-Terminal — nichts zu installieren
  • Sofortige Bewertung, XP und dein Platz auf der Skill
Konto erstellenAnmelden
ODER
Weiter mit GitHub