← Zurück zu den Artikeln
July 14, 2026
5 min read

Almgren-Chriss ohne Handwedeln: Optimale Ausführung, die Sie an einem Nachmittag implementieren können

Almgren-Chriss ohne Handwedeln: Optimale Ausführung, die Sie an einem Nachmittag implementieren können
#Ausführung
#Almgren-Chriss
#Market Impact
#optimale Ausführung
#TWAP
#Quant
#Python
#Krypto

Almgren und Chriss (2001), "Optimal execution of portfolio transactions" (Journal of Risk 3(2), 5–39), ist wahrscheinlich das meistzitierte Paper in der Ausführungsforschung und eines der am seltensten korrekt implementierten. Der meiste "Almgren-Chriss"-Code in freier Wildbahn ist ein TWAP-Scheduler mit einem Kommentarblock. Die meisten Blogbeiträge dazu überspringen die Herleitung, deuten vage auf eine sinh-Funktion und rühren nie den Teil an, der in der Produktion tatsächlich zählt: woher die Parameter kommen.

Dieser Artikel macht das Ganze. Die Modellannahmen, ehrlich benannt. Die geschlossene Trajektorie, hergeleitet, nicht behauptet. Die effiziente Grenze und wie man den Parameter der Risikoaversion wählt. Und die Kalibrierung der drei Inputs — temporärer Impact η\eta, permanenter Impact γ\gamma, Volatilität σ\sigma — aus Binance-Orderbuch- und Trade-Daten, mit lauffähigem Python und einer ehrlichen Diskussion darüber, warum der Fit verrauscht ist. Dies ist das intellektuelle Rückgrat von allem anderen in der Ausführung: TWAP, VWAP und POV sind Spezialfälle oder heuristische Verwandte (siehe TWAP, VWAP, POV: die Ausführungsalgorithmen, die alle einsetzen), und die modernen ML-Ansätze — Reinforcement-Learning-Scheduler und neuronale Impact-Modelle — sind Versuche, genau die Annahmen zu lockern, die wir gleich niederschreiben werden.

Der Aufbau: was das Modell tatsächlich annimmt

Sie halten XX Einheiten eines Assets (sagen wir, 100 BTC) und müssen bis zum Zeitpunkt TT vollständig liquidieren. Teilen Sie [0,T][0, T] in NN Intervalle der Länge τ=T/N\tau = T/N. Ihre Entscheidungsvariable ist die Bestandstrajektorie x0=X,x1,,xN=0x_0 = X, x_1, \dots, x_N = 0, wobei die Trades nk=xk1xkn_k = x_{k-1} - x_k in Intervall kk ausgeführt werden.

Drei Annahmen tragen das gesamte Modell:

1. Arithmetischer Random Walk. Der ungestörte Preis folgt

Sk=Sk1+στξkτg ⁣(nkτ),S_k = S_{k-1} + \sigma \sqrt{\tau}\, \xi_k - \tau\, g\!\left(\frac{n_k}{\tau}\right),

wobei die ξk\xi_k i.i.d. standardnormalverteilt sind und σ\sigma die absolute Volatilität ist (Dollar pro Zeiteinheit1/2^{1/2}, nicht Prozent). Arithmetisch, nicht geometrisch — über wenige Stunden ist der Unterschied vernachlässigbar, und der arithmetische Walk hält die Algebra linear-quadratisch. Kein Drift: Almgren und Chriss diskutieren den Driftterm, doch für eine Intraday-Liquidation ist Ihre Alpha-Schätzung über 4 Stunden fast immer Rauschen, und sie auf null zu setzen ist die ehrliche Voreinstellung.

2. Linearer permanenter Impact. g(v)=γvg(v) = \gamma v: Handeln mit Rate vv verschiebt den Preis dauerhaft, proportional, und die Verschiebung klingt nie ab. Jede Einheit, die Sie verkaufen, drückt den Mid für immer um γ\gamma nach unten. Das wirkt grob, doch es gibt einen tiefen Grund, es linear zu halten: Huberman und Stanzl (2004) bewiesen, dass ein permanenter Impact, der nichtlinear in der Trade-Größe ist, Round-Trip-Strategien mit positivem Erwartungsgewinn zulässt — Preismanipulation. Linearer permanenter Impact ist keine Vereinfachung aus Bequemlichkeit; er ist die einzige arbitragefreie Wahl in dieser Modellklasse.

