← Kembali ke artikel
July 14, 2026
5 menit baca

Almgren-Chriss Tanpa Basa-Basi: Eksekusi Optimal yang Bisa Anda Implementasikan dalam Satu Sore

Almgren-Chriss Tanpa Basa-Basi: Eksekusi Optimal yang Bisa Anda Implementasikan dalam Satu Sore
#eksekusi
#almgren-chriss
#market impact
#eksekusi optimal
#twap
#quant
#python
#crypto

Almgren dan Chriss (2001), "Optimal execution of portfolio transactions" (Journal of Risk 3(2), 5–39), mungkin adalah paper yang paling sering dikutip dalam riset eksekusi sekaligus salah satu yang paling jarang diimplementasikan dengan benar. Kebanyakan kode "Almgren-Chriss" yang beredar hanyalah scheduler TWAP dengan blok komentar. Kebanyakan tulisan blog tentangnya melewatkan derivasinya, melambaikan tangan ke fungsi sinh, dan tidak pernah menyentuh bagian yang sebenarnya penting di produksi: dari mana parameternya berasal.

Artikel ini membahas semuanya secara utuh. Asumsi model, dinyatakan dengan jujur. Trajektori bentuk tertutup (closed-form), diturunkan, bukan sekadar diklaim. Efficient frontier dan cara memilih parameter penghindaran risiko (risk aversion). Serta kalibrasi ketiga input — dampak temporer η\eta, dampak permanen γ\gamma, volatilitas σ\sigma — dari data order book dan trade Binance, dengan Python yang siap pakai dan pembahasan jujur tentang mengapa fit-nya berisik (noisy). Inilah tulang punggung intelektual dari segala hal lain di eksekusi: TWAP, VWAP, dan POV adalah kasus khusus atau sepupu heuristik (lihat TWAP, VWAP, POV: algoritma eksekusi yang dijalankan semua orang), dan pendekatan ML modern — scheduler reinforcement learning dan model dampak neural — adalah upaya untuk melonggarkan justru asumsi-asumsi yang akan kita tuliskan berikut ini.

Penyusunan: apa yang sebenarnya diasumsikan model

Anda memegang XX unit sebuah aset (misalnya, 100 BTC) dan harus melikuidasi seluruhnya pada waktu TT. Bagi [0,T][0, T] menjadi NN interval berpanjang τ=T/N\tau = T/N. Variabel keputusan Anda adalah trajektori kepemilikan x0=X,x1,,xN=0x_0 = X, x_1, \dots, x_N = 0, dengan trade nk=xk1xkn_k = x_{k-1} - x_k dieksekusi pada interval kk.

Tiga asumsi menopang keseluruhan model:

1. Random walk aritmetika. Harga tak terganggu (unperturbed) mengikuti

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

di mana ξk\xi_k adalah normal standar i.i.d. dan σ\sigma adalah volatilitas absolut (dolar per satuan waktu1/2^{1/2}, bukan persen). Aritmetika, bukan geometrik — dalam rentang beberapa jam perbedaannya dapat diabaikan dan random walk aritmetika menjaga aljabar tetap linier-kuadratik. Tanpa drift: Almgren dan Chriss membahas suku drift, tetapi untuk likuidasi intraday estimasi alpha Anda selama 4 jam hampir selalu berupa noise, dan menetapkannya nol adalah default yang jujur.

2. Dampak permanen linier. g(v)=γvg(v) = \gamma v: berdagang pada laju vv menggeser harga secara permanen, proporsional, dan pergeseran itu tak pernah meluruh. Setiap unit yang Anda jual mendorong mid turun sebesar γ\gamma selamanya. Ini tampak kasar, tetapi ada alasan mendalam untuk mempertahankannya linier: Huberman dan Stanzl (2004) membuktikan bahwa dampak permanen yang nonlinier terhadap ukuran trade memungkinkan strategi round-trip dengan ekspektasi keuntungan positif — manipulasi harga. Dampak permanen linier bukanlah penyederhanaan demi kemudahan; ia adalah satu-satunya pilihan bebas-arbitrase dalam kelas model ini.

