σμ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.7·~40 Min.Mittelstufe

Put-Call-Parität

Position in der SkillModul 4 von 11 · Thema 7 von 16
4.7 Put-Call-Parität
—Lab-Punkte— / 100XP gesamt—Serie—

Zwei Wege zum selben Ziel

Bauen Sie zwei Portfolios. A: Kaufen Sie einen Call und legen Sie den Barwert des Strikes K * exp(-rT) bei der Bank (oder in einer risikofreien Anleihe) an. B: Kaufen Sie einen Put und die Aktie. Endet die Aktie bei Verfall über K, ist A der Call-Wert S - K plus das K der Bank, also S; B ist die Aktie S und ein wertloser Put, also S. Endet sie unter K, ist A nur das K der Bank, weil der Call wertlos verfällt, und B der Put-Wert K - S plus die Aktie S, also K. In beiden Fällen sind die Portfolios bei Verfall gleich viel wert, also müssen sie heute gleich viel kosten.

C + K * exp(-r*T) = P + S so P = C - S + K * exp(-r*T)
import math

spot, strike, rate, t = 100, 100, 0.05, 1
pv_strike = strike * math.exp(-rate * t)             # what must be put in the bank today to own K at expiry
print(round(pv_strike, 4))                            # 95.1229

call = 10.4506                                        # a call price we observe
put = call - spot + pv_strike                         # the parity relation
print(round(put, 4))                                  # 5.5735
print(round(put + spot - pv_strike, 4))               # 10.4506   and back to the call

Wenn die Parität bricht: Arbitrage

Notiert der Markt Preise, die die Beziehung nicht erfüllen, gibt es einen risikolosen Gewinn. Definieren Sie die Lücke (C - P) - (S - K e^(-rT)). Eine positive Lücke heißt, der Call ist im Verhältnis zum Put zu teuer: Call verkaufen, Put kaufen, Aktie kaufen und den Barwert des Strikes leihen. Das Portfolio kostet anfangs nichts, zahlt bei Verfall nichts, was die Aktie auch tut, und steckt die Lücke heute ein. Eine negative Lücke kehrt jedes Bein um. Echte Märkte haben Kosten und Geld-Brief-Spannen, kleine Lücken sind daher nicht handelbar: Das steht für die Toleranz.

def parity_gap(call, put, spot, strike, rate, t):
    return (call - put) - (spot - strike * math.exp(-rate * t))

print(round(parity_gap(11.0, put, 100, 100, 0.05, 1), 4))         # 0.5494   the call at 11.00 is too expensive: sell it
print(round(parity_gap(call, put, 100, 100, 0.05, 1), 4))         # 0.0      consistent prices: nothing to do

def arbitrage_action(call, put, spot, strike, rate, t, tolerance=0.01):
    gap = parity_gap(call, put, spot, strike, rate, t)
    if gap > tolerance:
        return "sell call, buy put, buy stock"
    if gap < -tolerance:
        return "buy call, sell put, sell stock"
    return "none"

print(arbitrage_action(11.0, put, 100, 100, 0.05, 1))             # sell call, buy put, buy stock
# The package of the arbitrage, at today's prices: sell the call at 11, buy the put, buy the stock, borrow the strike's present value
cash_today = 11.0 - put - 100 + 100 * math.exp(-0.05 * 1)
print(round(cash_today, 4))                # 0.5494   you are paid the gap now and owe nothing at expiry
# A call minus a put is a synthetic forward: it behaves like the stock bought with borrowed money
print(round(10.4506 - put, 4), round(100 - pv_strike, 4))        # 4.8771 4.8771
Parität ist modellfreiDie Put-Call-Parität braucht keine Annahme über die Kursbewegung oder die Volatilität, nur Arbitragefreiheit und europäische Ausübung (keine vorzeitige Ausübung). Das macht sie zu einer starken Kontrolle: Ein Bewertungsmodell, das die Parität verletzt, ist falsch. Amerikanische Optionen und Dividenden verändern die Beziehung, die dann nur noch als Ungleichungen gilt; ziehen Sie daher den Barwert der Dividenden vom Kassakurs ab, bevor Sie sie verwenden.
  • C + K * exp(-rT) = P + S: ein Call plus Anleihe gleicht einem Put plus Aktie, also P = C - S + K * exp(-rT).
  • Lücke (C - P) - (S - K e^(-rT)) positiv: Call verkaufen, Put und Aktie kaufen; negativ: umgekehrt.
  • Die Parität ist modellfrei, nutzen Sie sie zur Kontrolle jedes Bewertungsmodells; mit Dividenden oder vorzeitiger Ausübung wird sie zur Ungleichung.

Als Nächstes: die Black-Scholes-Formel, ein Preis in geschlossener Form für Call und Put.

Lab: Was bewertet wird

  • Mit parity_put_price den Put aus dem Call ableiten25 Pkt.
  • Mit parity_call_price den Call aus dem Put ableiten25 Pkt.
  • Mit parity_gap messen, wie weit Preise von der Parität entfernt sind25 Pkt.
  • Mit arbitrage_action das risikolose Geschäft benennen25 Pkt.
Explorer · lab-72-1
▾ lab-72-1
…
bash · im Browser
learner@quantcraft:~/lab-72-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

Alles in lab-72-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