3. Linearer temporärer Impact. Der Preis, den Sie in Intervall kk tatsächlich erhalten, ist

S~k=Sk1h ⁣(nkτ),h(v)=ϵsgn(v)+ηv.\tilde{S}_k = S_{k-1} - h\!\left(\frac{n_k}{\tau}\right), \qquad h(v) = \epsilon\, \mathrm{sgn}(v) + \eta v.

ϵ\epsilon erfasst die halbe Geld-Brief-Spanne plus Gebühren; η\eta ist die Steigung der Grenzkosten dafür, Liquidität mit Rate vv nachzufragen. Der temporäre Impact betrifft nur Ihre eigene Ausführung und verschwindet augenblicklich — das Orderbuch füllt sich vollständig wieder auf, bevor Ihre nächste Child-Order kommt. Jedes der drei Wörter "linear", "augenblicklich", "vollständig" ist in realen Märkten falsch, und der letzte Abschnitt handelt davon, wie falsch. Doch zunächst der Lohn dafür, sie zu akzeptieren.

Kosten und Varianz einer Trajektorie

Summieren Sie die Ausführungen, ziehen Sie sie vom anfänglichen Mark XS0X S_0 ab, und Sie erhalten den Implementation Shortfall. Sein Erwartungswert und seine Varianz über das Rauschen ξk\xi_k sind:

E[C]=12γX2permanent+ϵXspread+η~τk=1Nnk2temporary,V[C]=σ2τk=1Nxk2,E[C] = \underbrace{\tfrac{1}{2}\gamma X^2}_{\text{permanent}} + \underbrace{\epsilon X}_{\text{spread}} + \underbrace{\frac{\tilde{\eta}}{\tau} \sum_{k=1}^{N} n_k^2}_{\text{temporary}}, \qquad V[C] = \sigma^2 \tau \sum_{k=1}^{N} x_k^2,

mit η~=η12γτ\tilde{\eta} = \eta - \tfrac{1}{2}\gamma\tau (eine Diskretisierungskorrektur, die für τ0\tau \to 0 verschwindet).

Zwei Beobachtungen, die die meisten Implementierungen übersehen:

  • Die permanenten Kosten 12γX2\tfrac{1}{2}\gamma X^2 hängen nicht von der Trajektorie ab. Bei linearem, nicht abklingendem permanentem Impact zahlen Sie denselben permanenten Tribut, egal wie Sie planen. Die Optimierung ist ausschließlich ein Ringen zwischen dem Term der temporären Kosten (der langsames, gleichmäßiges Handeln will — er wird durch nk=X/Nn_k = X/N minimiert, also TWAP) und dem Varianzterm (der Ihren Bestand am liebsten schon gestern los wäre — er wird durch sofortige Liquidation minimiert).
  • Der Varianzterm ist bestandsgewichtet, nicht trade-gewichtet. Das Risiko läuft auf dem auf, was Sie noch halten, xkx_k, nicht auf dem, was Sie handeln. Deshalb verlagert Dringlichkeit den Zeitplan nach vorne.

Die geschlossene Form: sinh, cosh und der Dringlichkeitsparameter

Almgren-Chriss minimieren die Mittelwert-Varianz-Zielfunktion

U(x)=E[C]+λV[C],U(x) = E[C] + \lambda V[C],

wobei λ0\lambda \geq 0 die Risikoaversion in Einheiten von 1/Dollar ist. Setzen Sie U/xj=0\partial U / \partial x_j = 0 für die inneren Punkte. Der temporäre Term liefert zweite Differenzen von xx, der Varianzterm liefert xjx_j selbst, und Sie erhalten eine lineare Differenzengleichung zweiter Ordnung:

xj12xj+xj+1τ2=κ~2xj,κ~2=λσ2η~.\frac{x_{j-1} - 2x_j + x_{j+1}}{\tau^2} = \tilde{\kappa}^2 x_j, \qquad \tilde{\kappa}^2 = \frac{\lambda \sigma^2}{\tilde{\eta}}.

