E-Mini S&P 500: Strategien, Sessions, Roll-Mechanik.
Der E-Mini S&P 500 Future (Kürzel ES) ist das wahrscheinlich am intensivsten gehandelte Spekulationsinstrument der Welt. Wer ihn systematisch handeln will, braucht weniger einen magischen Indikator als ein nüchternes Verständnis von Liquiditätsfenstern, Roll-Terminen und der Frage, welche Strategie zu welcher Session passt. Hier ist, was nach zehn Jahren Praxis übrig geblieben ist — inklusive Python-Code.
Warum überhaupt ES und nicht SPY?
Wer den S&P 500 spekulativ handeln will, hat grob drei Wege: den ETF SPY,
Optionen auf SPX oder SPY, oder den Future ES
(bzw. den kleineren MES). Für systematisches Trading überwiegen aus meiner
Sicht die Vorteile des Futures deutlich.
- Quasi 24-Stunden-Handel: ES handelt von Sonntag 23:00 deutscher Zeit bis Freitag 22:00, mit einer einzigen kurzen Pause täglich (22:00–23:00). Sie können auf asiatische und europäische Ereignisse reagieren, ohne auf die NYSE-Öffnung zu warten.
- Hebel ist eingebaut, aber sauber: Ein ES-Kontrakt repräsentiert 50 USD pro Indexpunkt. Bei einem Indexstand um 5.500 sind das ca. 275.000 USD Nominalwert pro Kontrakt — mit Intraday-Margins um 500–1.500 USD je nach Broker.
- Steuerlich klar (in den USA): Section-1256-Behandlung mit 60/40-Aufteilung. Für deutsche Trader gilt das nicht, aber die Mark-to-Market-Logik vereinfacht die Buchhaltung trotzdem.
- Keine Dividenden, kein Tracking-Error: Der Future ist genau das, was er ist. ETF-Tracking-Differenzen, die bei Faktor-Strategien auf Tagesbasis spürbar werden, fallen weg.
Wann ist SPY trotzdem besser? Bei sehr kleinen Konten unter 10.000 EUR, bei
Strategien mit täglich kleinen Positionen, und überall dort, wo Optionsketten direkt
integriert werden sollen.
Die drei Sessions, die wirklich existieren.
Wer ES auf einer flachen Tagesbasis betrachtet, übersieht das wichtigste Merkmal: unterschiedliche Tageszeiten haben fundamental unterschiedliche statistische Eigenschaften. Ich unterscheide intern drei Sessions, die ich in jeder Strategie separat modelliere.
- Asia-Session (23:00–08:00 deutsche Zeit): dünne Liquidität, Spreads doppelt so breit wie zur Hauptsession, oft technisches Rauschen. Mean-Reversion-Strategien funktionieren hier statistisch am besten — wer Edge sucht, sucht ihn nicht im Asien-Range.
- Europe-Session (08:00–15:30): deutlich aktiver, DAX und EuroStoxx korrelieren stark mit ES. Hier dominieren Reaktionen auf europäische Daten und Pre-Positioning für die US-Eröffnung.
- US-Session (15:30–22:00): die eigentliche Preisbildung. 70–80 % des täglichen Volumens. Trendfolge funktioniert hier besser als in anderen Sessions, vor allem in den ersten zwei Stunden nach Cash-Open.
Roll-Mechanik: das, was Anfänger zerlegt.
ES rollt quartalsweise: März, Juni, September, Dezember. Der Front-Month-Kontrakt verliert ca. 8 Tage vor Verfall an Liquidität, das Volumen wandert in den nächsten Kontrakt. Wer das nicht beachtet, bekommt entweder schlechte Fills oder muss eine Position am Verfall zwangsweise rollen — beides teuer.
Mein Vorgehen: Ich rolle systematisch am achten Tag vor Verfall, sobald das Volumen des nächsten Kontrakts das des aktuellen übersteigt. Backtests werden mit kontinuierlichen Serien gerechnet, die per Ratio-Adjustment angepasst werden — nicht mit Differenz-Adjustment, weil das bei langen Zeiträumen negative Preise erzeugen kann.
import pandas as pd
import numpy as np
def build_continuous_es(contracts: dict, roll_offset_days: int = 8) -> pd.DataFrame:
"""
contracts: dict {expiry_date: DataFrame mit OHLCV}
Roll: am 8. Tag vor Verfall, Ratio-Adjustment rueckwaerts.
"""
expiries = sorted(contracts.keys())
pieces = []
adjustment = 1.0
for i, exp in enumerate(reversed(expiries)):
df = contracts[exp].copy()
roll_date = exp - pd.tseries.offsets.BDay(roll_offset_days)
if i == 0:
piece = df.loc[df.index <= roll_date]
else:
next_exp = list(reversed(expiries))[i - 1]
next_df = contracts[next_exp]
overlap = df.loc[df.index == roll_date - pd.tseries.offsets.BDay(1)]
if not overlap.empty:
ratio = next_df.loc[overlap.index, "close"].iloc[0] / overlap["close"].iloc[0]
adjustment *= ratio
piece = df.loc[df.index <= roll_date]
for col in ["open", "high", "low", "close"]:
piece[col] = piece[col] * adjustment
pieces.append(piece)
continuous = pd.concat(pieces[::-1]).sort_index()
return continuous[~continuous.index.duplicated(keep="last")]
Strategie 1: Opening-Range-Breakout in der US-Session.
Eine der robustesten ES-Strategien überhaupt. Sie definieren die ersten 30 Minuten der Cash-Session (15:30–16:00 deutsche Zeit) als Range. Bei Bruch nach oben kaufen Sie, bei Bruch nach unten verkaufen Sie. Stop in der Range-Mitte, Ziel als Funktion der Range-Höhe.
Die statistische Begründung: die Eröffnungsrange ist in 60–65 % aller Tage auch die
Tages-Range. Wer sie nach oben oder unten verlässt, hat eine erhöhte Wahrscheinlichkeit,
dass der Trend bis zum Cash-Close anhält. Wichtig: nicht bei extrem schmalen Ranges traden,
weil dort der Stop zu eng sitzt und Whipsaws dominieren. Mein Filter: Range muss
mindestens 0.4 × ATR(14) sein.
def orb_signal(intraday: pd.DataFrame, atr: float) -> dict:
"""
intraday: 1-Minuten-Bars ab 15:30 deutscher Zeit, indexiert nach Uhrzeit.
Liefert Signal nach 16:00.
"""
range_window = intraday.between_time("15:30", "16:00")
high_r = range_window["high"].max()
low_r = range_window["low"].min()
range_size = high_r - low_r
if range_size < 0.4 * atr:
return {"action": "skip", "reason": "range_too_tight"}
return {
"action": "armed",
"long_trigger": high_r,
"short_trigger": low_r,
"stop_long": (high_r + low_r) / 2,
"stop_short": (high_r + low_r) / 2,
"target_long": high_r + 1.5 * range_size,
"target_short": low_r - 1.5 * range_size,
}
Strategie 2: Overnight-Drift.
Eine der am besten dokumentierten Anomalien am ES überhaupt: zwischen dem Cash-Close (22:00 deutsche Zeit) und dem Cash-Open des nächsten Tages (15:30) ist die historische Rendite signifikant höher als während der Cash-Session selbst. Über lange Zeiträume erklärt die Overnight-Komponente nahezu den gesamten langfristigen Index-Trend.
Eine simple Umsetzung: kaufen am Cash-Close, verkaufen am Cash-Open. Variante mit Edge: nur kaufen, wenn die Cash-Session selbst negativ schloss — der „Overnight-Reversal-Effekt". Mit dieser zusätzlichen Bedingung steigt die Trefferquote von ca. 54 % auf ca. 58 % und die durchschnittliche Overnight-Rendite verdoppelt sich.
Strategie 3: VIX-Filter für Mean-Reversion.
Mean-Reversion am ES funktioniert — aber nur in einem bestimmten Regime. Wenn der VIX niedrig ist (sagen wir unter 18) und ES innerhalb von zwei Stunden mehr als ein bestimmtes Vielfaches von ATR fällt, ist die Wahrscheinlichkeit einer Reversion deutlich erhöht. Bei VIX über 25 dreht sich das Bild komplett: Schwäche signalisiert dann oft weitere Schwäche. Wer den VIX nicht als Filter nutzt, vermischt zwei statistisch unterschiedliche Regime und bekommt im Mittel mediokere Ergebnisse.
Risiko: was ES anders macht als Aktien.
Der größte Unterschied: ein ES-Kontrakt ist ungehebelt durch nichts. Wer mit 1.000 USD Margin einen 275.000-USD-Future hält, hat einen Hebel von 275. Ein 1-Punkt-Bewegung kostet 50 USD. Bei normalen Tagesranges von 30–60 Punkten ist das real.
Mein Rahmen: pro ES-Kontrakt sollten mindestens 15.000 USD Kontogröße stehen, besser
25.000. Wer mit weniger arbeitet, nimmt den kleineren MES (1/10 der Größe).
Position-Sizing geht über Risiko-pro-Trade: maximal 1 % des Kontos zwischen Entry und
Stop. Margin ist nicht Risiko — Margin ist nur die Eintrittskarte.
Tools und Datenquellen.
Live-Trading läuft bei mir über Interactive Brokers mit der TWS-API über
ib_insync. Historische Tick-Daten kommen von Refinitiv und CQG, die
kontinuierlichen Serien baue ich mir selbst. Für schnelle Tests nutze ich Norgate, die
haben fertige Continuous-Contracts in akzeptabler Qualität. Auf gar keinen Fall sollten
Sie ES-Strategien auf Daten von kostenlosen Quellen wie Yahoo Finance backtesten — die
sind weder bereinigt noch in der Zeitzone konsistent.
Sie wollen ES-Strategien systematisch entwickeln, ohne sich selbst durch jeden Roll-Termin zu beißen? Erstgespräch buchen — wir schauen, wo Sie am sinnvollsten anfangen.