Finanzwelt: Two-State Economy

Eine vollständig simulierte Modellwelt aus Anleihe, Aktie, Call-Option und Portfolio. Jede Parameteränderung berechnet die komplette Simulation neu – alle Ansichten zeigen denselben Zustand.

⚗ Entscheidungs-Labor – zwei Handlungen unter identischen Zuständen vergleichen
Basisposition (B/S/C): Handlung A (B/S/C): Handlung B (B/S/C):
Ökonomie
Up-Wahrscheinlichkeit p
Laufzeit T (Jahre)
Anleihe (risikolos)
B₀ – Preis heute (€)
B₁ – sichere Auszahlung (€)
Aktie
S₀ – Preis heute (€)
S₁ im Up-Zustand (€)
S₁ im Down-Zustand (€)
Call-Option
Strike K (€)
Marktpreis C₀ (€, leer = fair)
Portfolio (Einheiten)
Anleihen n_B
Aktien n_S
Calls n_C

Negative Einheiten = Short-Position.

Berechne …
Zins (Periode)
10,00 %
10,00 % p. a. · T = 1,00 J.
E[Aktienrendite]
10,00 %
σ = 73,48 %
Fairer Call-Preis
1,82 €
Markt: 2,00 €
Arbitrage
Call überteuert
Δ = +0,18 €
Portfolio heute
22,00 €
morgen: 36,00 € / 16,00 €

Payoff bei Fälligkeit

Auszahlung je Instrument als Funktion des Aktienwerts S₁

Gewinn / Verlust

Payoff abzüglich heutigem Preis bzw. Prämie

Zustandsbaum

Preise heute und Werte in beiden Zuständen

Cashflows

Zahlungsströme heute (Kauf) und am Laufzeitende

Portfolio-Zusammensetzung

Heutiger Wert je Position

Replikation des Calls

0,33 Aktie(n) + -0,15 Anleihe(n) = Call

Was passiert?

Die Modellwelt hat genau zwei Zeitpunkte: heute (t = 0) und das Laufzeitende nach T = 1,00 Jahr(en). Morgen tritt genau einer von zwei Zuständen ein: „Up“ mit Wahrscheinlichkeit 40,00 % oder „Down“ mit 60,00 %.

Die Anleihe kostet heute 10,00 € und zahlt in beiden Zuständen sicher 11,00 € – das entspricht einem Periodenzins von 10,00 % (10,00 % p. a.).

Die Aktie kostet heute 10,00 € und ist morgen 20,00 € (Up) oder 5,00 € (Down) wert. Ihre erwartete Rendite beträgt 10,00 % bei einer Volatilität von 73,48 %.

Der europäische Call mit Strike K = 15,00 € zahlt morgen max(S1 − K, 0): 5,00 € im Up- und 0,00 € im Down-Zustand.

Warum passiert es?

Weil der Markt vollständig ist (zwei unabhängige Instrumente für zwei Zustände), lässt sich der Call exakt nachbauen: 0,3333 Aktie(n) plus -0,1515 Anleihe(n) liefern in beiden Zuständen genau die Call-Auszahlung. Dieses Replikationsportfolio kostet heute 1,82 € – das ist der einzig arbitragefreie Call-Preis.

Dahinter stehen die Zustandspreise: 1 € im Up-Zustand kostet heute 0,3636 €, 1 € im Down-Zustand 0,5455 €. Jeder Claim ist die Summe seiner zustandsweisen Auszahlungen mal Zustandspreis.

Welche Konsequenzen entstehen?

Der Call ist am Markt überteuert (Marktpreis 2,00 € vs. Replikationspreis 1,82 €). Ein Arbitrageur kassiert heute 0,18 € risikolos; sein Handeln drückt den Preis zurück zum fairen Wert.