Dies ist das diskrete Analogon zu x=κ2xx'' = \kappa^2 x, und mit den Randbedingungen x0=Xx_0 = X, xN=0x_N = 0 ist die Lösung hyperbolisch:

  xj=Xsinh ⁣(κ(Ttj))sinh(κT)  nj=2sinh(κτ/2)sinh(κT)cosh ⁣(κ(Ttj1/2))X,\boxed{\;x_j = X\, \frac{\sinh\!\big(\kappa\,(T - t_j)\big)}{\sinh(\kappa T)}\;} \qquad n_j = \frac{2\sinh(\kappa\tau/2)}{\sinh(\kappa T)}\, \cosh\!\big(\kappa (T - t_{j-1/2})\big)\, X,

wobei κ\kappa die Gleichung 2τ2(cosh(κτ)1)=κ~2\tfrac{2}{\tau^2}\left(\cosh(\kappa\tau) - 1\right) = \tilde{\kappa}^2 löst, was für kleines τ\tau einfach κκ~=λσ2/η\kappa \approx \tilde{\kappa} = \sqrt{\lambda\sigma^2/\eta} ist.

Optimale Bestandstrajektorien für verschiedene Kappa-Werte, von der geraden TWAP-Linie bis zu aggressiv nach vorne verlagerten Kurven

Alles an der Strategie ist in einer einzigen Zahl verdichtet:

κ=λσ2η[units: 1/time].\kappa = \sqrt{\frac{\lambda \sigma^2}{\eta}} \qquad [\text{units: } 1/\text{time}].

κ\kappa ist die Dringlichkeit. Ihr Kehrwert θ=1/κ\theta = 1/\kappa ist die charakteristische Zeit des Trades: die Zeitskala, über die es sich lohnt, Bestandsrisiko zu tragen, um Impact-Kosten zu sparen. Beachten Sie, wovon κ\kappa nicht abhängt: der Ordergröße XX und der Frist TT. Ob die intrinsische Zeitskala Ihres Trades 20 Minuten oder 6 Stunden beträgt, wird allein durch Risikoaversion, Volatilität und Liquidität bestimmt. Wenn θT\theta \ll T, ist Ihre Frist irrelevant — das Modell liquidiert nach seinem eigenen Zeitplan, und das Ende des Horizonts bleibt ungenutzt. Wenn θT\theta \gg T, bindet die Frist, und Sie machen effektiv TWAP.

Der risikoneutrale Grenzfall ist TWAP — deshalb existiert TWAP

Nehmen Sie λ0\lambda \to 0, also κ0\kappa \to 0. Dann gilt sinh(z)z\sinh(z) \to z und

x(t)=Xsinh(κ(Tt))sinh(κT)    XTtT.x(t) = X\,\frac{\sinh(\kappa(T-t))}{\sinh(\kappa T)} \;\longrightarrow\; X\,\frac{T-t}{T}.

Die optimale Trajektorie degeneriert zur Geraden: gleiche Mengen in gleichen Zeitintervallen. TWAP ist keine Heuristik, die zufällig funktioniert; es ist das exakte Optimum des Almgren-Chriss-Modells für einen risikoneutralen Händler mit linearem Impact. Jedes Mal, wenn jemand TWAP einsetzt, behauptet er implizit λ=0\lambda = 0: "Mir ist die Varianz meines Shortfalls egal, nur sein Mittelwert zählt." Das ist eine vertretbare Position für kleine Orders und kurze Horizonte. Es ist eine seltsame Position, um 5 % des Tagesvolumens über 8 Stunden in einem Asset mit 4 % Tagesvolatilität zu liquidieren, was genau der Fall ist, in dem man es trotzdem einsetzt. Der entgegengesetzte Grenzfall λ\lambda \to \infty liefert xj0x_j \to 0 für alle j>0j > 0: alles im ersten Intervall abstoßen, koste es, was es wolle. Zwischen diesen Extremen interpoliert κT\kappa T: κT0,5\kappa T \lesssim 0{,}5 ist kaum von TWAP zu unterscheiden, κT3\kappa T \gtrsim 3 ist aggressiv nach vorne verlagert.

Die effiziente Grenze der Ausführung

