Von Dr. Stefan Kroll, Chefquant bei HolySheep AI | 6. Mai 2026

Als ich vor sieben Jahren mein erstes Optionsportfolio mit realem Geld managete, verlor ich 23% in drei Wochen – obwohl meine Delta-Hedges vermeintlich perfekt waren. Der Grund: Ich hatte die second-order Greeks komplett ignoriert. Vanna und Charm können über Nacht aus einem vermeintlich sicheren Short-Gamma-Trade ein Desaster machen. In diesem Tutorial zeige ich Ihnen, wie Sie diese Greeks in Ihre Risikosteuerung integrieren – und zwar produktiv mit der HolySheep AI Plattform.

Was sind Vanna und Charm? Second-order Greeks erklärt

Im Gegensatz zu den bekannten first-order Greeks (Delta, Vega, Theta) beschreiben second-order Greeks, wie sich diese Risikokennzahlen selbst verändern:

Warum Sie Vanna und Charm nicht ignorieren sollten

Meine Erfahrung aus der Praxis: Nach der Lehman-Krise 2008 und dem GameStop-Vorfall 2021 zeigte sich, dass Strategien, die nur auf Delta und Vega setzen, systematisch Tail-Risks unterschätzen. Vanna erklärt, warum:

  1. Bei plötzlichen Volatilitätsspitzen bewegt sich das Delta in Richtung des Bias
  2. Charm verursacht unbeabsichtigte Deltaverschiebungen über Nacht
  3. Die Kombination beider kann zu kapazitätswirksamen Nachschüssen führen

Geeignet / Nicht geeignet für

Einsatzprofil: Vanna/Charm-Analyse
✓ Ideal für:✗ Nicht geeignet für:
Portfolio-Manager mit Options-OverlaysBuy-and-Hold-Aktienanleger
Volatility-Trading-DesksPuristen ohne Derivate-Zugang
Risk-Manager in Banken/FundsKurzfristige Daytrader (zu hohe Transaktionskosten)
Stat-Arb-StrategenRetail-Trader ohne Margin-Fazilitäten
Structuring-Teams für exotische OptionenSysteme ohne Echtzeit-Vola-Feed

Preise und ROI: KI-Kosten für quantitative Analysen 2026

Für die numerische Berechnung von Vanna/Charm-Sensitivitäten benötigen Sie leistungsfähige KI-Modelle. Hier der 2026-Preiskostenvergleich für 10 Millionen Token/Monat:

ModellPreis pro 1M TokenKosten für 10M Token/MonatLatenz (P50)Empfehlung
Claude Sonnet 4.5$15,00$150,00180msPremium-Analysen
GPT-4.1$8,00$80,00120msStandard-Workloads
Gemini 2.5 Flash$2,50$25,0045msBatch-Processing
DeepSeek V3.2$0,42$4,2035ms⚡ Kosten-Optimal
Quelle: HolySheep AI Preisliste, Stand Mai 2026 | Wechselkurs ¥1=$1 (85%+ Ersparnis vs. westliche Anbieter)

ROI-Analyse: Mit HolySheep und DeepSeek V3.2 zahlen Sie für 10M Token nur $4,20/Monat statt $150 bei Claude – eine Ersparnis von 97%. Bei einem typischen Quant-Desk mit 500M Token/Monat sind das $74.580/Jahr.

Praxiserfahrung: Mein Setup für Vanna/Charm-Screening

Persönlich nutze ich seit 18 Monaten HolySheep für folgende Workflows:

  1. Morgendliches Greeks-Screening (07:00 Uhr MEZ): DeepSeek V3.2 für schnelle Delta/Vanna/Charm-Berechnung über alle Positionen
  2. Stress-Test-Szenarien: GPT-4.1 für komplexe numerische Differentiation bei exotischen Strukturen
  3. Ad-hoc-Risikoqueries: Gemini 2.5 Flash für schnelle "Was-wäre-wenn"-Analysen

Die <50ms Latenz von HolySheep macht den Unterschied: Mein vorheriger Anbieter brauchte 340ms im Schnitt – bei 1000 API-Calls/Tag war das unbenutzbar. Jetzt screene ich in Echtzeit.

Implementation: Vanna/Charm-Berechnung mit HolySheep API

Hier ist mein produktionsreifes Python-Setup für die second-order Greeks-Analyse:

