← Alle Insights

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.

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.

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.