Das Portfolio (1,00 Anleihe(n), 1,00 Aktie(n), 1,00 Call(s)) kostet heute 22,00 € und ist morgen 36,00 € (Up) bzw. 16,00 € (Down) wert – Profit 14,00 € bzw. -6,00 €. Erwartete Rendite: 9,09 %, Volatilität: 44,54 %.

Jede Parameteränderung verschiebt dieses Gleichgewicht: Ein höherer Zins verbilligt zukünftige Zahlungen, ein breiterer Up/Down-Spread erhöht Volatilität und Call-Wert, ein höherer Strike drückt den Call-Preis Richtung null.

Zahlungsströme aller Instrumente

Negative Werte heute = Geld fließt ab (Kauf); positive Werte am Laufzeitende = Auszahlung an den Halter.

Instrumentheute (t = 0) Up (t = T)Down (t = T)
Anleihe -10,00 € 11,00 € 11,00 €
Aktie -10,00 € 20,00 € 5,00 €
Call -2,00 € 5,00 € 0,00 €
Portfolio -22,00 € 36,00 € 16,00 €

Cashflows je Marktteilnehmer

Anleger / Aktienkäufer

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

Aktienherausgeber / Unternehmen

PositionheuteUpDown
Primäremission: Kapitalzufluss an das Unternehmen +10,00 € – –
Sekundärmarkt: Geld fließt an den verkaufenden Aktionär 0,00 € – –

Anleihekäufer / Kreditgeber

PositionheuteUpDown
Anleihekauf -10,00 € +11,00 € +11,00 €

Anleiheemittent / Kreditnehmer

PositionheuteUpDown
Anleiheemission (Kreditaufnahme) +10,00 € -11,00 € -11,00 €

Optionskäufer

PositionheuteUpDown
Prämienzahlung -2,00 € – –
Call-Payoff – +5,00 € 0,00 €
Profit (Payoff - Prämie) -2,00 € +3,00 € -2,00 €

Optionsverkäufer / Stillhalter

PositionheuteUpDown
Vereinnahmte Prämie +2,00 € – –
Verpflichtung aus dem Call – -5,00 € -0,00 €
Profit (Prämie - Payoff) +2,00 € -3,00 € +2,00 €

Market Maker

PositionheuteUpDown
Call verkaufen (Prämie vereinnahmen) +2,00 € -5,00 € -0,00 €
Hedge: Replikationsportfolio kaufen -1,82 € +5,00 € +0,00 €
Netto +0,18 € 0,00 € +0,00 €

Arbitrageur

PositionheuteUpDown
Arbitragestrategie +0,18 € 0,00 € +0,00 €

Alle Formeln der aktuellen Simulation

Allgemeine Formel → Einsetzung der aktuellen Werte → Ergebnis.

Zins und Diskontierung

Die risikolose Anleihe definiert den Zins der Modellwelt.

Periodenzins
i = B1 − B0B0
i = 11 − 1010
i = 0,1 = 10 %
Annualisierter Zins
ip.a. = (1 + i)1/T − 1
ip.a. = (1 + 0,1)1/1 − 1
ip.a. = 0,1 = 10 %
Bei T = 1 Jahr sind Periodenzins und Jahreszins identisch.
Barwert der sicheren Auszahlung
PV = B11 + i
PV = 111 + 0,1
PV = 10 €

Aktie: Rendite und Risiko

Erwartungswert und Streuung der unsicheren Aktienrendite unter den physischen Wahrscheinlichkeiten (p, 1−p).

Zustandsrenditen
ru = S1(u) − S0S0,  rd = S1(d) − S0S0
ru = 20 − 1010,  rd = 5 − 1010
ru = 1,  rd = -0,5
Erwartete Rendite
E[r] = p · ru + (1 − p) · rd
E[r] = 0,4 · 1 + 0,6 · -0,5
E[r] = 0,1 = 10 %
Varianz
Var(r) = p · (ru − E[r])2 + (1 − p) · (rd − E[r])2
Var(r) = 0,4 · (1 − 0,1)2 + 0,6 · (-0,5 − 0,1)2
Var(r) = 0,54
Volatilität
σ = √Var(r)
σ = √0,54
σ = 0,7348 = 73,48 %

