← Makalelere geri dön
July 14, 2026
5 dakikalık okuma

Elle Sallamadan Almgren-Chriss: Bir Öğleden Sonrada Uygulayabileceğiniz Optimal Execution

Elle Sallamadan Almgren-Chriss: Bir Öğleden Sonrada Uygulayabileceğiniz Optimal Execution
#execution
#almgren-chriss
#market impact
#optimal execution
#twap
#kantitatif
#python
#kripto

Almgren ve Chriss'in (2001) "Optimal execution of portfolio transactions" (Journal of Risk 3(2), 5–39) makalesi, muhtemelen execution araştırmalarında en çok atıf alan ve en az doğru uygulanan makaledir. Ortalıkta dolaşan "Almgren-Chriss" kodlarının çoğu, üzerine bir yorum bloğu eklenmiş bir TWAP zamanlayıcısından ibarettir. Konuyla ilgili yazıların çoğu türetimi atlar, bir sinh fonksiyonuna işaret eder ve production'da gerçekten önemli olan kısma hiç dokunmaz: parametrelerin nereden geldiğine.

Bu yazı işin tamamını ele alıyor. Model varsayımları, dürüstçe ifade edilmiş. Kapalı form trajektori, türetilmiş, sadece iddia edilmemiş. Etkin sınır ve risk-iştahı parametresinin nasıl seçileceği. Ve üç girdinin — geçici impact η\eta, kalıcı impact γ\gamma, volatilite σ\sigma — Binance emir defteri ve trade verisinden kalibrasyonu, çalışan Python koduyla ve fit'in neden gürültülü olduğuna dair dürüst bir tartışmayla birlikte. Bu, execution alanındaki her şeyin entelektüel omurgasıdır: TWAP, VWAP ve POV bunun özel durumları veya sezgisel akrabalarıdır (bkz. TWAP, VWAP, POV: herkesin çalıştırdığı execution algoritmaları), ve modern ML yaklaşımları — reinforcement learning zamanlayıcıları ve nöral impact modelleri — tam olarak şimdi yazacağımız varsayımları gevşetme girişimleridir.

Kurulum: model gerçekte neyi varsayıyor

Bir varlıktan XX birim elinizde tutuyorsunuz (diyelim ki 100 BTC) ve TT zamanına kadar tamamen tasfiye etmeniz gerekiyor. [0,T][0, T] aralığını uzunluğu τ=T/N\tau = T/N olan NN parçaya bölün. Karar değişkeniniz, holding trajektorisi x0=X,x1,,xN=0x_0 = X, x_1, \dots, x_N = 0'dır; kk aralığında nk=xk1xkn_k = x_{k-1} - x_k kadar trade gerçekleştirilir.

Modelin tamamını üç varsayım taşır:

1. Aritmetik random walk. Bozulmamış (unperturbed) fiyat şu şekilde ilerler:

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

burada ξk\xi_k i.i.d. standart normal değişkenlerdir ve σ\sigma mutlak volatilitedir (dolar bölü birim zaman1/2^{1/2}, yüzde değil). Aritmetik, geometrik değil — birkaç saat içinde fark ihmal edilebilir düzeydedir ve aritmetik walk cebiri doğrusal-kuadratik tutar. Drift yok: Almgren ve Chriss drift terimini tartışırlar, ama gün içi bir tasfiye için 4 saatlik alfa tahmininiz neredeyse her zaman gürültüdür ve onu sıfıra ayarlamak dürüst varsayılan değerdir.

2. Doğrusal kalıcı impact. g(v)=γvg(v) = \gamma v: vv hızında trade yapmak fiyatı kalıcı, orantılı olarak kaydırır ve bu kayma hiç azalmaz. Sattığınız her birim, mid fiyatı sonsuza dek γ\gamma kadar aşağı iter. Bu kaba görünür, ama doğrusal tutmanın derin bir nedeni var: Huberman ve Stanzl (2004), trade büyüklüğüne göre doğrusal olmayan kalıcı impact'in, pozitif beklenen kârla round-trip stratejilere — yani fiyat manipülasyonuna — izin verdiğini kanıtladılar. Doğrusal kalıcı impact bir kolaylık sadeleştirmesi değildir; bu model sınıfında arbitraj içermeyen tek seçenektir.