3. Dampak temporer linier. Harga yang sebenarnya Anda terima pada interval kk adalah

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 menangkap separuh bid-ask spread ditambah fee; η\eta adalah kemiringan biaya marjinal untuk menuntut likuiditas pada laju vv. Dampak temporer hanya memengaruhi fill Anda sendiri dan lenyap seketika — order book terisi ulang sepenuhnya sebelum child order Anda berikutnya. Ketiga kata "linier", "seketika", "sepenuhnya" itu semuanya keliru di pasar nyata, dan bagian terakhir membahas seberapa keliru. Namun pertama-tama, imbalan dari menerima asumsi-asumsi tersebut.

Biaya dan varians sebuah trajektori

Jumlahkan seluruh fill, kurangkan dari mark awal XS0X S_0, dan Anda memperoleh implementation shortfall. Ekspektasi dan variansnya terhadap noise ξk\xi_k adalah:

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,

dengan η~=η12γτ\tilde{\eta} = \eta - \tfrac{1}{2}\gamma\tau (koreksi diskretisasi yang lenyap saat τ0\tau \to 0).

Dua pengamatan yang terlewatkan oleh kebanyakan implementasi:

  • Biaya permanen 12γX2\tfrac{1}{2}\gamma X^2 tidak bergantung pada trajektori. Dengan dampak permanen yang linier dan tak meluruh, Anda membayar ongkos permanen yang sama tak peduli bagaimana Anda menjadwalkannya. Optimisasi sepenuhnya merupakan pertarungan antara suku biaya temporer (yang menginginkan perdagangan lambat dan merata — diminimalkan oleh nk=X/Nn_k = X/N, yakni TWAP) dan suku varians (yang menginginkan inventaris Anda lenyap kemarin — diminimalkan oleh likuidasi seketika).
  • Suku varians dibobot inventaris, bukan dibobot trade. Risiko terakumulasi pada apa yang masih Anda pegang, xkx_k, bukan pada apa yang Anda perdagangkan. Inilah alasan urgensi membuat jadwal condong ke depan (front-loaded).

Bentuk tertutup: sinh, cosh, dan parameter urgensi

Almgren-Chriss meminimalkan fungsi objektif mean-variance

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

di mana λ0\lambda \geq 0 adalah penghindaran risiko dalam satuan 1/dolar. Tetapkan U/xj=0\partial U / \partial x_j = 0 untuk titik-titik interior. Suku temporer menyumbang selisih kedua (second differences) dari xx, suku varians menyumbang xjx_j itu sendiri, dan Anda memperoleh persamaan selisih (difference equation) linier orde dua:

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

Ini adalah analog diskret dari x=κ2xx'' = \kappa^2 x, dan dengan syarat batas x0=Xx_0 = X, xN=0x_N = 0 solusinya berbentuk hiperbolik:

  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,

di mana κ\kappa memenuhi 2τ2(cosh(κτ)1)=κ~2\tfrac{2}{\tau^2}\left(\cosh(\kappa\tau) - 1\right) = \tilde{\kappa}^2, yang untuk τ\tau kecil hanyalah κκ~=λσ2/η\kappa \approx \tilde{\kappa} = \sqrt{\lambda\sigma^2/\eta}.

Trajektori kepemilikan optimal untuk berbagai nilai kappa, dari garis lurus TWAP hingga kurva front-loaded agresif

Seluruh isi strategi terkompresi menjadi satu angka:

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

κ\kappa adalah urgensi. Kebalikannya θ=1/κ\theta = 1/\kappa adalah waktu karakteristik trade: skala waktu di mana risiko inventaris masih layak ditanggung demi menghemat biaya dampak. Perhatikan apa yang tidak dipengaruhi κ\kappa: ukuran order XX dan tenggat TT. Apakah skala waktu intrinsik trade Anda 20 menit atau 6 jam ditentukan semata-mata oleh penghindaran risiko, volatilitas, dan likuiditas. Jika θT\theta \ll T, tenggat Anda tak relevan — model melikuidasi menurut jadwalnya sendiri dan ekor horizon tak terpakai. Jika θT\theta \gg T, tenggat mengikat dan efektifnya Anda menjalankan TWAP.

Limit risk-neutral adalah TWAP — inilah alasan TWAP ada