Call-Option: Payoff

Der europäische Call zahlt am Laufzeitende die Differenz zwischen Aktienwert und Strike – falls positiv.

Payoff je Zustand
C1 = max(S1 − K, 0)
C1(u) = max(20 − 15, 0),  C1(d) = max(5 − 15, 0)
C1 = (5 €, 0 €)

Replikation und fairer Call-Preis

Ein Portfolio aus φ_B Anleihen und φ_S Aktien soll in beiden Zuständen exakt die Call-Auszahlung liefern: M · φ = C₁.

Gleichungssystem
φB · B1 + φS · S1(u) = C1(u)
φB · B1 + φS · S1(d) = C1(d)
φB · 11 + φS · 20 = 5
φB · 11 + φS · 5 = 0
φB = -0,1515,  φS = 0,3333
Gelöst als lineares Gleichungssystem (numpy.linalg.solve).
Fairer Preis (Law of One Price)
C0 = φB · B0 + φS · S0
C0 = -0,1515 · 10 + 0,3333 · 10
C0 = 1,8182 €

Zustandspreise (Arrow-Debreu)

Der Preis von 1 € in genau einem Zustand. Jeder Claim ist eine Linearkombination dieser Basis-Wertpapiere.

Zustandspreise
πu = Preis von (1, 0),  πd = Preis von (0, 1)
jeweils über Replikation bestimmt
πu = 0,3636 €,  πd = 0,5455 €
Claim-Bewertung über Zustandspreise
V0 = πu · cu + πd · cd
C0 = 0,3636 · 5 + 0,5455 · 0
C0 = 1,8182 €

Arbitrageprüfung

Weicht der Marktpreis vom Replikationspreis ab, existiert eine risikolose Gewinnstrategie.

Abweichung
Δ = CMarkt − CReplikation
Δ = 2 − 1,8182
Δ = 0,1818 € → Status: overpriced

Portfolio

Das Portfolio ist eine Linearkombination der drei Instrumente.

Portfoliowert heute
V0 = nB · B0 + nS · S0 + nC · C0
V0 = 1 · 10 + 1 · 10 + 1 · 2
V0 = 22 €
Portfoliowert je Zustand
V1(ω) = nB · B1 + nS · S1(ω) + nC · C1(ω)
V1(u) = 36,  V1(d) = 16
Profit: 14 € (Up), -6 € (Down)
Portfolio-Rendite und -Risiko
E[rP] = p · rP,u + (1 − p) · rP,d,  σP = √Var(rP)
E[rP] = 0,0909,  σP = 0,4454
E[rP] = 9,09 %,  σP = 44,54 %

Der Code, der gerade rechnet

Live per inspect.getsource aus der Finance Engine extrahiert – exakt der Code hinter den angezeigten Zahlen.

Treiber: aktuelle Parameter

Reproduziert die Simulation Schritt für Schritt mit den gerade eingestellten Werten (Kommentare zeigen die tatsächlichen Ergebnisse).

# Genau diese Aufrufe haben die angezeigten Ergebnisse berechnet.
from app.domain.models import (EuropeanCall, PortfolioSpec,
                               RiskFreeBond, RiskyStock, TwoStateEconomy)
from app.finance.cashflows import risk_free_rate
from app.finance.term import annualized_rate
from app.finance.replication import replicate
from app.finance.arrow_debreu import arrow_debreu_prices
from app.finance.risk import expected_return, variance, volatility
from app.finance.portfolio_analysis import analyze_portfolio

economy = TwoStateEconomy(up_probability=0.4)
bond = RiskFreeBond(price_today=10.0, payoff_up=11.0, payoff_down=11.0)
stock = RiskyStock(price_today=10.0, payoff_up=20.0, payoff_down=5.0)
call = EuropeanCall(strike=15.0, market_price=2.0)
spec = PortfolioSpec(bond_units=1.0, stock_units=1.0, call_units=1.0)
T = 1.0

