← Alle Insights

Range-Day-Identification: erkennen, wann der Markt seitwärts läuft.

Etwa 60 % aller Handelstage sind Range-Tage — also Tage, an denen sich der Preis den ganzen Tag in einer relativ engen Spanne bewegt, ohne klare Richtung. Wer das in Echtzeit erkennt, kann die richtige Strategie-Klasse wählen: Mean-Reversion an Range-Grenzen statt Trendfolge, kurze Ziele statt Trail-Stops, niedrige Frequenz statt aggressivem Add-on. Wer es nicht erkennt, verliert systematisch — entweder durch Trend-Setups, die nie laufen, oder durch Whipsaw, wenn der Markt doch plötzlich bricht.

Range-Day vs. Trend-Day — was unterscheidet sie strukturell.

Ein klassischer Trend-Day hat folgende Signatur: Open am einen Tagesextrem, Close am anderen, kontinuierliche Bewegung mit kurzen Pullbacks, Volume konzentriert in Trend-Richtung. Ein Range-Day umgekehrt: Open und Close nahe der Tagesmitte, mehrfache Tests von Range-High und Range-Low, gleichmäßiges Volumen, keine echten Breakouts.

Die saubere Klassifikation am Ende des Tages ist trivial. Die schwere Aufgabe ist die Echtzeit-Klassifikation: nach 60 Minuten zu wissen, ob heute ein Range-Day wird, ist 10x wertvoller als nach 360 Minuten. Genau hier hilft eine systematische Indikator-Kombination.

Klassische Indikatoren.

Drei Indikatoren bilden in meiner Praxis die Grundlage:

Opening-Range-Identifikation.

Eine extrem nützliche Heuristik aus den ersten 30 Minuten nach Open (09:30–10:00 ET): die Opening-Range (OR) — also High und Low der ersten 30 Minuten. Statistisch zeigt sich: wenn der Preis bis 11:00 ET die Opening-Range weder nach oben noch nach unten signifikant durchbrochen hat (Mehr als 0,5 x OR-Höhe darüber oder darunter), liegt die Wahrscheinlichkeit eines Range-Days bei ca. 70 %.

Umgekehrt: ein sauberer Opening-Range-Breakout in der Stunde nach OR-Ende mit erhöhtem Volumen ist eines der stärksten Trend-Day-Signale. Das ist nicht neu — seit Toby Crabel in den 90ern bekannt — aber empirisch stabil.

Python-Implementierung des Range-Day-Detectors.

Ein Echtzeit-Detektor, den ich produktiv einsetze. Vereinfacht:

import pandas as pd
import numpy as np

def range_day_score(bars_1min: pd.DataFrame, daily_atr_20: float) -> dict:
    """
    bars_1min: 1-Minuten-Bars seit 09:30 ET, Columns: open, high, low, close, volume
    daily_atr_20: 20-Tage-ATR der Aktie (in absoluten Preis-Einheiten)
    """
    if len(bars_1min) < 30:
        return {'classification': 'undetermined', 'score': None}

    # Opening-Range (erste 30 Minuten)
    or_bars = bars_1min.iloc[:30]
    or_high = or_bars['high'].max()
    or_low  = or_bars['low'].min()
    or_height = or_high - or_low

    # Aktueller Stand
    last_close = bars_1min['close'].iloc[-1]
    day_high   = bars_1min['high'].max()
    day_low    = bars_1min['low'].min()
    day_range  = day_high - day_low

    # Indikatoren
    range_vs_atr = day_range / daily_atr_20            # < 0.5 spricht fuer Range
    or_break_up   = (day_high - or_high) / or_height   # 0 = kein Breakout
    or_break_dn   = (or_low - day_low) / or_height
    close_in_or   = or_low <= last_close <= or_high
    midpoint_dist = abs(last_close - (or_high + or_low) / 2) / or_height

    score = 0
    if range_vs_atr < 0.5: score += 2
    if max(or_break_up, or_break_dn) < 0.3: score += 2
    if close_in_or: score += 1
    if midpoint_dist < 0.5: score += 1

    if score >= 4:
        classification = 'range_day'
    elif score <= 1:
        classification = 'trend_day'
    else:
        classification = 'mixed'

    return {
        'classification': classification,
        'score': score,
        'range_vs_atr': range_vs_atr,
        'or_high': or_high,
        'or_low': or_low,
        'or_break_up': or_break_up,
        'or_break_dn': or_break_dn,
    }