Ambil λ0\lambda \to 0, sehingga κ0\kappa \to 0. Maka sinh(z)z\sinh(z) \to z dan

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

Trajektori optimal merosot menjadi garis lurus: kuantitas sama dalam interval waktu yang sama. TWAP bukanlah heuristik yang kebetulan berhasil; ia adalah optimum eksak dari model Almgren-Chriss untuk trader yang risk-neutral dengan dampak linier. Setiap kali seseorang menjalankan TWAP, ia secara implisit menyatakan λ=0\lambda = 0: "Saya tidak peduli pada varians shortfall saya, hanya pada rata-ratanya." Itu posisi yang dapat dibenarkan untuk order kecil dan horizon pendek. Itu posisi yang aneh untuk melikuidasi 5% volume harian selama 8 jam pada aset dengan vol harian 4%, yang justru di situlah orang tetap menjalankannya. Limit sebaliknya λ\lambda \to \infty memberikan xj0x_j \to 0 untuk semua j>0j > 0: buang semuanya pada interval pertama, bayar berapa pun ongkosnya. Di antara kedua ekstrem ini, κT\kappa T menginterpolasi: κT0.5\kappa T \lesssim 0.5 nyaris tak terbedakan dari TWAP, κT3\kappa T \gtrsim 3 sangat front-loaded secara agresif.

Efficient frontier dari eksekusi

Untuk setiap λ\lambda Anda memperoleh satu trajektori, satu biaya ekspektasi E(λ)E(\lambda), dan satu varians V(λ)V(\lambda). Menyapu λ[0,)\lambda \in [0, \infty) menelusuri sebuah kurva di bidang (V,E)(V, E)efficient frontier dari eksekusi, dalam analogi langsung dengan Markowitz. Kurva ini konveks dan menurun: varians yang lebih kecil selalu berongkos ekspektasi shortfall yang lebih besar, dengan imbal hasil yang menurun tajam (diminishing returns). Pada titik frontier yang dipilih oleh λ\lambda tertentu, penghindaran risiko adalah kemiringan (negatif) dari garis singgung: λ=E/V\lambda = -\partial E / \partial V.

Efficient frontier biaya eksekusi terhadap varians dengan garis singgung yang menunjukkan lambda sebagai kemiringan

Frontier membingkai ulang pertanyaan "berapa λ\lambda?" — yang tak seorang pun bisa jawab secara introspektif — menjadi "trade-off biaya/risiko mana yang saya inginkan?", yang sebuah desk sebenarnya bisa jawab. Tiga cara praktis untuk memilih titiknya:

  1. Penalaran biaya marjinal. Susuri frontier dan tanyakan: "berpindah dari titik ini ke berikutnya, saya membayar ΔE\Delta E dolar biaya ekspektasi untuk menghilangkan Δstd\Delta\text{std} dolar standar deviasi shortfall — apakah saya mengambil trade itu?" Lutut (knee) frontier biasanya jelas dalam faktor 2, dan trajektori tak sensitif terhadap λ\lambda pada resolusi tersebut.
  2. Anggaran risiko. Tetapkan std shortfall maksimum yang dapat diterima (misalnya "1-sigma satu hari dari posisi residual harus tetap di bawah 15 bps notional") lalu ambil trajektori termurah yang memenuhinya. Ini adalah masalah berkendala (constrained) yang pengganda Lagrange-nya adalah λ\lambda.
  3. Penargetan waktu karakteristik. Pilih θ=1/κ\theta = 1/\kappa secara langsung ("order ini seharusnya punya half-life 90 menit") lalu turunkan λ=η/(σ2θ2)\lambda = \eta/(\sigma^2\theta^2). Inilah yang secara implisit dilakukan kebanyakan praktisi ketika mereka menggeser slider "urgensi".