3. Doğrusal geçici impact. kk aralığında gerçekten aldığınız fiyat:

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, bid-ask spread'in yarısı artı ücretleri temsil eder; η\eta, vv hızında likidite talep etmenin marjinal maliyetinin eğimidir. Geçici impact yalnızca kendi fill'inizi etkiler ve anında kaybolur — bir sonraki child order'ınızdan önce defter tamamen yenilenir. "Doğrusal", "anında" ve "tamamen" kelimelerinin her biri gerçek piyasalarda yanlıştır, ve son bölüm ne kadar yanlış olduğuyla ilgili. Ama önce, bunları kabul etmenin getirisi.

Bir trajektorinin maliyeti ve varyansı

Fill'leri toplayın, başlangıç mark'ı XS0X S_0'dan çıkarın, elinizde implementation shortfall kalır. ξk\xi_k gürültüsü üzerinden beklenen değeri ve varyansı:

E[C]=12γX2kalıcı+ϵXspread+η~τk=1Nnk2gec¸ici,V[C]=σ2τk=1Nxk2,E[C] = \underbrace{\tfrac{1}{2}\gamma X^2}_{\text{kalıcı}} + \underbrace{\epsilon X}_{\text{spread}} + \underbrace{\frac{\tilde{\eta}}{\tau} \sum_{k=1}^{N} n_k^2}_{\text{geçici}}, \qquad V[C] = \sigma^2 \tau \sum_{k=1}^{N} x_k^2,

burada η~=η12γτ\tilde{\eta} = \eta - \tfrac{1}{2}\gamma\tau (bir ayrıklaştırma düzeltmesi, τ0\tau \to 0 iken kaybolur).

Çoğu uygulamanın kaçırdığı iki gözlem:

  • Kalıcı maliyet 12γX2\tfrac{1}{2}\gamma X^2, trajektoriye bağlı değildir. Doğrusal, azalmayan kalıcı impact ile, nasıl zamanlarsanız zamanlayın aynı kalıcı bedeli ödersiniz. Optimizasyon tamamen geçici-maliyet terimi (yavaş, eşit trade istiyor — nk=X/Nn_k = X/N, yani TWAP ile minimize edilir) ile varyans terimi (envanterinizin dünden gitmiş olmasını istiyor — anında tasfiye ile minimize edilir) arasındaki bir mücadeledir.
  • Varyans terimi envanter-ağırlıklıdır, trade-ağırlıklı değil. Risk, hâlâ elinizde tuttuğunuz xkx_k üzerinden birikir, trade ettiğiniz üzerinden değil. Aciliyetin zamanlamayı öne yüklemesinin nedeni budur.

Kapalı form: sinh, cosh ve aciliyet parametresi

Almgren-Chriss, ortalama-varyans amaç fonksiyonunu minimize eder:

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

burada λ0\lambda \geq 0, 1/dolar biriminde risk iştahıdır. İç noktalar için U/xj=0\partial U / \partial x_j = 0 ayarlayın. Geçici terim xx'in ikinci farklarını, varyans terimi ise xjx_j'nin kendisini katkılar, ve doğrusal ikinci dereceden bir fark denklemi elde edersiniz:

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}}.

Bu, x=κ2xx'' = \kappa^2 x'in ayrık analoğudur, ve x0=Xx_0 = X, xN=0x_N = 0 sınır koşullarıyla çözüm hiperboliktir:

  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,

