← Alle Insights

Optimal Execution: Almgren-Chriss und seine Nachfolger.

Eine große Order in den Markt zu legen, ist kein triviales Problem. Zu schnell — man bewegt den Preis gegen sich selbst. Zu langsam — man trägt das Risiko, dass sich der Markt während der Ausführung wegbewegt. Almgren und Chriss haben im Jahr 2000 dafür ein analytisch lösbares Framework geliefert, das bis heute der Maßstab ist.

Das eigentliche Problem.

Stellen Sie sich vor, Sie wollen 500.000 Aktien eines Mid-Caps verkaufen. Das tägliche Volumen liegt bei 2 Millionen. Wenn Sie als Marktauftrag in einer Sekunde ausführen, bewegen Sie den Preis um vielleicht 1–2 % gegen sich. Wenn Sie über zwei Tage ausführen, ist der Preis-Impact kleiner — aber Sie tragen das Risiko, dass der Markt in dieser Zeit um 3 % fällt. Beides ist Kosten. Welche Strategie minimiert beide gemeinsam?

Almgren und Chriss haben dieses Problem als Optimierung formuliert: minimiere die erwartete Ausführungskosten plus einen risikoaversen Term über die Varianz der Ausführungskosten. Heraus kommt ein analytischer Trade-Schedule — eine Volumen- Über-Zeit-Kurve, die Sie über die Ausführungs-Periode legen.

Permanent vs. Temporary Impact.

Das Modell unterscheidet zwei Arten von Market-Impact, die im realen Markt empirisch separierbar sind:

Der temporary Impact ist der eigentliche Hebel: er hängt von der Geschwindigkeit ab, mit der gehandelt wird. Wer langsamer handelt, zahlt weniger temporary Impact — aber mehr Timing-Risiko.

Die analytische Lösung.

Im linearen Almgren-Chriss-Setup mit konstanter Volatilität ist die optimale Trade- Trajektorie ein hyperbolischer Sinus:

import numpy as np

def almgren_schedule(X, T, n_steps, sigma, eta, lambda_risk):
    """
    X: Gesamtmenge
    T: Gesamtzeit
    n_steps: Anzahl Diskretisierungs-Schritte
    sigma: Volatilität
    eta: Temporary-Impact-Parameter
    lambda_risk: Risiko-Aversion
    """
    kappa = np.sqrt(lambda_risk * sigma ** 2 / eta)
    t = np.linspace(0, T, n_steps + 1)
    # Restbestand zur Zeit t
    holdings = X * np.sinh(kappa * (T - t)) / np.sinh(kappa * T)
    # Trade pro Step
    trades = -np.diff(holdings)
    return t, holdings, trades

Der Parameter κ steuert die Form der Kurve. Bei niedrigem Risiko (lambda_risk → 0) wird die Kurve linear — Sie handeln gleichmäßig über die Zeit (TWAP). Bei hohem Risiko (lambda_risk → ∞) wird die Kurve steil — Sie handeln früh, um das Timing-Risiko zu reduzieren.

VWAP und TWAP als Spezialfälle.

TWAP (Time-Weighted Average Price) ist der Almgren-Schedule für den Spezialfall: lineare Kosten, kein Risikoterm. Sie handeln pro Zeitintervall gleich viel. Sehr einfach, sehr robust, aber ignoriert das Volumen-Profil des Marktes.

VWAP (Volume-Weighted Average Price) gewichtet den Trade-Schedule mit dem historischen Intraday-Volumen-Profil. In den meisten Märkten gibt es einen U-förmigen Volumen-Tag: viel Volumen morgens und abends, weniger mittags. VWAP folgt diesem Profil, damit Ihre Trades immer einen ähnlichen Anteil am Volumen haben. VWAP ist nicht Almgren-optimal — er minimiert nicht die Kosten, sondern misst den eigenen Trade gegen einen Benchmark.

In der Praxis: TWAP für kleine Orders ohne Impact-Sorge, VWAP für mittlere Orders mit Benchmark-Anforderung, Almgren für große Orders, wo Kostenminimierung das primäre Ziel ist.

Implementation Shortfall: der eigentliche Benchmark.