Sebuah contoh terselesaikan dengan angka-angka yang akan kita justifikasi di bagian kalibrasi. Jual X=100X = 100 BTC pada S_0 = \100{,}000,horizon, horizon T = 4jam,jam,\sigma = $600perBTCperper BTC per\sqrt{\text{h}}(sekitar3(sekitar 3% vol harian),\eta = 1.0\ $\cdot\text{h}/\text{BTC},, \lambda = 10^{-6}\ $^{-1}$. Maka

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

Jadwal optimal menjual 46.2 BTC pada jam pertama (TWAP: 25). Biaya temporer: \eta \int_0^T v(t)^2 dt \approx \3{,}290dibandingkandibandingkan$2{,}500untukTWAP.Stdshortfall:untuk TWAP. Std shortfall:$53{,}000dibandingkandibandingkan$69{,}300 untuk TWAP. Jadi dengan tambahan 0,8 bps biaya ekspektasi pada notional \10 juta, Anda memangkas risiko shortfall sebesar 23%. Itulah keseluruhan isi model dalam satu kalimat: ia memberi harga pada asuransinya, dan membiarkan Anda memutuskan apakah akan membelinya.

Trajektorinya sendiri hanyalah sepuluh baris 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}")

Sapu lam sepanjang np.logspace(-8, -4, 50) lalu plot EE terhadap V\sqrt{V} — itulah frontier Anda, dan seluruh permukaan keputusan muat dalam satu grafik yang bisa Anda serahkan ke komite risiko.

Kalibrasi: η\eta, γ\gamma, σ\sigma dari data Binance

Di sinilah 90% implementasi mati diam-diam. Rumus trajektori itu sepele; parameternya tidak. Tiga kuantitas, tiga masalah estimasi yang berbeda.

Scatter plot kalibrasi slippage terhadap participation rate dan perubahan harga terhadap net order flow dari data Binance

σ\sigma: yang mudah

Volatilitas absolut per akar-jam, dari return mid-price. Gunakan bar 1 menit lalu skalakan; pada sampling yang lebih halus, noise mikrostruktur (bid-ask bounce) membiaskan realized variance ke atas. Estimasi ini kokoh — vol adalah satu parameter yang akan Anda dapatkan dengan tepat.

η\eta: dampak temporer dari order book dan dari trade

Dua rute yang saling melengkapi. Rute A — telusuri order book L2. Dari snapshot depth, hitung biaya sebuah sweep marketable hipotetis berukuran qq: VWAP dari level-level yang dikonsumsi dikurangi mid. Mem-fit cost(q)ϵ+ηinstq\text{cost}(q) \approx \epsilon + \eta_{\text{inst}}\, q memberikan dampak instan per BTC. Untuk mengonversinya menjadi η\eta berbasis laju dalam model, Anda harus mengasumsikan waktu pengisian ulang order book Δtr\Delta t_r (orde 10–60 detik untuk BTCUSDT): berdagang pada laju vv mengonsumsi vΔtrv \Delta t_r per siklus refresh, sehingga ηηinstΔtr\eta \approx \eta_{\text{inst}} \Delta t_r. Asumsi itu — pengisian ulang instan dan penuh menurut jam yang tetap — justru celah tempat Obizhaeva-Wang masuk; lebih lanjut di bawah. Rute B — regresikan realized slippage terhadap partisipasi. Kelompokkan aliran agresif (taker) ke dalam bin 1 menit; untuk setiap bin, regresikan VWAP sisi-taker-dikurangi-open-mid terhadap laju volume taker. Rute B mengukur apa yang sebenarnya dibebankan pasar kepada pihak agresif; Rute A mengukur apa yang akan dibebankan order book yang menetap saat ini juga. Ketika keduanya berbeda hingga faktor 3, percayai B untuk level dan A untuk bentuk intraday.

γ\gamma: dampak permanen via regresi gaya Kyle

Regresikan perubahan mid-price terhadap net taker flow bertanda pada jendela 5 menit:

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

Lalu periksa bahwa dampaknya tidak berbalik (revert) satu jendela kemudian — komponen yang tidak berbalik adalah "permanen" pada skala waktu perdagangan Anda. Ini adalah yang paling berisik di antara ketiganya dengan selisih yang lebar.

Kode siap pakai, hanya menggunakan endpoint REST publik Binance:

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

Untuk produksi, ganti satu halaman aggTrades dengan beberapa hari dump historis dan jalankan regresi γ\gamma pada ribuan bin, bukan segelintir saja.

Mengapa kalibrasi crypto berisik, dan apa yang harus dilakukan

