Modellwelt

Alle Werte gelten für dieselbe simulierte Two-State Economy. Änderungen werden serverseitig validiert und in allen Ansichten konsistent neu berechnet.

Anleihe (risikolos)
Aktie
Wahrscheinlichkeit & Call
Optional: Projekt-NPV

Marktübersicht

t = 0 (heute)
Anleihe 10,00 €
Aktie 10,00 €
Call 2,00 €
t = 1 · Up (p = 0,40)
Anleihe 11,00 €
Aktie 20,00 €
Call 5,00 €
t = 1 · Down (1-p = 0,60)
Anleihe 11,00 €
Aktie 5,00 €
Call 0,00 €
KennzahlWert
Sicherer Zinssatz i10,00 %
Aktienrendite (Up, Down) 100,00 % / -50,00 %
Erwarteter Aktienwert E[S1]11,00 €
Erwartete Aktienrendite10,00 %
Varianz der Rendite0,5400
Volatilität73,48 %
Call-Payoff (Up, Down) 5,00 € / 0,00 €

Perspektiven

Dieselbe Modellwelt aus Sicht verschiedener wirtschaftlicher Rollen.

Anleger / Aktienkäufer

Was zahle ich heute, was besitze ich morgen – und was bedeutet die erwartete Rendite?

📖 Der Anleger kauft heute eine Aktie für 10 €. Morgen ist sie entweder 20 € (Up) oder 5 € (Down) wert.

Cashflows

PositionheuteUpDown
Aktienkauf -10,00 € +20,00 € +5,00 €

Formeln & Einsetzung

  • Zustandsrenditen: r = S1 / S0 - 1
    r = (20, 5) / 10 - 1
  • Erwartete Rendite: E[r] = p·r_u + (1-p)·r_d
    E[r] = 0.4·1 + 0.6·-0.5
  • Varianz: Var(r) = p·(r_u - E[r])² + (1-p)·(r_d - E[r])²
    Var(r) = 0.4·(1 - 0.1)² + 0.6·(-0.5 - 0.1)²
  • Volatilität: σ = √Var(r)
    σ = √0.54

Rechenschritte

  1. Rendite Up: 20/10 - 1 = 1
  2. Rendite Down: 5/10 - 1 = -0.5
  3. Erwartete Rendite: 0.1
  4. Varianz: 0.54
  5. Volatilität: 0.734847

Python

import numpy as np
S0 = 10.0
S1 = np.array([20.0, 5.0])
P = np.array([0.4, 0.6])
r = S1 / S0 - 1
mu = P @ r
var = P @ (r - mu) ** 2
sigma = var ** 0.5

Ergebnisse

Rendite Up 1,000000
Rendite Down -0,500000
Erwartete Rendite 0,100000
Erwarteter Wert morgen 11,000000
Varianz 0,540000
Volatilität 0,734847

Interpretation

Die Aktie liefert im Up-Zustand +100.0% und im Down-Zustand -50.0%. Die erwartete Rendite von 10.0% ist ein wahrscheinlichkeitsgewichteter Durchschnitt – sie wird in keinem der beiden Zustände tatsächlich realisiert. Der Erwartungswert sagt nichts darüber, welcher Zustand eintritt.

⚠️ Idealisierte Modellwelt: keine Transaktionskosten, Steuern, Liquiditätsrisiken oder Bid-Ask-Spreads.

Replikation & Arbitrage

Auszahlungsmatrix M (Zeilen: Up/Down · Spalten: Anleihe/Aktie)

AnleiheAktie
Up11,0020,00
Down11,005,00

Replikation des Calls: Löse M · φ = C1 = (5,00, 0,00)ᵀ

  • Aktien-Einheiten φ_S = 0,333333
  • Anleihe-Einheiten φ_B = -0,151515 (negativ = Kreditaufnahme)
  • Replikationspreis V0 = 1,81818 €
  • Verifikation: M · φ = (5,000000, 0,000000) ✓ stimmt mit C1 überein

Arbitrageprüfung

Marktpreis C02,00000 €
Replikationspreis1,81818 €
Abweichung+0,18182 €
Status überteuert

Strategie

  1. Claim am Markt für 2.000000 verkaufen (Short).
  2. Replikationsportfolio kaufen: 0.333333 Aktie(n) und -0.151515 Anleihe(n) für 1.818182.
Cashflow heuteUpDownrisikolos?
+0,18182 € 0,00000 € +0,00000 € ja ✓

Marktvollständigkeit & Arrow-Debreu

Rang(M) = 2 bei 2 Zuständen – der Markt ist vollständig.

Die Auszahlungsmatrix hat Rang 2 bei 2 Zuständen. Der Markt ist vollständig: Jeder beliebige Zahlungsvektor lässt sich durch ein Portfolio aus Anleihe und Aktie exakt nachbilden.

Arrow-Debreu SecurityPayoffZustandspreisPortfolio (Anleihe, Aktie)
Up-Security(1, 0) 0,36364 € (-0,030303, 0,066667)
Down-Security(0, 1) 0,54545 € (0,121212, -0,066667)

Preis des Calls über Zustandspreise: π_u · 5,00 + π_d · 0,00 = 1,81818 € – identisch mit dem Replikationspreis.

Freien Claim bewerten

Theorie & Python

  • Zinssatz: i = (B1 - B0) / B0
  • Present Value: PV = c1 / (1 + i), NPV: NPV = -c0 + c1 / (1 + i)
  • Renditevektor: r = S1 / S0 - 1
  • Erwartungswert: E[x] = p·x_u + (1-p)·x_d
  • Varianz: Var(r) = E[(r - E[r])²], Volatilität: σ = √Var(r)
  • Call: C1 = max(S1 - K, 0)
  • Replikation: M · φ = C1, Preis V0 = φ_B·B0 + φ_S·S0
  • Zustandspreise: V0(Claim) = π_u·c_u + π_d·c_d
  • Vollständigkeit: Rang(M) = Anzahl Zustände

Python-Code zum aktuellen Szenario

import numpy as np

B0, B1 = 10.0, 11.0
S0 = 10.0
S1 = np.array([20.0, 5.0])
P = np.array([0.4, 0.6])
K = 15.0

i = (B1 - B0) / B0                      # = 0,100000
r = S1 / S0 - 1                          # = (1.0, -0.5)
mu = P @ r                               # = 0,100000
sigma = (P @ (r - mu) ** 2) ** 0.5       # = 0,734847

C1 = np.maximum(S1 - K, 0)               # = (5.0, 0.0)
M = np.array([[B1, S1[0]], [B1, S1[1]]])
phi = np.linalg.solve(M, C1)             # = (-0,151515, 0,333333)
V0 = phi[0] * B0 + phi[1] * S0           # = 1,818182