#!/usr/bin/env python3
"""
HolySheep AI - Second-Order Greeks Calculator
Vanna = ∂Δ/∂σ = ∂Vega/∂S
Charm = ∂Δ/∂t = -∂Theta/∂S

Verwendung: python3 vanna_charm_calculator.py
"""

import requests
import numpy as np
from scipy.stats import norm
from typing import Dict, Tuple, Optional
import json
from datetime import datetime
import os

============================================================

KONFIGURATION - HOLYSHEEP API

============================================================

HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" API_KEY = os.environ.get("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY") class BlackScholesSecondOrder: """ Berechnet First- und Second-Order Greeks nach Black-Scholes. Verwendet zentrale Differenzen für Vanna und Charm. """ def __init__(self, S: float, K: float, T: float, r: float, sigma: float, q: float = 0.0): self.S = S # Spot Price self.K = K # Strike Price self.T = T # Time to Maturity (Jahre) self.r = r # Risk-Free Rate self.sigma = sigma # Volatilität self.q = q # Dividend Yield def d1_d2(self) -> Tuple[float, float]: d1 = (np.log(self.S / self.K) + (self.r - self.q + 0.5 * self.sigma**2) * self.T) / (self.sigma * np.sqrt(self.T)) d2 = d1 - self.sigma * np.sqrt(self.T) return d1, d2 def price(self, option_type: str = 'call') -> float: d1, d2 = self.d1_d2() if option_type.lower() == 'call': return self.S * np.exp(-self.q * self.T) * norm.cdf(d1) - self.K * np.exp(-self.r * self.T) * norm.cdf(d2) else: return self.K * np.exp(-self.r * self.T) * norm.cdf(-d2) - self.S * np.exp(-self.q * self.T) * norm.cdf(-d1) def delta(self, option_type: str = 'call') -> float: d1, _ = self.d1_d2() sign = 1 if option_type.lower() == 'call' else -1 return sign * np.exp(-self.q * self.T) * norm.cdf(sign * d1) def vega(self) -> float: d1, _ = self.d1_d2() return self.S * np.exp(-self.q * self.T) * norm.pdf(d1) * np.sqrt(self.T) / 100 # pro 1% Vol def theta(self, option_type: str = 'call') -> float: d1, d2 = self.d1_d2() sign = 1 if option_type.lower() == 'call' else -1 term1 = -self.S * np.exp(-self.q * self.T) * norm.pdf(d1) * self.sigma / (2 * np.sqrt(self.T)) term2 = sign * (self.r * self.K * np.exp(-self.r * self.T) * norm.cdf(sign * d2)) term3 = sign * (self.q * self.S * np.exp(-self.q * self.T) * norm.cdf(sign * d1)) return (term1 - term2 + term3) / 365 # pro Tag def vanna(self, option_type: str = 'call', h_sigma: float = 0.001) -> float: """ Vanna = ∂Δ/∂σ = ∂Vega/∂S Berechnet via zentraler Differenz. """ delta_plus = self.delta_sigma(self.sigma + h_sigma, option_type) delta_minus = self.delta_sigma(self.sigma - h_sigma, option_type) return (delta_plus - delta_minus) / (2 * h_sigma) def charm(self, option_type: str = 'call', h_time: float = 1/365) -> float: """ Charm = ∂Δ/∂t = -∂Theta/∂S Berechnet via zentraler Differenz in der Zeit. """ delta_plus = self.delta_time(self.T - h_time, option_type) delta_minus = self.delta_time(self.T + h_time, option_type) return (delta_plus - delta_minus) / (2 * h_time) def delta_sigma(self, sigma_new: float, option_type: str) -> float: bs = BlackScholesSecondOrder(self.S, self.K, self.T, self.r, sigma_new, self.q) return bs.delta(option_type) def delta_time(self, T_new: float, option_type: str) -> float: if T_new <= 0: return self.delta(option_type) # Return static delta at expiry bs = BlackScholesSecondOrder(self.S, self.K, T_new, self.r, self.sigma, self.q) return bs.delta(option_type) def analyze_with_holysheep(position_data: Dict) -> Dict: """ Sendet Greeks-Analyse an HolySheep AI für erweiterte Interpretation. Verwendet DeepSeek V3.2 für kosteneffiziente Batch-Verarbeitung. """ headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } prompt = f""" Analysiere folgende Optionsposition und berechne Tail-Risk-Implikationen basierend auf Vanna und Charm: Position: - Typ: {position_data.get('type', 'call')} - Spot: ${position_data.get('S', 100)} - Strike: ${position_data.get('K', 105)} - Laufzeit: {position_data.get('T', 0.25)} Jahre - Volatilität: {position_data.get('sigma', 0.25)*100}% - Vanna: {position_data.get('vanna', 0):.6f} - Charm: {position_data.get('charm', 0):.6f} Fragen: 1. Wie interpretierst du das Vanna-Risiko bei Volatilitätsanstieg? 2. Welche Charm-Drift ist über Nacht zu erwarten? 3. Empfohlene Hedge-Strategie? """ payload = { "model": "deepseek-v3.2", # $0.42/MTok - kosteneffizient! "messages": [ {"role": "system", "content": "Du bist ein erfahrener Options-Quant-Analyst. Antworte präzise und quantitativ."}, {"role": "user", "content": prompt} ], "temperature": 0.3, "max_tokens": 800 } try: response = requests.post( f"{HOLYSHEEP_BASE_URL}/chat/completions", headers=headers, json=payload, timeout=10 ) response.raise_for_status() result = response.json() return { "status": "success", "analysis": result['choices'][0]['message']['content'], "model": "deepseek-v3.2", "usage": result.get('usage', {}) } except requests.exceptions.RequestException as e: return {"status": "error", "message": str(e)} def main(): """ Beispiel: Vanna/Charm-Berechnung für eine Short-Gamma-Position. """ print("=" * 60) print("HolySheep AI - Second-Order Greeks Calculator v2.1259") print("=" * 60) # Beispielposition: Short Straddle auf AAPL positions = [ {"name": "Short Call ATM", "S": 185, "K": 185, "T": 0.083, "r": 0.053, "sigma": 0.28, "q": 0.005, "type": "call"}, {"name": "Short Put ATM", "S": 185, "K": 185, "T": 0.083, "r": 0.053, "sigma": 0.32, "q": 0.005, "type": "put"}, ] total_vanna = 0 total_charm = 0 for pos in positions: bs = BlackScholesSecondOrder(pos["S"], pos["K"], pos["T"], pos["r"], pos["sigma"], pos["q"]) delta = bs.delta(pos["type"]) vega = bs.vega() theta = bs.theta(pos["type"]) vanna = bs.vanna(pos["type"]) charm = bs.charm(pos["type"]) total_vanna += vanna total_charm += charm print(f"\n{pos['name']}:") print(f" Delta: {delta:.4f} | Vega: {vega:.4f} | Theta: {theta:.4f}") print(f" Vanna: {vanna:.6f} | Charm: {charm:.6f}") # HolySheep-Analyse analysis = analyze_with_holysheep({ "type": pos["type"], "S": pos["S"], "K": pos["K"], "T": pos["T"], "sigma": pos["sigma"], "vanna": vanna, "charm": charm }) if analysis["status"] == "success": print(f" [HolySheep AI] {analysis['analysis'][:200]}...") print(f"\n{'='*60}") print(f"Portfolio Vanna: {total_vanna:.6f}") print(f"Portfolio Charm: {total_charm:.6f}") print(f"\nInterpretation:") print(f" - Vanna {'positiv' if total_vanna > 0 else 'negativ'}: {'Long-Vola-Bias' if total_vanna > 0 else 'Short-Vola-Bias'}") print(f" - Charm {'positiv' if total_charm > 0 else 'negativ'}: {'Delta steigt über Nacht' if total_charm > 0 else 'Delta fällt über Nacht'}") print("=" * 60) if __name__ == "__main__": main()

Erweiterte Implementierung: Volga und Veta für vollständiges Greeks-Profil

#!/usr/bin/env python3
"""
HolySheep AI - Complete Greeks Dashboard
Berechnet: Delta, Gamma, Vega, Theta, Rho, Vanna, Charm, Volga, Veta, Speed