Jalankan regresi γ\gamma pada data nyata dan Anda akan memperoleh R2R^2 beberapa persen serta koefisien yang bergerak dengan faktor 2–5 antar-hari. Ini bukan bug pada kode Anda. Alasannya bersifat struktural:

  • Endogenitas. Aliran merespons harga sebanyak harga merespons aliran. Trader momentum membeli karena harga naik; OLS naif dari return terhadap aliran menangkap reaksi mereka dan mengaitkannya dengan dampak. Perbaikan yang bersih adalah menggunakan fill Anda sendiri (eksogen secara konstruksi) — yang hanya Anda miliki setelah berdagang beberapa waktu.
  • Kecekungan (concavity). Dampak nyata cekung terhadap ukuran — secara empiris mendekati akar-kuadrat (Almgren, Thum, Hauptmann dan Li, 2005, "Direct estimation of equity market impact", menemukan eksponen mendekati 0,6; kecekungan yang sama pun kokoh pada crypto). Mem-fit garis pada fungsi cekung berarti η\eta dan γ\gamma Anda bergantung pada rentang ukuran dalam sampel. Kalibrasikan pada participation rate yang benar-benar akan Anda perdagangkan.
  • Fragmentasi dan kepemimpinan derivatif. Spot BTCUSDT di Binance adalah satu venue dari sekian banyak, dan price discovery kerap terjadi di perp. Aliran yang tak pernah Anda lihat menggerakkan harga yang Anda regresikan, mengembungkan suku noise.
  • Ketergantungan rezim. η\eta yang diukur pada sesi Asia tidak menggambarkan pembukaan AS; dampak kira-kira berlipat dua saat volatilitas berlipat dua. Kalibrasikan per sesi, dan fit ulang setidaknya mingguan.

Penyelamatnya: trajektori itu pemaaf. κ1/η\kappa \propto \sqrt{1/\eta}, sehingga kesalahan faktor-2 pada η\eta hanya menggeser κ\kappa sebesar 2\sqrt{2}, dan fungsi biaya datar di dekat optimum. Mendapatkan η\eta dengan tepat dalam faktor 2 dan λ\lambda dengan tepat dalam satu orde besaran sudah menangkap sebagian besar peningkatan yang tersedia atas TWAP. Presisi penting untuk estimasi biaya pra-trade; ketahanan (robustness) sudah cukup untuk penjadwalan.

Di mana model runtuh, dan paper-paper yang memperbaikinya

Almgren-Chriss adalah kerangka (scaffold), dan mengetahui persis balok mana yang menopang beban memberi tahu Anda ekstensi mana yang perlu diraih.

Dampak nonlinier — Almgren (2003). "Optimal execution with nonlinear impact functions and trading-enhanced risk" (Applied Mathematical Finance 10, 1–18) mengulang program dengan dampak temporer power-law h(v)=ηvαh(v) = \eta v^\alpha. Untuk α1/2\alpha \approx 1/2 yang secara empiris disukai — hukum akar-kuadrat — trajektori optimal berubah sifat: dampak cekung menghukum ledakan (bursts) lebih ringan ketimbang dampak linier, sehingga jadwal optimal menjadi lebih front-loaded pada λ\lambda yang sama. Struktur kualitatifnya (parameter urgensi, efficient frontier) bertahan; rumus sinh-nya tidak.

Resiliensi dan LOB — Obizhaeva dan Wang (2013). "Optimal trading strategy and supply/demand dynamics" (Journal of Financial Markets 16(1), 1–32; working paper-nya beredar sejak 2005) mengganti dikotomi temporer/permanen dengan limit order book yang berkedalaman terhingga dan dampak yang meluruh secara eksponensial: trade Anda memakan order book, dan order book terisi ulang pada laju resiliensi ρ\rho. Asumsi AC bahwa "dampak temporer lenyap seketika" adalah limit ρ\rho \to \infty. Strategi optimalnya berubah bentuk secara dramatis: satu block trade di awal, satu block di akhir, dan laju perdagangan konstan di antaranya — block-block itu memanfaatkan pemulihan order book. Jika interval child-order Anda sebanding dengan waktu pengisian ulang venue (pada crypto, dari hitungan detik ke satu menit — sering kali memang begitu), Anda berada di wilayah Obizhaeva-Wang, bukan wilayah Almgren-Chriss, dan akal-akalan Δtr\Delta t_r pada kalibrasi di atas adalah tanda peringatan Anda.