i = risk_free_rate(bond.price_today, bond.payoff_up)          # -> 0.1
i_pa = annualized_rate(i, T)                                  # -> 0.10000000000000009
call_claim = call.payoff(stock)                               # -> (5.0, 0.0)
mu = expected_return(stock.price_today, stock.payoffs, economy.probabilities)  # -> 0.10000000000000003
sigma = volatility(stock.price_today, stock.payoffs, economy.probabilities)     # -> 0.7348469228349535
rep = replicate(bond, stock, call_claim)                      # -> Preis 1.8181818181818181
ad = arrow_debreu_prices(bond, stock)
arb = check_arbitrage(bond, stock, call_claim, call.market_price)  # -> 'overpriced'
pf = analyze_portfolio(spec, bond, stock, call, call_claim,
                       2.0, economy.probabilities)  # -> V0 = 22.0

Zins und Rendite (app.finance.cashflows)

Sicherer Zins aus der Anleihe, Renditebegriffe.

def risk_free_rate(bond_price: float, bond_payoff: float) -> float:
    """Sicherer Zinssatz i = (B1 - B0) / B0 der risikolosen Anleihe."""
    return rate_of_return(bond_price, bond_payoff)


def rate_of_return(price_today: float, payoff_future: float) -> float:
    """Rate of Return r = (c1 - c0) / c0."""
    if price_today == 0:
        raise ValidationError(
            "Die Rendite ist nicht definiert, wenn der heutige Preis 0 ist "
            "(Division durch null)."
        )
    return (payoff_future - price_today) / price_today

Laufzeit (app.finance.term)

Annualisierung des Periodenzinses.

def annualized_rate(period_rate: float, maturity_years: float) -> float:
    """Annualisierter Zins: i_pa = (1 + i)^(1/T) - 1.

    Für T = 1 gilt i_pa = i. Für T > 1 verteilt sich der Periodenzins
    geometrisch auf die Jahre, für T < 1 wird er hochgerechnet.
    """
    if maturity_years <= 0:
        raise ValidationError("Die Laufzeit T muss positiv sein.")
    if period_rate <= -1.0:
        raise ValidationError(
            "Die Annualisierung ist für einen Periodenzins von -100 % oder "
            "darunter nicht definiert."
        )
    return (1.0 + period_rate) ** (1.0 / maturity_years) - 1.0

Risiko (app.finance.risk)

Erwartete Rendite, Varianz, Volatilität.

def expected_return(price_today: float, payoffs: tuple[float, float],
                    probs: tuple[float, float]) -> float:
    p = validate_probabilities(probs)
    r = state_returns(price_today, payoffs)
    return float(p @ r)


def variance(price_today: float, payoffs: tuple[float, float],
             probs: tuple[float, float]) -> float:
    """Var(r) = E[(r - E[r])^2]."""
    p = validate_probabilities(probs)
    r = state_returns(price_today, payoffs)
    mu = float(p @ r)
    return float(p @ (r - mu) ** 2)


def volatility(price_today: float, payoffs: tuple[float, float],
               probs: tuple[float, float]) -> float:
    return math.sqrt(variance(price_today, payoffs, probs))

Replikation (app.finance.replication)

Löst M · φ = C₁ und liefert den fairen Preis.

def payoff_matrix(bond: RiskFreeBond, stock: RiskyStock) -> np.ndarray:
    """Auszahlungsmatrix M: Zeilen = Zustände (up, down), Spalten = (Anleihe, Aktie)."""
    return np.array([
        [bond.payoff_up, stock.payoff_up],
        [bond.payoff_down, stock.payoff_down],
    ], dtype=float)