Implementation Shortfall (Perold, 1988) misst die Differenz zwischen dem Preis im Moment der Entscheidung (Arrival-Price) und dem tatsächlich realisierten Ausführungspreis. Das ist die Metrik, die für die meisten Buy-Side-Manager zählt — denn der Arrival-Price ist der Preis, zu dem das Signal generiert wurde, und alles danach ist Ausführungskosten.

Almgren-Chriss minimiert IS-Erwartung + risikoaversen IS-Varianz-Term. Wer stattdessen gegen VWAP gemessen wird, optimiert ein anderes Problem — und kann (siehe VWAP-Gaming) beides nicht gleichzeitig gewinnen.

Limit-Order-Placement: Cont-Stoikov und Avellaneda-Stoikov.

Almgren-Chriss sagt Ihnen wie viel Sie pro Zeitintervall handeln sollen. Es sagt Ihnen nicht, wie Sie diese Tranche platzieren. Hier kommt die zweite Generation: Avellaneda-Stoikov (2008) für Market-Making und Cont-Stoikov-Modelle für aggressives vs. passives Routing.

Avellaneda-Stoikov: ein Market-Maker setzt Quotes asymmetrisch um den Mid-Price, abhängig von eigener Inventur und Restzeit. Mathematisch eine Stochastic-Control-Lösung mit explizitem Optimal-Spread und Inventory-Skew. Für Execution-Optimierung lassen sich daraus Regeln ableiten: wenn die Restzeit knapp wird, aggressiv übers Mid hinaus tradern; wenn Restzeit reicht, passiv platzieren.

Das ist mathematisch elegant, in der Realität aber stark broker- und venue-abhängig. In den meisten Mandantensetups ist es sinnvoller, das Routing dem Broker zu überlassen und nur den makro-Schedule (Almgren) selbst zu berechnen.

Konkrete Umsetzung mit IBKR Algo-API.

Interactive Brokers bietet eine Reihe vorgefertigter Execution-Algos (TWAP, VWAP, Adaptive, etc.) über die Algo-API. Für einen Almgren-ähnlichen Schedule können Sie die Adaptive Algo nutzen, die intern eine ähnliche Optimierung durchführt, oder Sie schicken Ihren eigenen Schedule als Sequenz von Child-Orders. Letzteres gibt Ihnen volle Kontrolle, aber Sie tragen die Verantwortung für sauberes Routing.

Praxis: bei Orders über 10 % ADV (Average Daily Volume) berechne ich einen eigenen Almgren-Schedule und überlasse dem Broker nur das Sub-Second-Routing pro Tranche. Unter 10 % ADV nutze ich den Standard-Adaptive-Algo des Brokers — der Mehrwert eigener Optimierung ist dort gering, das Fehlerrisiko aber real.

Erweiterungen jenseits Almgren.

Das Original-Almgren-Chriss-Modell hat klare Grenzen: lineare Impact-Funktionen, konstante Volatilität, ein Asset. Spätere Arbeiten haben das in mehreren Richtungen erweitert:

Für die meisten Mandantensetups reicht das lineare Modell mit empirisch kalibrierten Parametern. Komplexere Erweiterungen lohnen sich erst, wenn die einfache Variante saubere Implementation Shortfall-Statistiken liefert.

Meine Praxis.

Bei Mandantenorders über 10 % des täglichen Volumens berechne ich einen eigenen Almgren-Schedule. Inputs: realisierte Volatilität der letzten 20 Tage, geschätztes η aus historischen eigenen Trades, Risiko-Aversion entsprechend dem Strategie- Horizont. Output: eine 20–30-Punkt-Schedule, die als Sequenz von Child-Orders an den Broker geht.

Unter 10 % ADV nutze ich Broker-Algos. Über 30 % ADV pausiere ich Trades über mehrere Tage oder reduziere die Position-Size der Strategie. Die größte Erkenntnis aus drei Jahren systematischer Messung: konsistent Almgren zu fahren spart bei großen Trades 5–15 Basispunkte Implementation Shortfall gegenüber naivem VWAP — bei einem 100-Millionen-Portfolio mit mittlerem Turnover sind das keine Peanuts.

Sie führen regelmäßig große Orders aus und wollen wissen, wie viel Sie aktuell an Slippage verlieren? Erstgespräch buchen — wir messen es konkret.