Medals & Risk-Flags

Aus einer gefilterten Optionskette berechnet der Medal-Ranking-Service die Top-3 Strikes – sortiert nach annualisierter Praemie und annotiert mit Risk-Flags.

Annualisierte Praemie

annualized_premium_pct = (mid / strike) * (365 / dte) * 100

Beispiel: AAPL Put 180, mid 2.10, DTE 30 → (2.10 / 180) * (365 / 30) * 100 = 14.2 % p.a.

Medals

RangSymbolBedeutung
1🥇 Goldhoechste Praemie p.a.
2🥈 Silverzweitbeste Praemie
3🥉 Bronzedritte Wahl

Die Auswahl erfolgt nach Anwendung der DTE-, Delta-, OI- und Volume-Filter. Optional können Sie Strikes mit bestimmten Risk-Flags ausschliessen (exclude_flags).

Risk-Flags

FlagIconBedeutung
earnings📅Earnings-Termin liegt innerhalb des konfigurierten Fensters
ex_div💰Ex-Dividend-Datum liegt vor Expiry – frueher Assignment-Druck
iv_low📉IV niedrig → kleine Praemie, fairer Wert
iv_extreme⚠️IV extrem hoch → Mean-Reversion-Risiko
low_liquidity💧Wenig Open-Interest oder Volume

Default-Earnings-Fenster: 7 Tage vor Expiry.

Konfiguration

POST /api/options/medals/{SYMBOL}
{
  "expiry": "2026-06-19",
  "filters": { "option_type": "PUT", "dte_min": 7, "dte_max": 60 },
  "top_n": 3,
  "earnings_window_days": 7,
  "exclude_flags": ["earnings", "iv_extreme"]
}

Antwort enthaelt pro Medal: Kontrakt, annualized_premium_pct und risk_flags: [].

Lesen der Liste

In der Chain-Page sehen Sie die Top-3 als drei Kaesten oben, mit Medal-Icon, Praemie p.a., Strike, DTE, Mid, Delta, IV, OI – und farbigen Flag-Chips darunter.

Score-Modell (Detail)

Die vollstaendige Beschreibung der Pipeline (Filter -> Score -> Klassifikation -> Top-3), aller Sub-Score-Gewichte, der target_return-Tabelle, der cost_basis-Logik und der Klassifikations-Schwellen finden Sie im eigenen Topic "Scoring-Modell (PUT L1/L2, CC)".

Kurzfassung hier:

Das Ranking nutzt dasselbe Scoring wie die Desktop-App (Datei services/option_scoring.py, 1:1 portiert aus app/utils/option_utils.py). Ein Strike wird auf Basis mehrerer Sub-Scores bewertet, das hoechste Total bekommt Gold.

PUT (max 110)

KomponentePunkteIdee
Praemie %0–40min(40, premium_pct / target_return * 40)
ATR-Distanz0–25`25 -2.5 - atr_distance* 5` – optimal bei 2.5 ATR unter Spot
Open-Interest0–20min(20, OI / 100 * 20) – Liquiditaet
IV0–15min(15, IV / 0.5 * 15) – hoehere IV = hoehere Praemie
Regel-16-Bonus0–10Bonus wenn ATR-Tagesbewegung < VIX/16 (Aktie ruhiger als VIX-Hint)

`target_return` haengt von der PUT-Strategie ab:

StrategieWann?target_return
L1Sie halten keine Aktien des Symbols1.5 %
L2Sie halten bereits Aktien (Wheel Phase 2)0.8 %
FallbackSonderfall0.6 %

L2 setzt eine niedrigere Renditeforderung an, weil der zusaetzliche Put primaer der Cost-Basis-Reduktion dient – nicht dem Neuaufbau einer Position. Identische Strikes scoren bei has_stock=True daher hoeher.

Die ATR-Distanz fuer Puts ist immer gegen den aktuellen Kurs gemessen:

atr_distance_put = (current_price - strike) / atr52

Grund: Beim Put-Verkauf besitzen Sie die Aktien noch nicht – der Strike ist der zukuenftige Andienungspreis. Die Distanz misst die Sicherheits-Cushion relativ zum aktuellen Kurs.

Covered Call (max 100)

KomponentePunkteIdee
Praemie %0–30min(30, premium_pct / 0.6 * 30)
Capital-Gain %0–30min(30, capital_gain_pct / 5.0 * 30)
ATR-Distanz0–20`20 -2.5 - atr_distance* 4`
Open-Interest0–10min(10, OI / 100 * 10)
IV0–10min(10, IV / 0.5 * 10)

Wichtig: Beim CC ist die Referenz Ihr Andienungspreis (cost_basis), nicht der aktuelle Kurs. Sie sind bereits Aktien-Owner und willst den Call mit Gewinn ueber Ihrem Einstand verkaufen. Sowohl ATR-Distanz als auch der Capital-Gain rechnen daher gegen cost_basis:

reference     = cost_basis if (has_stock and cost_basis > 0) else current_price
atr_distance  = (strike - reference) / atr52
capital_gain_pct = (strike - reference) / reference * 100

Beispiel CMG, cost_basis 34.00, aktueller Kurs 36.20, ATR52 1.31:

StrikeDistanz gegen SpotDistanz gegen cost_basisCapital-Gain
36-0.15 ATR (im Geld)+1.53 ATR (sicher)+5.9 %
38+1.37 ATR+3.05 ATR+11.8 %

Genau deshalb tauchen mit gesetztem Bestand auch CC-Strikes auf, die relativ zum Spot-Kurs unattraktiv waeren.

Wo has_stock und cost_basis herkommen

Der Service load_symbol_context schaut in Ihre offenen Long-Stock-Positionen zum Symbol. Wenn vorhanden, werden has_stock=True und der durchschnittliche Einstandspreis als purchase_price an den Ranker gegeben.

Pflichtlektuere

Lies dazu auch:

  • "Options-Screening" (welche Filter es gibt)
  • "Smart-Limit & Mid-Drift" (wie aus einem Medal ein Proposal mit Limit wird)
  • "Sicherheits-Gates" (was vor dem Senden geprueft wird)