def replicate(bond: RiskFreeBond, stock: RiskyStock, claim: Claim) -> ReplicationResult:
    """Löst M @ phi = C1. Wirft SingularMarketError bei singulärer Matrix."""
    m = payoff_matrix(bond, stock)
    c = np.asarray(claim.payoffs, dtype=float)
    try:
        phi = np.linalg.solve(m, c)
    except np.linalg.LinAlgError as exc:
        raise SingularMarketError(
            "Die Auszahlungsmatrix ist singulär: Anleihe und Aktie zahlen in beiden "
            "Zuständen proportional aus. Der Markt ist unvollständig, der Claim "
            "kann nicht eindeutig repliziert werden."
        ) from exc
    bond_units, stock_units = float(phi[0]), float(phi[1])
    price = bond_units * bond.price_today + stock_units * stock.price_today
    rep = m @ phi
    verified = bool(np.allclose(rep, c, atol=VERIFY_TOL))
    return ReplicationResult(
        bond_units=bond_units,
        stock_units=stock_units,
        price=price,
        replicated_up=float(rep[0]),
        replicated_down=float(rep[1]),
        verified=verified,
    )

Zustandspreise (app.finance.arrow_debreu)

Arrow-Debreu-Preise über Replikation.

def arrow_debreu_prices(bond: RiskFreeBond, stock: RiskyStock) -> ArrowDebreuResult:
    rep_up = replicate(bond, stock, Claim(1.0, 0.0, "Arrow-Debreu Up"))
    rep_down = replicate(bond, stock, Claim(0.0, 1.0, "Arrow-Debreu Down"))
    return ArrowDebreuResult(
        state_price_up=rep_up.price,
        state_price_down=rep_down.price,
        replication_up=rep_up,
        replication_down=rep_down,
    )

Arbitrage (app.finance.arbitrage)

Vergleich Marktpreis vs. Replikationspreis inklusive Handelsstrategie.

def check_arbitrage(bond: RiskFreeBond, stock: RiskyStock, claim: Claim,
                    market_price: float, tol: float = PRICE_TOL) -> ArbitrageResult:
    rep = replicate(bond, stock, claim)
    deviation = market_price - rep.price

    if abs(deviation) <= tol:
        return ArbitrageResult(
            replication_price=rep.price, market_price=market_price,
            deviation=deviation, status=MispricingStatus.FAIR,
            strategy=["Der Marktpreis entspricht (innerhalb der Toleranz) dem "
                      "Replikationspreis. Es gibt keine Arbitragemöglichkeit."],
            replication=rep,
        )

    if deviation > 0:
        # Claim überteuert: Claim verkaufen, Replikationsportfolio kaufen.
        status = MispricingStatus.OVERPRICED
        strategy = [
            f"Claim am Markt für {market_price:.6f} verkaufen (Short).",
            f"Replikationsportfolio kaufen: {rep.stock_units:.6f} Aktie(n) und "
            f"{rep.bond_units:.6f} Anleihe(n) für {rep.price:.6f}.",
        ]
        cf_today = market_price - rep.price
        cf_up = rep.replicated_up - claim.payoff_up
        cf_down = rep.replicated_down - claim.payoff_down
    else:
        # Claim unterbewertet: Claim kaufen, Replikationsportfolio verkaufen.
        status = MispricingStatus.UNDERPRICED
        strategy = [
            f"Claim am Markt für {market_price:.6f} kaufen (Long).",
            f"Replikationsportfolio verkaufen (short): {rep.stock_units:.6f} Aktie(n) "
            f"und {rep.bond_units:.6f} Anleihe(n) für {rep.price:.6f}.",
        ]
        cf_today = rep.price - market_price
        cf_up = claim.payoff_up - rep.replicated_up
        cf_down = claim.payoff_down - rep.replicated_down

    risk_free = abs(cf_up) <= tol and abs(cf_down) <= tol
    return ArbitrageResult(
        replication_price=rep.price, market_price=market_price,
        deviation=deviation, status=status, strategy=strategy,
        cashflow_today=cf_today, cashflow_up=cf_up, cashflow_down=cf_down,
        risk_free=risk_free, replication=rep,
    )