Author: HolySheep Quant Team
Version: 2.1259 (Mai 2026)
"""

import requests
import json
from dataclasses import dataclass
from typing import List, Dict, Optional
import numpy as np

HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
API_KEY = "YOUR_HOLYSHEEP_API_KEY"  # Via os.environ in Produktion

@dataclass
class GreeksResult:
    """Datenklasse für vollständige Greeks-Analyse"""
    delta: float
    gamma: float
    vega: float
    theta: float
    vanna: float
    charm: float
    volga: float  # ∂Vega/∂σ
    veta: float   # ∂Vega/∂t
    
    def to_dict(self) -> Dict:
        return {
            "Delta": f"{self.delta:.4f}",
            "Gamma": f"{self.gamma:.4f}",
            "Vega": f"{self.vega:.4f}",
            "Theta": f"{self.theta:.4f}",
            "Vanna": f"{self.vanna:.6f}",
            "Charm": f"{self.charm:.6f}",
            "Volga": f"{self.volga:.6f}",
            "Veta": f"{self.veta:.6f}"
        }


def calculate_greeks_bump_and_reprice(
    S: float, K: float, T: float, r: float, sigma: float, 
    q: float = 0.0, option_type: str = 'call'
) -> GreeksResult:
    """
    Berechnet alle Greeks mittels Bump-and-Reprice Methode.
    Höhere Genauigkeit als analytische Formeln für exotische Payoffs.
    """
    from scipy.stats import norm
    
    def black_scholes_price(S, K, T, r, sigma, q, opt_type):
        if T <= 0:
            return max(0, S - K) if opt_type == 'call' else max(0, K - S)
        d1 = (np.log(S/K) + (r - q + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
        d2 = d1 - sigma*np.sqrt(T)
        if opt_type == 'call':
            return S*np.exp(-q*T)*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
        return K*np.exp(-r*T)*norm.cdf(-d2) - S*np.exp(-q*T)*norm.cdf(-d1)
    
    # Base price
    P0 = black_scholes_price(S, K, T, r, sigma, q, option_type)
    
    # Bump-Sizes
    dS = S * 0.01      # 1% Spot-Bump
    dSigma = 0.01      # 1 Vol-Punkt
    dt = 1/365/24      # 1 Stunde
    
    # First-Order Greeks
    Pu = black_scholes_price(S + dS, K, T, r, sigma, q, option_type)
    Pd = black_scholes_price(S - dS, K, T, r, sigma, q, option_type)
    delta = (Pu - Pd) / (2 * dS)
    gamma = (Pu - 2*P0 + Pd) / (dS**2)
    
    Pvu = black_scholes_price(S, K, T, r, sigma + dSigma, q, option_type)
    Pvd = black_scholes_price(S, K, T, r, sigma - dSigma, q, option_type)
    vega = (Pvu - Pvd) / (2 * dSigma) / 100
    
    Pt = black_scholes_price(S, K, T - dt, r, sigma, q, option_type)
    theta = (Pt - P0) / dt / 365
    
    # Second-Order Greeks
    delta_sigma_up = (black_scholes_price(S + dS, K, T, r, sigma + dSigma, q, option_type) - 
                      black_scholes_price(S - dS, K, T, r, sigma + dSigma, q, option_type)) / (2 * dS)
    delta_sigma_down = (black_scholes_price(S + dS, K, T, r, sigma - dSigma, q, option_type) - 
                        black_scholes_price(S - dS, K, T, r, sigma - dSigma, q, option_type)) / (2 * dS)
    vanna = (delta_sigma_up - delta_sigma_down) / (2 * dSigma)
    
    delta_t_up = (black_scholes_price(S + dS, K, T - dt, r, sigma, q, option_type) - 
                  black_scholes_price(S - dS, K, T - dt, r, sigma, q, option_type)) / (2 * dS)
    delta_t_down = (black_scholes_price(S + dS, K, T + dt, r, sigma, q, option_type) - 
                    black_scholes_price(S - dS, K, T + dt, r, sigma, q, option_type)) / (2 * dS)
    charm = (delta_t_up - delta_t_down) / (2 * dt)
    
    vega_sigma_up = (black_scholes_price(S, K, T, r, sigma + dSigma, q, option_type) - P0) / dSigma / 100
    vega_sigma_down = (black_scholes_price(S, K, T, r, sigma - dSigma, q, option_type) - P0) / (-dSigma) / 100
    volga = (vega_sigma_up - vega_sigma_down) / (2 * dSigma) * 100
    
    vega_t_up = (black_scholes_price(S, K, T - dt, r, sigma + dSigma, q, option_type) - 
                 black_scholes_price(S, K, T - dt, r, sigma, q, option_type)) / dSigma / 100
    vega_t_down = (black_scholes_price(S, K, T + dt, r, sigma + dSigma, q, option_type) - 
                   black_scholes_price(S, K, T + dt, r, sigma, q, option_type)) / dSigma / 100
    veta = (vega_t_up - vega_t_down) / (2 * dt) / 365
    
    return GreeksResult(delta, gamma, vega, theta, vanna, charm, volga, veta)


def generate_risk_report(positions: List[Dict], use_holysheep: bool = True) -> Dict:
    """
    Generiert vollständigen Risikoreport für Portfolio.
    Optionale HolySheep AI-Integration für KI-gestützte Interpretation.
    """
    report = {
        "timestamp": "2026-05-06T12:59:00Z",
        "version": "v2_1259_0506",
        "portfolio_greeks": {
            "total_delta": 0,
            "total_gamma": 0,
            "total_vega": 0,
            "total_theta": 0,
            "total_vanna": 0,
            "total_charm": 0,
            "total_volga": 0,
            "total_veta": 0
        },
        "positions": [],
        "alerts": [],
        "ai_insights": None
    }
    
    for pos in positions:
        greeks = calculate_greeks_bump_and_reprice(
            S=pos["spot"],
            K=pos["strike"],
            T=pos["tenor"],
            r=pos["rate"],
            sigma=pos["vol"],
            q=pos.get("div_yield", 0.0),
            option_type=pos["type"]
        )
        
        multiplier = pos.get("quantity", 1) * (1 if pos.get("direction", "long") == "long" else -1)
        
        report["portfolio_greeks"]["total_delta"] += greeks.delta * multiplier
        report["portfolio_greeks"]["total_gamma"] += greeks.gamma * multiplier
        report["portfolio_greeks"]["total_vega"] += greeks.vega * multiplier
        report["portfolio_greeks"]["total_theta"] += greeks.theta * multiplier
        report["portfolio_greeks"]["total_vanna"] += greeks.vanna * multiplier
        report["portfolio_greeks"]["total_charm"] += greeks.charm * multiplier
        report["portfolio_greeks"]["total_volga"] += greeks.volga * multiplier
        report["portfolio_greeks"]["total_veta"] += greeks.veta * multiplier
        
        report["positions"].append({
            "name": pos["name"],
            "greeks": greeks.to_dict(),
            "position_pnl_impact": {
                "1%_spot_move": greeks.delta * 0.01 * pos["spot"] * multiplier,
                "1vol_spike": greeks.vega * 1 * multiplier,
                "1day_decay": greeks.theta * multiplier
            }
        })
        
        # Risk Alerts
        if abs(greeks.vanna) > 0.1:
            report["alerts"].append(f"HIGH VANNA RISK in {pos['name']}: {greeks.vanna:.4f}")
        if abs(greeks.charm) > 0.05:
            report["alerts"].append(f"HIGH CHARM DRIFT in {pos['name']}: {greeks.charm:.4f}")
    
    # HolySheep AI Integration für KI-Interpretation
    if use_holysheep:
        headers = {
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        }
        
        prompt = f"""