burada κ\kappa, 2τ2(cosh(κτ)1)=κ~2\tfrac{2}{\tau^2}\left(\cosh(\kappa\tau) - 1\right) = \tilde{\kappa}^2 denklemini çözer; küçük τ\tau için bu basitçe κκ~=λσ2/η\kappa \approx \tilde{\kappa} = \sqrt{\lambda\sigma^2/\eta}'dir.

Farklı kappa değerleri için optimal holding trajektorileri, TWAP düz çizgisinden agresif öne-yüklü eğrilere

Stratejiyle ilgili her şey tek bir sayıda sıkıştırılmıştır:

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

κ\kappa, aciliyettir. Tersi θ=1/κ\theta = 1/\kappa, trade'in karakteristik zamanıdır: impact maliyetinden tasarruf etmek için envanter riskini taşımanın değerli olduğu zaman ölçeği. κ\kappa'nin neye bağlı olmadığına dikkat edin: emir büyüklüğü XX ve deadline TT. Trade'inizin içsel zaman ölçeğinin 20 dakika mı yoksa 6 saat mi olduğu, sadece risk iştahı, volatilite ve likidite tarafından belirlenir. θT\theta \ll T ise, deadline'ınız önemsizdir — model kendi zamanlamasında tasfiye eder ve ufkun kuyruğu kullanılmaz. θT\theta \gg T ise, deadline bağlayıcıdır ve etkin olarak TWAP yapıyorsunuzdur.

Risk-nötr limit TWAP'tir — TWAP'in var olma nedeni budur

λ0\lambda \to 0 alın, böylece κ0\kappa \to 0. O zaman sinh(z)z\sinh(z) \to z ve

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

Optimal trajektori düz çizgiye dejenere olur: eşit zaman aralıklarında eşit miktarlar. TWAP, işe yaraması tesadüf olan bir sezgisel yöntem değildir; doğrusal impact'e sahip risk-nötr bir trader için Almgren-Chriss modelinin tam optimumudur. Birisi TWAP çalıştırdığında, örtük olarak λ=0\lambda = 0 iddia ediyordur: "Shortfall'ımın varyansını değil, sadece ortalamasını önemsiyorum." Bu, küçük emirler ve kısa ufuklar için savunulabilir bir pozisyondur. Günlük volatilitesi %4 olan bir varlıkta günlük hacmin %5'ini 8 saatte tasfiye etmek için garip bir pozisyondur — ki insanların onu gerçekte çalıştırdığı yer de tam olarak burasıdır. Ters limit λ\lambda \to \infty, tüm j>0j > 0 için xj0x_j \to 0 verir: her şeyi ilk aralıkta boşaltın, maliyeti ne olursa olsun ödeyin. Bu uçlar arasında, κT\kappa T interpolasyon yapar: κT0.5\kappa T \lesssim 0.5 TWAP'ten neredeyse ayırt edilemez, κT3\kappa T \gtrsim 3 agresif şekilde öne yüklüdür.

Execution'ın etkin sınırı

Her λ\lambda için bir trajektori, bir beklenen maliyet E(λ)E(\lambda) ve bir varyans V(λ)V(\lambda) elde edersiniz. λ[0,)\lambda \in [0, \infty)'u taramak, (V,E)(V, E) düzleminde bir eğri çizer — Markowitz'e doğrudan analoji olarak, execution'ın etkin sınırı. Konvekstir ve azalandır: daha az varyans her zaman daha fazla beklenen shortfall maliyetine mal olur, giderek azalan getirilerle. Belirli bir λ\lambda tarafından seçilen sınır noktasında, risk iştahı teğetin (negatif) eğimidir: λ=E/V\lambda = -\partial E / \partial V.

Lambda'yı eğim olarak gösteren teğet çizgiyle execution maliyetinin varyansa karşı etkin sınırı