Portfolio (app.finance.portfolio_analysis)

Bewertung der Linearkombination.

def analyze_portfolio(spec: PortfolioSpec, bond: RiskFreeBond, stock: RiskyStock,
                      call: EuropeanCall, call_claim: Claim, call_price: float,
                      probs: tuple[float, float]) -> PortfolioAnalysis:
    """Bewertet das Portfolio; der Call geht mit `call_price` (Markt- oder
    Replikationspreis) in den heutigen Wert ein."""
    price_today = (spec.bond_units * bond.price_today
                   + spec.stock_units * stock.price_today
                   + spec.call_units * call_price)
    payoff_up = (spec.bond_units * bond.payoff_up
                 + spec.stock_units * stock.payoff_up
                 + spec.call_units * call_claim.payoff_up)
    payoff_down = (spec.bond_units * bond.payoff_down
                   + spec.stock_units * stock.payoff_down
                   + spec.call_units * call_claim.payoff_down)
    payoffs = (payoff_up, payoff_down)

    exp_ret: float | None
    var: float | None
    vol: float | None
    if price_today > 0:
        exp_ret = expected_return(price_today, payoffs, probs)
        var = variance(price_today, payoffs, probs)
        vol = volatility(price_today, payoffs, probs)
    else:
        # Leeres oder kostenloses Portfolio: Renditen sind nicht definiert.
        exp_ret = var = vol = None

    return PortfolioAnalysis(
        spec=spec,
        price_today=price_today,
        payoff_up=payoff_up,
        payoff_down=payoff_down,
        expected_payoff=expectation(payoffs, probs),
        expected_return=exp_ret,
        variance=var,
        volatility=vol,
    )

Payoff-Profile (app.finance.payoff_profiles)

Kurven für die Diagramme (Payoff/Profit über S1).

def call_profile(call: EuropeanCall, grid: np.ndarray,
                 premium: float | None) -> PayoffProfile:
    """Call: Payoff = max(S1 - K, 0), Profit = Payoff - Prämie (falls gegeben)."""
    payoff = np.maximum(grid - call.strike, 0.0)
    cost = premium if premium is not None else 0.0
    return PayoffProfile("Call", tuple(grid.tolist()), tuple(payoff.tolist()),
                         tuple((payoff - cost).tolist()))


def portfolio_profile(spec: PortfolioSpec, bond: RiskFreeBond, stock: RiskyStock,
                      call: EuropeanCall, call_price: float,
                      grid: np.ndarray) -> PayoffProfile:
    """Portfolio: Linearkombination der Instrumentprofile."""
    payoff = (spec.bond_units * np.full_like(grid, float(bond.payoff_up))
              + spec.stock_units * grid
              + spec.call_units * np.maximum(grid - call.strike, 0.0))
    cost = (spec.bond_units * bond.price_today
            + spec.stock_units * stock.price_today
            + spec.call_units * call_price)
    return PayoffProfile("Portfolio", tuple(grid.tolist()), tuple(payoff.tolist()),
                         tuple((payoff - cost).tolist()))

Dieselbe Welt aus neun Blickwinkeln

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.

Rendite Up
1,00
Rendite Down
-0,50
Erwartete Rendite
0,10
Erwarteter Wert morgen
11,00
Varianz
0,54
Volatilität
0,73
Zahlungsströme
heuteUpDown
Aktienkauf -10,00 € +20,00 € +5,00 €

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.

Aktienherausgeber / Unternehmen

Woher kommt der Wert der Aktie – und wohin fließt das Geld des Käufers?

Im Modell ist die Aktie ein abstraktes Financial Asset mit heutigem Preis 10 € und Zustandswerten (20 €, 5 €). Das Unternehmen dahinter wird nicht modelliert – seine Real Assets sind auf zwei Zustandswerte reduziert.

