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) * 100Beispiel: AAPL Put 180, mid 2.10, DTE 30 → (2.10 / 180) * (365 / 30) * 100 = 14.2 % p.a.
Medals
| Rang | Symbol | Bedeutung |
|---|---|---|
| 1 | 🥇 Gold | hoechste Praemie p.a. |
| 2 | 🥈 Silver | zweitbeste Praemie |
| 3 | 🥉 Bronze | dritte 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
| Flag | Icon | Bedeutung |
|---|---|---|
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)
| Komponente | Punkte | Idee | ||
|---|---|---|---|---|
| Praemie % | 0–40 | min(40, premium_pct / target_return * 40) | ||
| ATR-Distanz | 0–25 | `25 - | 2.5 - atr_distance | * 5` – optimal bei 2.5 ATR unter Spot |
| Open-Interest | 0–20 | min(20, OI / 100 * 20) – Liquiditaet | ||
| IV | 0–15 | min(15, IV / 0.5 * 15) – hoehere IV = hoehere Praemie | ||
| Regel-16-Bonus | 0–10 | Bonus wenn ATR-Tagesbewegung < VIX/16 (Aktie ruhiger als VIX-Hint) |
`target_return` haengt von der PUT-Strategie ab:
| Strategie | Wann? | target_return |
|---|---|---|
| L1 | Sie halten keine Aktien des Symbols | 1.5 % |
| L2 | Sie halten bereits Aktien (Wheel Phase 2) | 0.8 % |
| Fallback | Sonderfall | 0.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) / atr52Grund: 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)
| Komponente | Punkte | Idee | ||
|---|---|---|---|---|
| Praemie % | 0–30 | min(30, premium_pct / 0.6 * 30) | ||
| Capital-Gain % | 0–30 | min(30, capital_gain_pct / 5.0 * 30) | ||
| ATR-Distanz | 0–20 | `20 - | 2.5 - atr_distance | * 4` |
| Open-Interest | 0–10 | min(10, OI / 100 * 10) | ||
| IV | 0–10 | min(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 * 100Beispiel CMG, cost_basis 34.00, aktueller Kurs 36.20, ATR52 1.31:
| Strike | Distanz gegen Spot | Distanz gegen cost_basis | Capital-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)