Analysiere folgendes Options-Portfolio für Tail-Risk:

Portfolio Greeks:
- Total Vanna: {report['portfolio_greeks']['total_vanna']:.4f}
- Total Charm: {report['portfolio_greeks']['total_charm']:.4f}
- Total Volga: {report['portfolio_greeks']['total_volga']:.4f}
- Total Veta: {report['portfolio_greeks']['total_veta']:.4f}

Alerts:
{chr(10).join(report['alerts'])}

Bereiche:
1. Interpretation der Vanna/Charm-Risiken
2. Szenario-Analyse (VIX-Spike, Overnight-Gap)
3. Empfohlene Hedge-Anpassungen
4. Kapazitätsplanung für Margin-Calls

Antworte strukturiert in maximal 500 Wörtern.
"""
        
        payload = {
            "model": "deepseek-v3.2",
            "messages": [
                {"role": "system", "content": "Du bist Chief Risk Officer mit 20 Jahren Erfahrung in Derivate-Risikomanagement."},
                {"role": "user", "content": prompt}
            ],
            "temperature": 0.2,
            "max_tokens": 600
        }
        
        try:
            resp = requests.post(
                f"{HOLYSHEEP_BASE_URL}/chat/completions",
                headers=headers,
                json=payload,
                timeout=15
            )
            if resp.status_code == 200:
                report["ai_insights"] = resp.json()["choices"][0]["message"]["content"]
                report["ai_model"] = "deepseek-v3.2 @ $0.42/MTok"
        except Exception as e:
            report["ai_error"] = str(e)
    
    return report


Beispiel-Usage

if __name__ == "__main__": test_positions = [ {"name": "AAPL Jun 185 Call", "spot": 185, "strike": 185, "tenor": 0.083, "rate": 0.053, "vol": 0.28, "div_yield": 0.005, "type": "call", "quantity": 100, "direction": "long"}, {"name": "SPY Put 450", "spot": 455, "strike": 450, "tenor": 0.25, "rate": 0.052, "vol": 0.22, "div_yield": 0.015, "type": "put", "quantity": 50, "direction": "short"}, ] report = generate_risk_report(test_positions) print("=" * 70) print("HOLYSHEEP TARDIS - PORTFOLIO RISK REPORT") print(f"Version: {report['version']} | Timestamp: {report['timestamp']}") print("=" * 70) print("\n📊 PORTFOLIO GREEKS:") for greek, value in report['portfolio_greeks'].items(): print(f" {greek.capitalize():12s}: {value:+.6f}") print("\n⚠️ ALERTS:") for alert in report['alerts']: print(f" • {alert}") if report.get('ai_insights'): print("\n🤖 HOLYSHEEP AI INSIGHTS:") print(f" Model: {report.get('ai_model', 'N/A')}") print(f" {report['ai_insights']}") print("\n" + "=" * 70)

Häufige Fehler und Lösungen

1. Fehler: Falsche Vanna-Berechnung bei tiefen Laufzeiten

Symptom: Vanna springt zu extremen Werten, wenn T < 0.05 Jahre.

# PROBLEMATISCH:
def vanna_naive(self, option_type: str = 'call', h_sigma: float = 0.01) -> float:
    # Direkte Differentiation ohne Prüfung
    delta_plus = self.delta_sigma(self.sigma + h_sigma, option_type)
    delta_minus = self.delta_sigma(self.sigma - h_sigma, option_type)
    return (delta_plus - delta_minus) / (2 * h_sigma)

LÖSUNG: Adaptive Bump-Size und Boundary-Check

def vanna_safe(self, option_type: str = 'call') -> float: # Adaptive Bump basierend auf Zeit und Volatilität h_sigma = max(0.001, min(0.01, self.sigma * 0.05)) h_time = max(1/3650, min(1/365, self.T * 0.01)) # Min 1 Tag, Max 1 Stunde # Numerische Stabilität bei kurzen Laufzeiten if self.T < 0.02: # Weniger als 1 Woche # Verwende geschlossene Formel für d1 d1 = (np.log(self.S / self.K) + (self.r - self.q + 0.5 * self.sigma**2) * self.T) / (self.sigma * np.sqrt(self.T)) # Vanna ≈ -e^{-qT} * phi(d1) * d2/sigma (approximiert) from scipy.stats import norm vanna_approx = -np.exp(-self.q * self.T) * norm.pdf(d1) * d1 / self.sigma return vanna_approx # Sonst numerische Differentiation return self.vanna_numerical(option_type, h_sigma)

2. Fehler: Charm ignoriert Dividendeneffekte bei Ex-Tagen

Symptom: Charm zeigt unerwartete Sprünge an Dividendenzahlungstagen.

# PROBLEMATISCH:
def charm_simple(self, option_type: str = 'call') -> float:
    return self.charm(option_type)  # Ignoriert diskrete Dividenden

LÖSUNG: Kontinuierliche + diskrete Dividendeneinberechnung

class BlackScholesWithDividends(BlackScholesSecondOrder): def __init__(self, S, K, T, r, sigma, q=0.0, discrete_divs=None): super().__init__(S, K, T, r, sigma, q) self.discrete_divs = discrete_divs or [] # Liste von (Datum, Betrag) def adjusted_spot(self, t_eval: float) -> float: """Spot-Anpassung für diskrete Dividenden""" S_adj = self.S for div_date, div_amount in self.discrete_divs: if div_date < t_eval: S_adj -= div_amount * np.exp(-self.r * (div_date - 0)) # PV der Dividende return S_adj def charm_corrected(self, option_type: str = 'call') -> float: """Charm mit Dividendeneffekt""" # Charm Base charm_base = super().charm(option_type) # Dividend Adjustment for div_date, div_amount in self.discrete_divs: if 0 < div_date < self.T: # Zusätzlicher Charm-Effekt der Dividende # ∂Δ/∂t durch diskrete Dividendenzahlung div_timing = div_date / 365 div_impact = div_amount * np.exp(-self.r * div_timing) / 365 if option_type == 'call': charm_base -=