S0
10,00
S1 Up
20,00
S1 Down
5,00
Zahlungsströme
heuteUpDown
Primäremission: Kapitalzufluss an das Unternehmen +10,00 € – –
Sekundärmarkt: Geld fließt an den verkaufenden Aktionär 0,00 € – –

Modellbestandteil ist nur der Preisprozess (S0, S1). Wirtschaftliche Einordnung: Bei einer Primäremission fließt Kapital vom Anleger an das Unternehmen; beim Sekundärmarktkauf an den verkaufenden Aktionär, nicht erneut an das Unternehmen. Die Real Assets des Unternehmens erzeugen die wirtschaftliche Grundlage der künftigen Zustandswerte – im Kapitel-2-Modell wird dieser Prozess bewusst nicht abgebildet.

Keine Bilanz- oder Emissionssimulation: Das Modell beschreibt ein abstrahiertes Financial Asset.

Anleihekäufer / Kreditgeber

Was bringt mir die sichere Anlage – und warum ist die Anleihe der Replikationsbaustein für sicheres Geld?

Der Kreditgeber zahlt heute 10 € und erhält morgen in beiden Zuständen sicher 11 €.

Zinsbetrag
1,00
Zinssatz
0,10
Barwert
10,00
Zahlungsströme
heuteUpDown
Anleihekauf -10,00 € +11,00 € +11,00 €

Die Anleihe ist das risikolose Asset des Modells: 11 € in beiden Zuständen. Ihr Zinssatz definiert die Diskontierung, und als einziges zustandsunabhängiges Instrument ist sie der zentrale Baustein jedes Replikationsportfolios.

Anleiheemittent / Kreditnehmer

Was kostet mich die Kreditaufnahme – und was bedeutet eine negative Anleiheposition?

Der Kreditnehmer erhält heute 10 € und muss morgen in jedem Zustand 11 € zurückzahlen – dieselbe Transaktion wie beim Anleihekäufer, nur mit umgekehrten Vorzeichen.

Mittelzufluss heute
10,00
Rückzahlung morgen
-11,00
Finanzierungskosten
1,00
Zinssatz
0,10
Zahlungsströme
heuteUpDown
Anleiheemission (Kreditaufnahme) +10,00 € -11,00 € -11,00 €

Eine negative Anleiheposition in einem Replikationsportfolio bedeutet wirtschaftlich genau dies: eine Kreditaufnahme. Wer z. B. -5/33 Anleihen hält, leiht sich heute Geld und schuldet morgen die sichere Rückzahlung.

Optionskäufer

Was kostet mich die Option, was zahlt sie aus – und wo liegt der Unterschied zwischen Payoff und Profit?

Der Optionskäufer zahlt heute die Prämie und erhält morgen max(S1 - K, 0) mit Strike K = 15 €.

Payoff Up
5,00
Payoff Down
0,00
Strike
15,00
Prämie
2,00
Profit Up
3,00
Profit Down
-2,00
Maximaler Verlust
-2,00
Zahlungsströme
heuteUpDown
Prämienzahlung -2,00 € – –
Call-Payoff – +5,00 € 0,00 €
Profit (Payoff - Prämie) -2,00 € +3,00 € -2,00 €

Ein höherer Strike verschiebt den Payoff nach unten: Nur Aktienwerte oberhalb von K führen zu einer Auszahlung. Der Verlust des Käufers ist in der Modellwelt auf die Prämie begrenzt.

Payoff ≠ Profit: Der Profit berücksichtigt die gezahlte Prämie, der Payoff nicht.

Optionsverkäufer / Stillhalter

Welche Verpflichtung gehe ich ein – und warum brauche ich ein Replikationsportfolio?

Der Stillhalter vereinnahmt heute die Prämie und schuldet morgen den Call-Payoff. Zur Absicherung kann er das Replikationsportfolio kaufen: 0.333333 Aktie(n) und -0.151515 Anleihe(n) für 1.81818 €.