Sınır, "λ\lambda nedir?" sorusunu — ki bunu kimse içgözlemle cevaplayamaz — "hangi maliyet/risk trade-off'unu istiyorum?" sorusuna dönüştürür, ki bir masa buna gerçekten cevap verebilir. Noktayı seçmenin üç pratik yolu:

  1. Marjinal-maliyet akıl yürütmesi. Sınır boyunca yürüyün ve sorun: "bu noktadan bir sonrakine geçerken, shortfall standart sapmasından Δstd\Delta\text{std} dolar kaldırmak için ΔE\Delta E dolar beklenen maliyet ödüyorum — bu trade'i alır mıyım?" Sınırın dizi noktası genellikle 2 kat faktörü içinde açıktır, ve trajektori bu çözünürlükte λ\lambda'ya duyarsızdır.
  2. Risk bütçesi. Maksimum kabul edilebilir shortfall standart sapmasını sabitleyin (örn. "kalan pozisyonun tek günlük 1-sigma'sı notional'ın 15 bps'inin altında kalmalı") ve bunu sağlayan en ucuz trajektoriyi alın. Bu, Lagrange çarpanı tam olarak λ\lambda olan kısıtlı bir problemdir.
  3. Karakteristik-zaman hedeflemesi. θ=1/κ\theta = 1/\kappa'yı doğrudan seçin ("bu emrin 90 dakikalık bir yarı ömrü olmalı") ve λ=η/(σ2θ2)\lambda = \eta/(\sigma^2\theta^2)'yı geri hesaplayın. Çoğu uygulayıcının bir "aciliyet" kaydırıcısı ayarlarken örtük olarak yaptığı şey budur.

Kalibrasyon bölümünde gerekçelendireceğimiz sayılarla çalışılmış bir örnek. S_0 = \100{,}000da'da X = 100BTCsatın,ufukBTC satın, ufukT = 4saat,saat,\sigma = $600perBTCperper BTC per\sqrt{\text{saat}}(gu¨nlu¨kyaklas\cık(günlük yaklaşık %3 vol),\eta = 1.0\ $\cdot\text{saat}/\text{BTC},, \lambda = 10^{-6}\ $^{-1}$. O zaman

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

Optimal program, ilk saatte 46.2 BTC satar (TWAP: 25). Geçici maliyet: \eta \int_0^T v(t)^2 dt \approx \3{,}290,TWAPic\cin, TWAP için $2{,}500ekars\cı.Shortfallstd:'e karşı. Shortfall std: $53{,}000,TWAPic\cin, TWAP için $69{,}300'e karşı. Yani \10M notional üzerinde ekstra 0.8 bps beklenen maliyet için shortfall riskini %23 azaltıyorsunuz. Modelin tüm içeriği tek cümlede budur: sigortayı fiyatlar ve onu satın alıp almayacağınıza karar vermenizi sağlar.

Trajektorinin kendisi on satırlık Python'dır:

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}")

lam'i np.logspace(-8, -4, 50) üzerinde tarayın ve EE'yi V\sqrt{V}'ye karşı çizin — bu sizin sınırınızdır, ve tüm karar yüzeyi bir risk komitesine verebileceğiniz tek bir grafiğe sığar.

Kalibrasyon: Binance verisinden η\eta, γ\gamma, σ\sigma

İşte uygulamaların %90'ının sessizce öldüğü yer burası. Trajektori formülü basit; parametreler değil. Üç büyüklük, üç farklı tahmin problemi.

Binance verisinden participation rate'e karşı slippage ve net order flow'a karşı fiyat değişimi kalibrasyon dağılım grafikleri

σ\sigma: kolay olan

Mid-price getirilerinden, kök-saat başına mutlak volatilite. 1 dakikalık barlar kullanın ve ölçeklendirin; daha ince örneklemede, mikroyapı gürültüsü (bid-ask sekmesi) gerçekleşen varyansı yukarı yönlü biaslar. Bu tahmin sağlamdır — vol, doğru alacağınız tek parametredir.