Für jedes λ\lambda erhalten Sie eine Trajektorie, eine erwartete Kostengröße E(λ)E(\lambda) und eine Varianz V(λ)V(\lambda). Durchläuft man λ[0,)\lambda \in [0, \infty), zeichnet man eine Kurve in der (V,E)(V, E)-Ebene nach — die effiziente Grenze der Ausführung, in direkter Analogie zu Markowitz. Sie ist konvex und fallend: weniger Varianz kostet stets mehr erwarteten Shortfall, mit stark abnehmenden Grenzerträgen. Am Grenzpunkt, der durch ein gegebenes λ\lambda ausgewählt wird, ist die Risikoaversion die (negative) Steigung der Tangente: λ=E/V\lambda = -\partial E / \partial V.

Effiziente Grenze der Ausführung: Kosten gegen Varianz mit Tangente, die Lambda als Steigung zeigt

Die Grenze formuliert die Frage "Was ist λ\lambda?" — die niemand introspektiv beantworten kann — um in "Welchen Kosten-Risiko-Trade-off will ich?", die ein Desk tatsächlich beantworten kann. Drei praktische Wege, den Punkt zu wählen:

  1. Grenzkosten-Argumentation. Laufen Sie die Grenze ab und fragen Sie: "Wenn ich von diesem Punkt zum nächsten wechsle, zahle ich ΔE\Delta E Dollar erwartete Kosten, um Δstd\Delta\text{std} Dollar Standardabweichung des Shortfalls zu beseitigen — mache ich diesen Tausch?" Der Knick der Grenze ist meist bis auf einen Faktor 2 offensichtlich, und die Trajektorie reagiert bei dieser Auflösung unempfindlich auf λ\lambda.
  2. Risikobudget. Legen Sie eine maximal akzeptable Shortfall-Standardabweichung fest (z. B. "die Eintages-1-Sigma der Restposition muss unter 15 bps des Nominalvolumens bleiben") und wählen Sie die günstigste Trajektorie, die dies erfüllt. Das ist ein Nebenbedingungsproblem, dessen Lagrange-Multiplikator λ\lambda ist.
  3. Charakteristische-Zeit-Zielsetzung. Wählen Sie θ=1/κ\theta = 1/\kappa direkt ("diese Order sollte eine Halbwertszeit von 90 Minuten haben") und rechnen Sie λ=η/(σ2θ2)\lambda = \eta/(\sigma^2\theta^2) zurück. Das ist es, was die meisten Praktiker implizit tun, wenn sie einen "Dringlichkeits"-Regler einstellen.