Verpflichtung Up
-5,00
Verpflichtung Down
-0,00
Prämie
2,00
Profit Up
-3,00
Profit Down
2,00
Hedgekosten (Replikationspreis)
1,82
Zahlungsströme
heuteUpDown
Vereinnahmte Prämie +2,00 € – –
Verpflichtung aus dem Call – -5,00 € -0,00 €
Profit (Prämie - Payoff) +2,00 € -3,00 € +2,00 €

Der Verkäufer muss nicht auf fallende Kurse spekulieren: Hält er das Replikationsportfolio, ist seine Position in beiden Zuständen neutral. Sein Geschäft ist dann die Differenz zwischen vereinnahmter Prämie und Hedgekosten, nicht eine Kurswette.

Market Maker

Wie sichere ich einen verkauften Claim ab – und warum muss mein Quotierungspreis nahe am Replikationspreis liegen?

Der Market Maker verkauft den Call und kauft gleichzeitig das Replikationsportfolio (0.333333 Aktie(n), -0.151515 Anleihe(n)) für 1.81818 €. Danach ist sein Nettopayoff in beiden Zuständen null.

Hedgekosten
1,82
Marge heute
0,18
Nettopayoff Up
0,00
Nettopayoff Down
0,00
Zahlungsströme
heuteUpDown
Call verkaufen (Prämie vereinnahmen) +2,00 € -5,00 € -0,00 €
Hedge: Replikationsportfolio kaufen -1,82 € +5,00 € +0,00 €
Netto +0,18 € 0,00 € +0,00 €

Quotiert der Market Maker deutlich über dem Replikationspreis, werden Arbitrageure gegen ihn handeln; deutlich darunter macht er sichere Verluste. Ein Spread um den Replikationspreis ist eine Entschädigung für reale Friktionen – im idealisierten Modell ist er kein Arbitragegewinn.

Version 1: nur statische Replikation der Two-State Economy, kein dynamisches Delta-Hedging.

Arbitrageur

Weicht der Marktpreis vom Replikationspreis ab – und bleibt nach Aufbau der Position wirklich kein Risiko?

Marktpreis 2 € vs. Replikationspreis 1.81818 € – Abweichung +0.181818 €.

Marktpreis
2,00
Replikationspreis
1,82
Abweichung
0,18
Cashflow heute
0,18
Cashflow Up
0,00
Cashflow Down
0,00
Risikolos
1,00
Zahlungsströme
heuteUpDown
Arbitragestrategie +0,18 € 0,00 € +0,00 €

Der Call ist im Modell überteuert. Die Strategie liefert heute +0.181818 € und in beiden Zuständen 0 € – ein risikoloser Gewinn. Erst die Prüfung aller Zustands-Cashflows rechtfertigt das Wort 'Arbitrage'.

Idealisierte Modellwelt: keine Transaktionskosten, Ausführungsrisiken oder Bid-Ask-Spreads.

Marktbeobachter / Ökonom

Welche Zahlungsvektoren sind mit den gehandelten Assets erreichbar – und was kosten reine Zustandsauszahlungen?

Der Ökonom betrachtet nicht einzelne Geschäfte, sondern die Struktur des Marktes: Zustandsraum {Up, Down}, Assets (Anleihe, Aktie), Auszahlungsmatrix und deren Rang.

Rang der Auszahlungsmatrix
2,00
Anzahl Zustände
2,00
Markt vollständig
1,00
Zustandspreis Up (π_u)
0,36
Zustandspreis Down (π_d)
0,55
Call-Preis über Zustandspreise
1,82

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. Die Arrow-Debreu-Zustandspreise bilden eine Basis: Jeder Claim ist eine Linearkombination der beiden Basisvektoren, sein Preis die entsprechende Kombination der Zustandspreise – identisch mit dem Replikationspreis.