η\eta: defterden ve trade'lerden geçici impact

İki tamamlayıcı yol. Yol A — L2 defterinde yürüyün. Derinlik anlık görüntülerinden, qq büyüklüğünde hipotetik bir marketable sweep'in maliyetini hesaplayın: tüketilen seviyelerin VWAP'i eksi mid. cost(q)ϵ+ηinstq\text{cost}(q) \approx \epsilon + \eta_{\text{inst}}\, q fit'i, BTC başına anlık impact verir. Bunu modelin hız-bazlı η\eta'sine çevirmek için bir defter yenilenme süresi Δtr\Delta t_r varsaymanız gerekir (BTCUSDT için 10–60 saniye mertebesinde): vv hızında trade yapmak, yenileme döngüsü başına vΔtrv \Delta t_r tüketir, yani ηηinstΔtr\eta \approx \eta_{\text{inst}} \Delta t_r. Bu varsayım — sabit bir saatte anında, tam yenilenme — tam olarak Obizhaeva-Wang'ın girdiği çatlaktır; aşağıda daha fazlası. Yol B — gerçekleşen slippage'ı participation üzerine regresyona sokun. Agresif (taker) akışı 1 dakikalık bin'lere ayırın; her bin için, taker-side VWAP eksi açılış mid'ini taker hacim oranına karşı regresyona sokun. Yol B, piyasanın agresörlere gerçekte ne yüklediğini ölçer; Yol A, bekleyen defterin şu anda ne yükleyeceğini ölçer. 3 kat faktörle uyuşmadıklarında, seviye için B'ye, gün-içi şekil için A'ya güvenin.

γ\gamma: Kyle-tarzı regresyon ile kalıcı impact

Mid-price değişimlerini, 5 dakikalık pencerelerde imzalı net taker akışına karşı regresyona sokun:

ΔS5m=γQnet+gu¨ru¨ltu¨,Qnet=taker alıs¸larıtaker satıs¸ları.\Delta S_{5m} = \gamma\, Q_{\text{net}} + \text{gürültü}, \qquad Q_{\text{net}} = \text{taker alışları} - \text{taker satışları}.

Sonra impact'in bir pencere sonra geri dönmediğini kontrol edin — geri dönmeyen bileşen, trade ölçeğinizde "kalıcı"dır. Bu, üçü arasında açık farkla en gürültülü olanıdır.

Sadece halka açık Binance REST endpoint'lerini kullanan çalışan kod:

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")

Production için, tek aggTrades sayfasını tarihsel dosyalarla birkaç günlük veriyle değiştirin ve γ\gamma regresyonunu bir avuç değil, binlerce bin üzerinde çalıştırın.

Kripto kalibrasyonu neden gürültülü, ve bununla ilgili ne yapmalı