Ein durchgerechnetes Beispiel mit Zahlen, die wir im Kalibrierungsabschnitt begründen werden. Verkaufe X=100X = 100 BTC bei S_0 = \100{,}000,Horizont, Horizont T = 4h,h,\sigma = $600proBTCpropro BTC pro\sqrt{\text{h}}(etwa3(etwa 3 % Tagesvolatilität),\eta = 1.0\ $\cdot\text{h}/\text{BTC},, \lambda = 10^{-6}\ $^{-1}$. Dann

κ=106×3.6×1051.0=0.6 h1,κT=2.4,θ1.7 h.\kappa = \sqrt{\frac{10^{-6} \times 3.6\times 10^{5}}{1.0}} = 0.6\ \text{h}^{-1}, \qquad \kappa T = 2.4, \qquad \theta \approx 1.7\ \text{h}.

Der optimale Zeitplan verkauft 46,2 BTC in der ersten Stunde (TWAP: 25). Temporäre Kosten: \eta \int_0^T v(t)^2 dt \approx \3{,}290gegenu¨bergegenüber$2{,}500beiTWAP.ShortfallStandardabweichung:bei TWAP. Shortfall-Standardabweichung:$53{,}000gegenu¨bergegenüber$69{,}300 bei TWAP. Für zusätzliche 0,8 bps erwartete Kosten auf das Nominalvolumen von \10 Mio. senken Sie also das Shortfall-Risiko um 23 %. Das ist der gesamte Inhalt des Modells in einem Satz: Es bepreist die Versicherung und überlässt Ihnen die Entscheidung, ob Sie sie kaufen.

Die Trajektorie selbst sind zehn Zeilen Python:

import numpy as np

def almgren_chriss(X, T, N, sigma, eta, gamma, lam):
    """Optimal liquidation trajectory (discrete AC 2001)."""
    tau = T / N
    eta_t = eta - 0.5 * gamma * tau          # tilde-eta
    kappa_t2 = lam * sigma**2 / eta_t        # tilde-kappa^2
    kappa = np.arccosh(0.5 * kappa_t2 * tau**2 + 1) / tau
    t = np.arange(N + 1) * tau
    x = X * np.sinh(kappa * (T - t)) / np.sinh(kappa * T)
    n = x[:-1] - x[1:]                       # child order sizes
    E = 0.5 * gamma * X**2 + (eta_t / tau) * np.sum(n**2)
    V = sigma**2 * tau * np.sum(x[1:]**2)
    return x, n, E, V

x, n, E, V = almgren_chriss(X=100, T=4, N=48, sigma=600,
                            eta=1.0, gamma=0.3, lam=1e-6)
print(f"first-hour qty: {n[:12].sum():.1f} BTC, "
      f"E=${E:,.0f}, std=${np.sqrt(V):,.0f}")

Durchlaufen Sie lam über np.logspace(-8, -4, 50) und plotten Sie EE gegen V\sqrt{V} — das ist Ihre Grenze, und die gesamte Entscheidungsfläche passt auf ein Diagramm, das Sie einem Risikokomitee vorlegen können.

Kalibrierung: η\eta, γ\gamma, σ\sigma aus Binance-Daten

Hier sterben 90 % der Implementierungen still. Die Trajektorienformel ist trivial; die Parameter sind es nicht. Drei Größen, drei verschiedene Schätzprobleme.

Kalibrierungs-Streudiagramme von Slippage gegen Partizipationsrate und Preisänderung gegen Netto-Order-Flow aus Binance-Daten

σ\sigma: die einfache

Absolute Volatilität pro Wurzel-Stunde, aus Mid-Preis-Renditen. Verwenden Sie 1-Minuten-Bars und skalieren Sie; bei feinerer Abtastung verzerrt Mikrostrukturrauschen (Bid-Ask-Bounce) die realisierte Varianz nach oben. Diese Schätzung ist solide — Volatilität ist der eine Parameter, den Sie richtig hinbekommen werden.

η\eta: temporärer Impact aus dem Orderbuch und aus Trades

Zwei sich ergänzende Wege. Weg A — durch das L2-Orderbuch laufen. Aus Depth-Snapshots berechnen Sie die Kosten eines hypothetischen marktausführbaren Sweeps der Größe qq: den VWAP der aufgezehrten Level abzüglich des Mid. Der Fit cost(q)ϵ+ηinstq\text{cost}(q) \approx \epsilon + \eta_{\text{inst}}\, q liefert den instantanen Impact pro BTC. Um in das ratenbasierte η\eta des Modells umzurechnen, müssen Sie eine Auffüllzeit des Orderbuchs Δtr\Delta t_r annehmen (Größenordnung 10–60 s für BTCUSDT): Handeln mit Rate vv zehrt vΔtrv \Delta t_r pro Auffüllzyklus auf, sodass ηηinstΔtr\eta \approx \eta_{\text{inst}} \Delta t_r. Genau diese Annahme — sofortige, vollständige Auffüllung nach einer festen Uhr — ist der Riss, durch den Obizhaeva-Wang eintritt; mehr dazu unten. Weg B — realisierte Slippage auf Partizipation regressieren. Bündeln Sie aggressiven (Taker-)Flow in 1-Minuten-Bins; regressieren Sie für jeden Bin den Taker-seitigen VWAP-minus-Open-Mid gegen die Taker-Volumenrate. Weg B misst, was der Markt Aggressoren tatsächlich berechnet hat; Weg A misst, was das ruhende Orderbuch gerade jetzt berechnen würde. Wenn beide um einen Faktor 3 auseinanderliegen, glauben Sie B für das Niveau und A für die Intraday-Form.

γ\gamma: permanenter Impact via Kyle-artiger Regression

Regressieren Sie Mid-Preis-Änderungen auf den vorzeichenbehafteten Netto-Taker-Flow über 5-Minuten-Fenster:

ΔS5m=γQnet+noise,Qnet=taker buystaker sells.\Delta S_{5m} = \gamma\, Q_{\text{net}} + \text{noise}, \qquad Q_{\text{net}} = \text{taker buys} - \text{taker sells}.

Prüfen Sie dann, dass der Impact ein Fenster später nicht zurückgesprungen ist — die nicht zurückkehrende Komponente ist auf Ihrer Handelszeitskala "permanent". Dies ist mit weitem Abstand die verrauschteste der drei.

Lauffähiger Code, der nur öffentliche Binance-REST-Endpunkte nutzt:

import requests, numpy as np, pandas as pd

B = "https://api.binance.com/api/v3"
sym = "BTCUSDT"

kl = requests.get(f"{B}/klines", params=dict(
    symbol=sym, interval="1m", limit=1000)).json()
close = np.array([float(k[4]) for k in kl])
sigma = np.diff(close).std() * np.sqrt(60)       # $/sqrt(h)

d = requests.get(f"{B}/depth",
                 params=dict(symbol=sym, limit=5000)).json()
bids = np.array(d["bids"], dtype=float)          # [price, qty]
mid = (bids[0, 0] + float(d["asks"][0][0])) / 2
cq = np.cumsum(bids[:, 1])                       # cum qty
cn = np.cumsum(bids[:, 0] * bids[:, 1])          # cum notional
sizes = np.linspace(0.5, 50, 40)                 # BTC probes
cost = [mid - np.interp(q, cq, cn) / q for q in sizes]
eps, eta_inst = np.polyfit(sizes, cost, 1)[::-1] # cost ~ eps + k*q
eta = eta_inst * (30 / 3600)                     # 30s refresh -> $*h/BTC

tr = requests.get(f"{B}/aggTrades",
                  params=dict(symbol=sym, limit=1000)).json()
df = pd.DataFrame(dict(
    t=[t["T"] for t in tr],
    p=[float(t["p"]) for t in tr],
    q=[float(t["q"]) * (-1 if t["m"] else 1) for t in tr]))
df["bin"] = df.t // 300_000                      # 5-min bins
g = df.groupby("bin").agg(dp=("p", lambda s: s.iloc[-1] - s.iloc[0]),
                          qn=("q", "sum"))
gamma = np.polyfit(g.qn, g.dp, 1)[0]             # $/BTC
print(f"sigma={sigma:.0f} $/sqrt(h)  eta={eta:.2f} $*h/BTC  "
      f"gamma={gamma:.3f} $/BTC")

Für die Produktion ersetzen Sie die einzelne aggTrades-Seite durch einige Tage der historischen Dumps und führen die γ\gamma-Regression über Tausende von Bins aus, nicht über eine Handvoll.

Warum die Krypto-Kalibrierung verrauscht ist und was man dagegen tun kann

Führen Sie die γ\gamma-Regression auf echten Daten aus, und Sie erhalten ein R2R^2 von wenigen Prozent und einen Koeffizienten, der sich zwischen den Tagen um einen Faktor 2–5 bewegt. Das ist kein Bug in Ihrem Code. Die Gründe sind strukturell:

  • Endogenität. Der Flow reagiert ebenso sehr auf den Preis, wie der Preis auf den Flow reagiert. Momentum-Trader kaufen, weil der Preis gestiegen ist; eine naive OLS-Regression der Renditen auf den Flow greift deren Reaktion auf und schreibt sie dem Impact zu. Die saubere Lösung ist, Ihre eigenen Ausführungen zu verwenden (konstruktionsbedingt exogen) — die Sie erst haben, nachdem Sie eine Weile gehandelt haben.
  • Konkavität. Realer Impact ist konkav in der Größe — empirisch nahe der Quadratwurzel (Almgren, Thum, Hauptmann und Li, 2005, "Direct estimation of equity market impact", fanden einen Exponenten nahe 0,6; dieselbe Konkavität ist auch in Krypto robust). Eine Gerade an eine konkave Funktion zu fitten bedeutet, dass Ihr η\eta und γ\gamma vom Größenbereich in der Stichprobe abhängen. Kalibrieren Sie bei den Partizipationsraten, die Sie tatsächlich handeln werden.
  • Fragmentierung und Führung durch Derivate. BTCUSDT-Spot auf Binance ist nur ein Handelsplatz von vielen, und die Preisfindung findet häufig auf Perps statt. Flow, den Sie nie sehen, bewegt den Preis, auf den Sie regressieren, und bläht den Rauschterm auf.
  • Regimeabhängigkeit. In der Asien-Session gemessenes η\eta beschreibt nicht die US-Eröffnung; der Impact verdoppelt sich grob, wenn sich die Volatilität verdoppelt. Kalibrieren Sie je Session und fitten Sie mindestens wöchentlich neu.

Der rettende Umstand: Die Trajektorie ist nachsichtig. κ1/η\kappa \propto \sqrt{1/\eta}, sodass ein Fehler um Faktor 2 in η\eta das κ\kappa nur um 2\sqrt{2} verschiebt, und die Kostenfunktion ist nahe dem Optimum flach. η\eta auf einen Faktor 2 genau und λ\lambda auf eine Größenordnung genau zu treffen, erfasst bereits den Großteil der gegenüber TWAP verfügbaren Verbesserung. Präzision zählt für Pre-Trade-Kostenschätzungen; Robustheit genügt für das Scheduling.

Wo das Modell bricht und die Paper, die es reparieren

Almgren-Chriss ist ein Gerüst, und genau zu wissen, welcher Träger tragend ist, sagt Ihnen, nach welcher Erweiterung Sie greifen sollten.

Nichtlinearer Impact — Almgren (2003). "Optimal execution with nonlinear impact functions and trading-enhanced risk" (Applied Mathematical Finance 10, 1–18) wiederholt das Programm mit einem temporären Impact als Potenzgesetz h(v)=ηvαh(v) = \eta v^\alpha. Für das empirisch favorisierte α1/2\alpha \approx 1/2 — das Quadratwurzelgesetz — ändern die optimalen Trajektorien ihren Charakter: Konkaver Impact bestraft Bursts weniger als linearer Impact, sodass optimale Zeitpläne bei gleichem λ\lambda stärker nach vorne verlagert werden. Die qualitative Struktur (Dringlichkeitsparameter, effiziente Grenze) bleibt erhalten; die sinh-Formel nicht.

Resilienz und das LOB — Obizhaeva und Wang (2013). "Optimal trading strategy and supply/demand dynamics" (Journal of Financial Markets 16(1), 1–32; das Working Paper kursierte ab 2005) ersetzt die Dichotomie temporär/permanent durch ein Limit-Orderbuch mit endlicher Tiefe und exponentiell abklingendem Impact: Ihr Trade frisst das Orderbuch, und das Orderbuch füllt sich mit der Resilienzrate ρ\rho wieder auf. Die AC-Annahme "temporärer Impact verschwindet augenblicklich" ist der Grenzfall ρ\rho \to \infty. Die optimale Strategie ändert ihre Form dramatisch: ein Block-Trade zu Beginn, ein Block am Ende und eine konstante Handelsrate dazwischen — die Blöcke nutzen die Erholung des Orderbuchs aus. Wenn Ihr Child-Order-Intervall mit der Auffüllzeit des Handelsplatzes vergleichbar ist (in Krypto Sekunden bis eine Minute — was oft der Fall ist), befinden Sie sich im Obizhaeva-Wang-Territorium, nicht im Almgren-Chriss-Territorium, und der Δtr\Delta t_r-Kniff in der obigen Kalibrierung ist Ihr Warnsignal.

Keine dynamische Arbitrage — Gatheral (2010). "No-dynamic-arbitrage and market impact" (Quantitative Finance 10(7), 749–759) fragt, welche Kombinationen aus instantaner Impact-Funktion f(v)f(v) und Abklingkern G(t)G(t) in sich konsistent sind, also keine Round-Trip-Strategie mit negativen Erwartungskosten zulassen. Die Ergebnisse sind scharf: Exponentielles Abklingen ist nur mit linearem Impact verträglich — kombinieren Sie exponentielles Abklingen mit Quadratwurzel-Impact, und das Modell lässt sich durch eine oszillierende Trade-Sequenz zu Geld pumpen; nichtlinearer Impact erfordert ein Potenzgesetz-Abklingen, mit einer Ungleichung, die die beiden Exponenten verknüpft (für Impact vδ\sim v^\delta und Abklingen tγd\sim t^{-\gamma_d} grob γd+δ1\gamma_d + \delta \geq 1). Dies ist das Paper, das man lesen sollte, bevor man einen ausgefallenen Abklingkern auf sein Impact-Modell schraubt: Die meisten Ad-hoc-Kombinationen sind heimlich arbitrierbar, was in der Praxis bedeutet, dass Ihr Optimierer die Arbitrage entdeckt und absurde oszillierende Zeitpläne produziert. Wenn Ihre "optimale" Trajektorie während einer reinen Liquidation zwischen Käufen und Verkäufen wechselt, haben Sie Gatheral verletzt, nicht Alpha entdeckt.

Die ML-Fortsetzungen. Zwei Stränge dieser Serie bauen direkt auf diesem Gerüst auf. Erstens Reinforcement-Learning-Ausführung: Sobald man zugesteht, dass Impact nichtlinear, zustandsabhängig und nur teilweise beobachtbar ist, ist die geschlossene Form dahin, und RL (ab dem Q-Learning-Paper von Nevmyvaka, Feng und Kearns aus dem Jahr 2006) ist ein naheliegender Weg, den Trajektorienraum zu durchsuchen — doch jeder ernstzunehmende RL-Ausführungsagent wird gegen die AC-Lösung gebenchmarkt und oft aus ihr heraus initialisiert. Zweitens neuronale Price-Impact-Modelle: Man ersetzt h(v)=ηvh(v) = \eta v durch ein gelerntes Funktional des Orderbuchzustands und behält die Mittelwert-Varianz-Scheduling-Logik obenauf. Keine der beiden Fortsetzungen ergibt Sinn, ohne genau zu wissen, was die lineare-gaußsche Baseline ist und warum sie die Form hat, die sie hat.

Was man mitnehmen sollte

Das Modell besteht aus drei Annahmen, einer Differenzengleichung und einer Zahl. Linearer permanenter Impact (erzwungen durch Nicht-Manipulation), linearer temporärer Impact (eine Näherung, um die herum man kalibriert), arithmetisches Brownsches Rauschen. Das Optimum wägt Bestandsvarianz gegen Impact-Kosten ab, die gesamte Strategie kollabiert in die Dringlichkeit κ=λσ2/η\kappa = \sqrt{\lambda\sigma^2/\eta}, und TWAP fällt als der degenerierte Fall λ=0\lambda = 0 heraus — was die einzelne nützlichste Tatsache im Modell ist, denn sie verwandelt "Sollten wir das per TWAP machen?" von einer Gewohnheitsfrage in eine überprüfbare Aussage über die Risikoaversion. Die eigentliche Arbeit ist die Kalibrierung: σ\sigma ist leicht, η\eta ist ein Faktor-2-Spiel, γ\gamma ist ein Forschungsprojekt, und die Trajektorie verzeiht alle drei. Implementieren Sie es an einem Nachmittag; verbringen Sie den Rest des Monats mit der Regressionsdiagnostik.

Referenzen

  • Almgren, R., Chriss, N. (2001). "Optimal execution of portfolio transactions." Journal of Risk, 3(2), 5–39.
  • Almgren, R. (2003). "Optimal execution with nonlinear impact functions and trading-enhanced risk." Applied Mathematical Finance, 10(1), 1–18.
  • Almgren, R., Thum, C., Hauptmann, E., Li, H. (2005). "Direct estimation of equity market impact." Risk, 18(7), 58–62.
  • Huberman, G., Stanzl, W. (2004). "Price manipulation and quasi-arbitrage." Econometrica, 72(4), 1247–1275.
  • Obizhaeva, A., Wang, J. (2013). "Optimal trading strategy and supply/demand dynamics." Journal of Financial Markets, 16(1), 1–32.
  • Gatheral, J. (2010). "No-dynamic-arbitrage and market impact." Quantitative Finance, 10(7), 749–759.
  • Nevmyvaka, Y., Feng, Y., Kearns, M. (2006). "Reinforcement learning for optimized trade execution." ICML 2006.
blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Dem Markt einen Schritt voraus

Abonniere unseren Newsletter für exklusive KI-Trading-Einblicke, Marktanalysen und Plattform-Updates.

Wir respektieren deine Privatsphäre. Jederzeit abbestellbar.