Der Detector läuft bei mir minütlich ab 10:30 ET auf den Tickern meiner Watchlist und liefert ab ca. 11:00 ET stabile Klassifikationen. Die Hit-Rate gegen die finale Tages-Klassifikation (am Close gemessen) liegt bei etwa 78 % für Range-Days und 72 % für Trend-Days. Mixed-Tage sind genau das: nicht eindeutig — und sollten entsprechend defensiv behandelt werden.

Range-Trading-Strategien.

Sobald ein Range-Day mit hoher Wahrscheinlichkeit identifiziert ist, öffnet sich ein robustes Setup-Universum:

Statistische Performance je nach Range-Stärke.

Aus meinen Backtests auf S&P 500-Komponenten 2018–2026:

Range-Day-Mean-Reversion (Long-Side, Setup: Preis < 0.3 x OR-Hoehe ueber OR-Low):

  Range-Score | Trades | Hit-Rate | Avg Win | Avg Loss | Expectancy
  ------------|--------|----------|---------|----------|-----------
  Score 4     |  2.140 |   59 %   | 0.41 %  | 0.32 %   |  +0.11 %
  Score 5     |  1.320 |   63 %   | 0.46 %  | 0.30 %   |  +0.18 %
  Score 6     |    720 |   68 %   | 0.51 %  | 0.27 %   |  +0.26 %

  Aggregiert (Score >= 4): ~4.180 Trades, Expectancy ~0.15 % pro Trade

  Risiko-Profil:
    - Max Drawdown der Strategie:   -8.3 %
    - Sharpe (mit 5x Leverage):      ~1.9
    - Worst-Case-Tag:                -2.1 % (Whipsaw bei Range-Bruch)

Übergänge: Range-Day, der zu Trend-Day wird.

Das grösste Risiko der Range-Day-Strategie ist nicht eine falsche Klassifikation am Morgen — es ist der Range-Day, der nachmittags doch noch bricht. Ein klassisches Whipsaw-Setup: 75 % des Tages bewegt sich der Preis seitwärts, ein Mean-Reversion- Trader stockt nach jeder Range-Berührung auf, und dann bricht der Preis am Nachmittag mit FOMC-News oder einem grossen Block-Trade aus.

Schutzmechanismen, die ich nutze:

Ehrliche Bewertung.

Range-Trading ist eine der wenigen Setups, die ich Klienten in den ersten Monaten ihres systematischen Trading-Wegs aktiv empfehle. Drei Gründe:

Was nicht funktioniert: Range-Trading auf zu kleinen Tickern (zu wenig Volumen für zuverlässige Range-Berührungen), an FOMC-Tagen (zu viel News-Whipsaw), an Earnings-Tagen (zu viel idiosynkratische Bewegung) und in extrem niedrigen Volatilitätsregimes (Range zu eng, Stop-zu-Ziel-Verhältnis zu schlecht).

Meine Praxis.

Range-Trading auf S&P 500-Liquid-Names ist eine stabile Komponente meines Strategie-Portfolios — verantwortlich für etwa 15–20 % meiner systematischen Tages-Trades. Der Range-Day-Detector läuft täglich ab 10:30 ET, generiert ab 11:00 ET die Watchlist der wahrscheinlichen Range-Tickers, und ab 11:30 ET beginnt die eigentliche Trade-Ausführung an den Range-Grenzen.

Operativ ist das eine angenehme Strategie: 20–40 Minuten aktive Marktbeobachtung mittags, klare Regeln, klare Stops. Kein Adrenalin, keine spektakulären Gewinne — dafür eine sehr zuverlässige Erwartungswert-Komponente, die in jedem Marktregime ausser den extremsten funktioniert. Genau die Art von Strategie, die Vermögen langfristig aufbaut, nicht die Art, die Trading-Folklore produziert.

Sie wollen einen Range-Day-Detector sauber in Python aufsetzen — mit Live-Klassifikation und integriertem Risikomanagement? Erstgespräch buchen — wir bauen die Komponente, die in 60 % aller Tage zuverlässig Edge liefert.