γ\gamma regresyonunu gerçek veri üzerinde çalıştırın, birkaç yüzdelik bir R2R^2 ve günler arasında 2–5 kat değişen bir katsayı elde edersiniz. Bu kodunuzdaki bir bug değil. Nedenler yapısaldır:

  • İçselleşme (endogeneity). Akış, fiyata, fiyatın akışa tepki verdiği kadar tepki verir. Momentum trader'ları fiyat yükseldiği için alır; getirilerin akış üzerine naif bir OLS regresyonu, onların tepkisini yakalar ve bunu impact'e atfeder. Temiz çözüm, kendi fill'lerinizi kullanmaktır (yapı gereği dışsal) — ki bunlara ancak bir süre trade yaptıktan sonra sahip olursunuz.
  • Konkavlik. Gerçek impact, büyüklükte konkavdır — ampirik olarak kareköke yakın (Almgren, Thum, Hauptmann ve Li, 2005, "Direct estimation of equity market impact", 0.6'ya yakın bir üs buldu; aynı konkavlık kriptoda da sağlamdır). Konkav bir fonksiyona doğru bir çizgi fit etmek, η\eta ve γ\gamma'nizin örneklemdeki büyüklük aralığına bağlı olduğu anlamına gelir. Gerçekte trade edeceğiniz participation oranlarında kalibre edin.
  • Parçalanma ve türev liderliği. Binance'teki BTCUSDT spot, birçok venue'dan biridir, ve fiyat keşfi sıklıkla perp'lerde gerçekleşir. Hiç görmediğiniz akış, üzerine regresyon yaptığınız fiyatı hareket ettirir, gürültü terimini şişirir.
  • Rejim bağımlılığı. Asya seansında ölçülen η\eta, ABD açılışını tanımlamaz; volatilite ikiye katlandığında impact kabaca ikiye katlanır. Seans başına kalibre edin, ve en azından haftalık yeniden fit edin.

Kurtarıcı özellik: trajektori affedicidir. κ1/η\kappa \propto \sqrt{1/\eta}, yani η\eta'de 2 katlık bir hata κ\kappa'yı sadece 2\sqrt{2} kadar hareket ettirir, ve maliyet fonksiyonu optimumun yakınında düzdür. η\eta'yi 2 kat faktörü içinde ve λ\lambda'yı bir büyüklük mertebesi içinde doğru almak, TWAP üzerindeki mevcut iyileştirmenin çoğunu zaten yakalar. Kesinlik trade-öncesi maliyet tahminleri için önemlidir; sağlamlık zamanlama için yeterlidir.

Modelin nerede kırıldığı, ve onu düzelten makaleler

Almgren-Chriss bir iskelettir, ve hangi kirişin taşıyıcı olduğunu tam olarak bilmek, hangi uzantıya başvuracağınızı söyler.

Doğrusal olmayan impact — Almgren (2003). "Optimal execution with nonlinear impact functions and trading-enhanced risk" (Applied Mathematical Finance 10, 1–18), programı power-law geçici impact h(v)=ηvαh(v) = \eta v^\alpha ile yeniden yapar. Ampirik olarak tercih edilen α1/2\alpha \approx 1/2 — karekök yasası — için, optimal trajektoriler karakter değiştirir: konkav impact, patlamaları doğrusal impact'ten daha az cezalandırır, bu yüzden aynı λ\lambda'da optimal programlar daha öne yüklü hale gelir. Nitel yapı (aciliyet parametresi, etkin sınır) hayatta kalır; sinh formülü kalmaz.

Dayanıklılık ve LOB — Obizhaeva ve Wang (2013). "Optimal trading strategy and supply/demand dynamics" (Journal of Financial Markets 16(1), 1–32; çalışma kağıdı 2005'ten beri dolaşımda) geçici/kalıcı ikiliğini, sonlu derinliğe ve üstel olarak azalan impact'e sahip bir limit order book ile değiştirir: trade'iniz defteri tüketir, ve defter ρ\rho dayanıklılık oranında yeniden dolar. AC'nin "geçici impact anında kaybolur" varsayımı, ρ\rho \to \infty limitidir. Optimal strateji dramatik şekilde şekil değiştirir: başta bir blok trade, sonda bir blok trade, ve arada sabit bir trade oranı — bloklar, defterin toparlanmasından yararlanır. Child-order aralığınız venue'nun yenilenme süresine kıyasla benzerse (kriptoda, saniyeler ile bir dakika arası — sık sık öyledir), Almgren-Chriss bölgesinde değil, Obizhaeva-Wang bölgesindesinizdir, ve yukarıdaki kalibrasyondaki Δtr\Delta t_r yaması sizin uyarı işaretinizdir.

Dinamik-arbitrajsızlık — Gatheral (2010). "No-dynamic-arbitrage and market impact" (Quantitative Finance 10(7), 749–759), anlık impact fonksiyonu f(v)f(v) ile azalma çekirdeği G(t)G(t)'nin hangi kombinasyonlarının içsel olarak tutarlı olduğunu, yani negatif beklenen maliyetli bir round-trip stratejiye izin vermediğini sorar. Sonuçlar keskindir: üstel azalma yalnızca doğrusal impact ile uyumludur — üstel azalmayı karekök impact ile birleştirin, model salınan bir trade dizisiyle paraya çevrilebilir hale gelir; doğrusal olmayan impact, power-law azalma gerektirir, iki üssü birbirine bağlayan bir eşitsizlikle (impact vδ\sim v^\delta ve azalma tγd\sim t^{-\gamma_d} için, kabaca γd+δ1\gamma_d + \delta \geq 1). Bu, impact modelinize süslü bir azalma çekirdeği eklemeden önce okumanız gereken makaledir: çoğu ad-hoc kombinasyon gizlice arbitraja açıktır, ki bu pratikte optimizasyoncunuzun arbitrajı keşfedeceği ve saçma salınan programlar üreteceği anlamına gelir. "Optimal" trajektoriniz, saf bir tasfiye sırasında alış ve satış arasında gidip geliyorsa, alfa keşfetmemiş, Gatheral'ı ihlal etmişsinizdir.

ML devamları. Bu serideki iki konu, doğrudan bu iskelet üzerine inşa edilir. Birincisi, reinforcement-learning execution: impact'in doğrusal olmadığını, duruma bağlı ve kısmen gözlemlenebilir olduğunu kabul ettiğinizde, kapalı form ortadan kalkar, ve RL (Nevmyvaka, Feng ve Kearns'in 2006 Q-learning makalesinden itibaren) trajektori uzayını aramak için doğal bir yoldur — ama her ciddi RL execution ajanı, AC çözümüne karşı karşılaştırılır, ve sıklıkla ondan başlatılır. İkincisi, nöral fiyat-impact modelleri: h(v)=ηvh(v) = \eta v'yi, ortalama-varyans zamanlama mantığını üstte tutarken, emir defteri durumunun öğrenilmiş bir fonksiyoneliyle değiştirmek. İki devam da, doğrusal-Gaussian temel çizginin tam olarak ne olduğunu ve neden bu forma sahip olduğunu bilmeden anlam ifade etmez.

Ne çıkarmalı

Model üç varsayım, bir fark denklemi, ve bir sayıdır. Doğrusal kalıcı impact (manipülasyonsuzluk tarafından zorlanmış), doğrusal geçici impact (etrafında kalibre ettiğiniz bir yaklaşım), aritmetik Brown gürültüsü. Optimum, envanter varyansını impact maliyetine karşı dengeler, tüm strateji aciliyet κ=λσ2/η\kappa = \sqrt{\lambda\sigma^2/\eta}'ye çöker, ve TWAP, λ=0\lambda = 0 dejenere durumu olarak ortaya çıkar — ki bu modeldeki en yararlı tek gerçektir, çünkü "bunu TWAP yapmalı mıyız?" sorusunu bir alışkanlık meselesinden, risk iştahı hakkında kontrol edilebilir bir iddiaya dönüştürür. Kalibrasyon gerçek iştir: σ\sigma kolaydır, η\eta 2 kat faktörlü bir oyundur, γ\gamma bir araştırma projesidir, ve trajektori üçünü de affeder. Bir öğleden sonrada uygulayın; ayın geri kalanını regresyon diagnostiklerine harcayın.

Kaynaklar

  • 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.
Sorumluluk Reddi: Bu makalede sağlanan bilgiler yalnızca eğitim ve bilgilendirme amaçlıdır ve finansal, yatırım veya ticaret tavsiyesi niteliği taşımaz. Kripto para ticareti önemli bir kayıp riski içerir.

Yazarlar

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

Piyasanın Önünde Olun

Özel yapay zeka ticaret içgörüleri, piyasa analizi ve platform güncellemeleri için bültenimize abone olun.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.