No-dynamic-arbitrage — Gatheral (2010). "No-dynamic-arbitrage and market impact" (Quantitative Finance 10(7), 749–759) menanyakan kombinasi mana antara fungsi dampak instan f(v)f(v) dan kernel peluruhan G(t)G(t) yang konsisten secara internal, yakni tak memungkinkan strategi round-trip berbiaya ekspektasi negatif. Hasilnya tajam: peluruhan eksponensial hanya kompatibel hanya dengan dampak linier — gabungkan peluruhan eksponensial dengan dampak akar-kuadrat maka model bisa diperah uang oleh barisan trade yang berosilasi; dampak nonlinier menuntut peluruhan power-law, dengan sebuah pertidaksamaan yang mengaitkan kedua eksponen (untuk dampak vδ\sim v^\delta dan peluruhan tγd\sim t^{-\gamma_d}, kira-kira γd+δ1\gamma_d + \delta \geq 1). Inilah paper yang harus dibaca sebelum Anda memasang kernel peluruhan yang canggih pada model dampak Anda: kebanyakan kombinasi ad-hoc diam-diam bisa diarbitrase, yang dalam praktik berarti optimizer Anda akan menemukan arbitrase itu dan menghasilkan jadwal berosilasi yang absurd. Jika trajektori "optimal" Anda menyelang-nyeling beli dan jual selama likuidasi murni, Anda telah melanggar Gatheral, bukan menemukan alpha.

Sekuel-sekuel ML. Dua utas dalam seri ini dibangun langsung di atas kerangka ini. Pertama, eksekusi reinforcement-learning: begitu Anda mengakui bahwa dampak itu nonlinier, bergantung-keadaan (state-dependent), dan teramati sebagian (partially observable), bentuk tertutupnya lenyap, dan RL (mulai dari paper Q-learning Nevmyvaka, Feng dan Kearns 2006 dan seterusnya) adalah cara alami untuk menelusuri ruang trajektori — tetapi setiap agen eksekusi RL yang serius di-benchmark terhadap, dan sering kali diinisialisasi dari, solusi AC. Kedua, model dampak-harga neural: mengganti h(v)=ηvh(v) = \eta v dengan fungsional terpelajar dari keadaan order book, sembari mempertahankan logika penjadwalan mean-variance di atasnya. Kedua sekuel itu tak masuk akal tanpa mengetahui persis apa baseline linier-Gaussian itu dan mengapa ia berbentuk demikian.

Yang perlu dibawa pulang

Model ini adalah tiga asumsi, satu persamaan selisih, dan satu angka. Dampak permanen linier (dipaksakan oleh no-manipulation), dampak temporer linier (aproksimasi yang Anda kalibrasi di sekitarnya), noise Brownian aritmetika. Optimum-nya menukar (trade off) varians inventaris dengan biaya dampak, seluruh strategi runtuh menjadi urgensi κ=λσ2/η\kappa = \sqrt{\lambda\sigma^2/\eta}, dan TWAP muncul sebagai kasus degenerat λ=0\lambda = 0 — yang merupakan fakta paling berguna dalam model, karena ia mengubah "haruskah kita meng-TWAP ini?" dari soal kebiasaan menjadi klaim yang dapat diperiksa tentang penghindaran risiko. Kalibrasi adalah pekerjaan sesungguhnya: σ\sigma itu mudah, η\eta adalah permainan faktor-2, γ\gamma adalah proyek riset, dan trajektori memaafkan ketiganya. Implementasikan dalam satu sore; habiskan sisa bulan itu untuk diagnostik regresi.

Referensi

  • 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.
Penafian: Informasi yang disediakan dalam artikel ini hanya untuk tujuan edukasi dan informasi serta tidak merupakan nasihat keuangan, investasi, atau trading. Trading mata uang kripto mengandung risiko kerugian yang signifikan.

Penulis

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

Selangkah Lebih Maju dari Pasar

Berlangganan newsletter kami untuk wawasan AI trading eksklusif, analisis pasar, dan pembaruan platform.

Kami menghormati privasi Anda. Berhenti berlangganan kapan saja.