XGBoost für DAX-Optionshandel in Python
Von Shakti Tiwari — Nifty-Optionshändler, Research Analyst & XGBoost-Experte
Der DAX ist einer der liquidesten Aktienindizes Europas, und DAX-Optionen (ODAX) an der Eurex gehören zu den meistgehandelten Indexoptionen des Kontinents. Trotzdem findet man im deutschsprachigen Raum kaum praktische Anleitungen, wie man maschinelles Lernen — insbesondere XGBoost — sinnvoll auf den DAX-Optionshandel anwendet. Dieser Artikel schließt genau diese Lücke: Schritt für Schritt, mit echtem Python-Code, ohne übertriebene Versprechen.
Warum XGBoost für den DAX?
XGBoost (Extreme Gradient Boosting) ist ein Ensemble-Verfahren auf Basis von Entscheidungsbäumen. Für Finanzdaten hat es drei große Vorteile: Es kommt gut mit tabellarischen Daten zurecht, es benötigt keine Normalisierung der Features, und es liefert Feature-Importances, mit denen man versteht, worauf das Modell achtet. Für Optionshändler ist das entscheidend: Wir wollen keine Blackbox, sondern ein Werkzeug, das unsere Handelsentscheidungen unterstützt.
Wichtig vorab: Ein Modell sagt nicht die Zukunft voraus. Es schätzt Wahrscheinlichkeiten auf Basis historischer Muster. Wer das versteht, nutzt XGBoost richtig — als Filter für Setups, nicht als Orakel.
Schritt 1: DAX-Daten in Python laden
Kostenlose historische DAX-Daten bekommt man z. B. über yfinance (Ticker ^GDAXI):
import yfinance as yf
import pandas as pd
df = yf.download("^GDAXI", start="2015-01-01", interval="1d")
df = df.dropna()
print(df.tail())
Für Intraday-Analysen liefert yfinance begrenzte Historie (z. B. 60 Tage bei 5-Minuten-Kerzen). Für ernsthafte Backtests lohnt sich ein Datenanbieter oder der Export aus der eigenen Broker-Plattform.
Schritt 2: Features konstruieren — ohne Zukunftsblick
Der häufigste Fehler im ML-Trading ist Lookahead-Bias: Das Modell sieht Informationen, die zum Handelszeitpunkt noch nicht verfügbar waren. Die goldene Regel: Alle Features berechnen und dann mit shift(1) versetzen, bevor sie mit dem Zielwert kombiniert werden.
import numpy as np
df["ret1"] = df["Close"].pct_change(1)
df["ret5"] = df["Close"].pct_change(5)
df["ret20"] = df["Close"].pct_change(20)
df["vol20"] = df["ret1"].rolling(20).std()
df["range"] = (df["High"] - df["Low"]) / df["Close"]
df["dist_ma50"] = df["Close"] / df["Close"].rolling(50).mean() - 1
features = ["ret1", "ret5", "ret20", "vol20", "range", "dist_ma50"]
X = df[features].shift(1) # nur Vergangenheitsdaten!
y = (df["ret1"] > 0).astype(int) # Ziel: steigt der DAX heute?
data = pd.concat([X, y.rename("target")], axis=1).dropna()
Für Optionshändler ist neben der Richtung vor allem die Volatilität interessant. Ein zweites, oft nützlicheres Ziel: Wird die realisierte Schwankung morgen über dem Median liegen? Das hilft bei der Entscheidung zwischen Strategien wie Straddles (Volatilität kaufen) und Credit Spreads (Volatilität verkaufen).
Schritt 3: XGBoost trainieren — mit zeitlicher Trennung
Bei Zeitreihen darf man niemals zufällig in Trainings- und Testdaten aufteilen. Immer chronologisch trennen:
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score
split = int(len(data) * 0.8)
train, test = data.iloc[:split], data.iloc[split:]
model = XGBClassifier(
n_estimators=300, max_depth=3, learning_rate=0.05,
subsample=0.8, colsample_bytree=0.8, eval_metric="logloss"
)
model.fit(train[features], train["target"])
pred = model.predict(test[features])
print("Trefferquote:", round(accuracy_score(test["target"], pred), 3))
Eine flache Baumtiefe (max_depth=3) und moderate Lernrate schützen vor Overfitting — bei verrauschten Finanzdaten wichtiger als jede Feinabstimmung.
Schritt 4: Vom Signal zur Optionsstrategie
Das Modell liefert Wahrscheinlichkeiten (model.predict_proba). So übersetzt man sie in DAX-Optionsideen:
- Hohe Wahrscheinlichkeit für steigenden DAX + niedrige erwartete Volatilität: Bull-Put-Spread unterhalb einer Unterstützung — definiertes Risiko, profitiert von Zeitwertverfall.
- Signal für steigende Volatilität ohne klare Richtung: Long Straddle oder Strangle vor bekannten Terminen (EZB-Sitzungen, Ifo-Index, US-Arbeitsmarktdaten).
- Schwaches oder widersprüchliches Signal: Kein Trade. Die beste Eigenschaft eines Modells ist, uns vom Übertraden abzuhalten.
Handeln Sie nur mit definiertem Risiko und beachten Sie die Eurex-Kontraktspezifikationen (Multiplikator, Verfallstermine, europäische Ausübung bei ODAX).
Schritt 5: Ehrliches Backtesting
Bevor echtes Geld fließt: Transaktionskosten, Spreads und Slippage einrechnen. DAX-Optionen haben je nach Laufzeit und Strike unterschiedlich enge Spreads. Ein Modell, das vor Kosten knapp profitabel wirkt, ist es nach Kosten meist nicht. Walk-Forward-Tests (Modell regelmäßig neu trainieren, immer nur auf ungesehenen Daten testen) sind der Mindeststandard.
Häufige Fehler deutscher Einsteiger
- Zu viele Features: 10–20 durchdachte Features schlagen 200 beliebige.
- Ergebnisse aus einem einzigen Testzeitraum: DAX 2020 und DAX 2023 sind völlig verschiedene Märkte.
- Accuracy überschätzen: 53 % Trefferquote können profitabel sein, 60 % mit Leak sind wertlos.
- Steuern und Kosten ignorieren: In Deutschland gelten besondere Regeln für Termingeschäfte — vor dem Livegang mit einem Steuerberater klären.
Takeaway
XGBoost ist ein hervorragendes Werkzeug, um DAX-Marktphasen zu klassifizieren und Optionsstrategien zu filtern — wenn man Lookahead-Bias vermeidet, chronologisch testet und Kosten ehrlich einrechnet. Das Modell ersetzt kein Risikomanagement; es macht diszipliniertes Handeln systematischer. Fangen Sie klein an: ein Ziel (Richtung oder Volatilität), wenige saubere Features, Walk-Forward-Test — und erst dann reale Trades mit definiertem Risiko.
Haftungsausschluss: Dieser Artikel dient ausschließlich Bildungszwecken und stellt keine Anlageberatung dar. Der Handel mit Optionen und Derivaten ist mit erheblichen Risiken verbunden und kann zum Totalverlust des eingesetzten Kapitals führen. Vergangene Ergebnisse sind keine Garantie für zukünftige Entwicklungen. Konsultieren Sie vor Anlageentscheidungen einen zugelassenen Finanzberater.
Tritt unserem Telegram bei: https://t.me/shaktitrade
Kontakt: https://optiontradingwithai.in
Top comments (0)