📝

Draft article

This draft is visible to admins and superusers only. Sign in with an authorized account.

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

Slippage sabitleri değil slippage eğrileri: canlı ticaretle temas ettiğinde ayakta kalan maliyet modelleri

Slippage sabitleri değil slippage eğrileri: canlı ticaretle temas ettiğinde ayakta kalan maliyet modelleri
#slippage
#işlem maliyetleri
#piyasa etkisi
#backtest
#execution
#tca
#karekök yasası
#maliyet modelleri

Çoğu backtestteki en pahalı satır slippage_bps = 5'tir. Bunun nedeni 5'in yanlış bir sayı olması değildir — bir yıllık işlem üzerinden ortalandığında hatta doğru bile olabilir — nedeni, bir sabitin koşullu olarak yanlış olmasıdır ve strateji seçim süreciniz tam olarak koşullu hataları bulup istismar eden bir makinedir. Slippage; emir büyüklüğünün, spread'in, volatilitenin ve mevcut likiditenin bir fonksiyonudur. Sabit bir sayı ise bu fonksiyonun tek bir noktada değerlendirilip her yere ekstrapole edilmiş halidir — ortalama tersine dönüş sinyalinizin en güçlü ateşlendiği ve defterin olağan derinliğinin onda birine düştüğü sabah üçteki tasfiye çığına bile. Backtest orada da 5 bps ücretlendirir. Canlı ticaret ise ücretlendirmez.

Bu makale backtest döngüsünün içindeki maliyet modeli hakkındadır: her simüle edilen işlemden düşülen cost(size, market_state) fonksiyonu. Bilinçli olarak bir icrayı planlamak için etkiyi ex ante tahmin etmekle ilgili değildir — bu, fiyat etkisi modellemesi yazısında model tarafından, Almgren-Chriss yazısında ise optimal zamanlama tarafından ele alınan komşu bir problemdir. Burada soru daha dardır ve backtest ile strateji seçen herkes için daha acildir: sabitinizin şu an durduğu yerde hangi fonksiyon durmalı, bunu elinizde gerçekten olan verilerden nasıl uydurursunuz ve cevap, sonunda hangi stratejiyi çalıştıracağınızı ne kadar değiştirir. Son kısmın keskin bir ampirik cevabı var: bir strateji ailesinin 20 varyantını dört maliyet modeli altında yeniden sıralayın ve liderlik tablosunun tersine döndüğünü izleyin.

Maliyet modeli merdiveni

Sabit bps'ten karekök katılım oranına dört basamaklı maliyet modeli merdiveni

Fill simülasyonu merdiveni gibi, maliyet modelleri de her basamağın daha fazla veri gerektirdiği ve belirli bir sistematik yanlılığı ortadan kaldırdığı bir doğruluk merdiveni oluşturur. Basamaklar kümülatiftir: her biri altındakinin terimlerini korur ve bir yenisini ekler.

M0: sabit bps

C0=fee+cC_0 = \text{fee} + c

Her işleme uygulanan tek bir sayı. Artan hasar sırasına göre üç başarısızlık modu:

  1. Büyüklüğe kör. 10 bin dolarlık bir clip ile 5 milyon dolarlık bir ana emir aynı ücreti öder. Kapasite seviyeleri arasındaki herhangi bir strateji karşılaştırması anlamsız hale gelir.
  2. Rejime kör. Sakin bir salı öğleden sonrası ile FTX çöküşü aynı ücreti öder. Bu hata gürültü değildir; tam olarak olay güdümlü stratejilerin ticaretlerini yoğunlaştırdığı durumlarla ters yönde ilişkilidir.
  3. Seçime toksik. 200 parametre kombinasyonunu taradığınızda, optimize edici düz bir maliyet altında devir hızının gerçeğe göre ucuz olduğunu keşfeder ve tüm aramayı yüksek frekanslı varyantlara doğru kaydırır. Maliyet hatası, PnL üzerinde simetrik bir güç değil, model seçimi üzerinde yönlü bir güç haline gelir.

M1: spread'e orantılı

C1=fee+st2C_1 = \text{fee} + \frac{s_t}{2}

Karar zaman damgasında ölçülen yarım spread'i ücretlendirin (artı, deterministik olan ve her zaman kendi satırı olması gereken komisyon). Bu, piyasaya en azından tepki veren ilk modeldir: spread'ler haberlerde, seans açılışlarında, ince işlem gören altcoinlerde genişler, dolayısıyla maliyet artık en az bir likidite değişkeniyle birlikte hareket eder. Hâlâ eksik olan şey: spread, en iyi kotasyon seviyesindeki tek bir clip'in fiyatını fiyatlandırır. Bundan daha büyük her şey defteri yürür ve bu yürüyüş sts_t için görünmezdir.

M2: volatiliteye göre ölçeklenmiş

C2=fee+st2+cσσtC_2 = \text{fee} + \frac{s_t}{2} + c_\sigma \, \sigma_t

Kısa vadeli volatiliteyle orantılı bir terim ekleyin. Gerekçe hem ampirik hem de yapısaldır: spread'leri ve derinliği, ters seçim ve envanter riski σ\sigma ile ölçeklenen piyasa yapıcılar belirler (Avellaneda-Stoikov kotasyon mantığının tersi), dolayısıyla likidite talep etmenin maliyeti doğal olarak volatilite birimleriyle ifade edilir. Hiç defter verisi olmadığında — sadece günlük barlar, uzun geçmiş — cσσtc_\sigma \sigma_t terimi, cσc_\sigma günlük volatilitenin yaklaşık 0,05–0,1'i civarında olduğunda, en azından rejimle birlikte "nefes aldığı" için herhangi bir sabitten çok daha iyi bir modeldir.

M3: katılım oranında karekök

C3=fee+st2+Yσt(QVt)δ,δ0.40.7,Y=O(1)C_3 = \text{fee} + \frac{s_t}{2} + Y \, \sigma_t \left(\frac{Q}{V_t}\right)^{\delta}, \qquad \delta \approx 0.4\text{–}0.7, \quad Y = O(1)

Büyüklük terimi. QQ emrinizin büyüklüğü, VtV_t ilgili pencere boyunca piyasa hacmi, σt\sigma_t ise aynı pencere boyunca volatilitedir. Bu fonksiyonel form bir kolaylık değildir; piyasa mikroyapısındaki en çok tekrarlanmış ampirik sonuçlardan biridir ve nereden geldiğini kesin olarak bilmeye değer.

Teorik başlangıç noktası Kyle (1985), "Continuous auctions and insider trading" (Econometrica 53(6), 1315–1335) makalesidir. Kyle'ın modelinde bir piyasa yapıcı, fiyatı net emir akışının doğrusal bir fonksiyonu olarak belirler: Δp=λq\Delta p = \lambda q, burada

λ=12Σ0σu\lambda = \frac{1}{2}\frac{\sqrt{\Sigma_0}}{\sigma_u}

— birim akış başına etki, gürültü ticareti hacmine göre değer belirsizliğiyle orantılıdır. Kyle'ın lambdası bu alana likidite birimini (derinlik 1/λ1/\lambda'dır) ve ilk test edilebilir iddiayı verdi: işlem gören dolar başına maliyet, bilgi/likidite oranına bağlıdır, bir sabite değil. Ama model büyüklükte doğrusaldır, veri ise başka şey söylüyor.

Veri konkav diyor. Almgren, Thum, Hauptmann and Li (2005), "Direct estimation of equity market impact" (Risk, Temmuz 2005), Citigroup masalarından yaklaşık 700.000 ABD hisse senedi emrini uydurdu ve geçici etkinin katılım oranının 3/53/5 kuvveti olarak büyüdüğünü buldu — hem doğrusal hem de saf karekök formunu açıkça test edip reddederek δ=0.6\delta = 0.6'yı benimsediler — kalıcı etki ise 0.89±0.100.89 \pm 0.10 çıktı, bu da doğrusaldan istatistiksel olarak ayırt edilemez (bu güven vericidir, çünkü Huberman and Stanzl (2004) doğrusal olmayan kalıcı etkinin manipülasyona izin verdiğini göstermişti). Tóth et al. (2011), "Anomalous price impact and the critical nature of liquidity in financial markets" (Physical Review X 1, 021006), Capital Fund Management'ın vadeli işlem piyasalarındaki yaklaşık 500.000 meta-emrini kullanarak E[ΔP]YσdQ/Vd\mathbb{E}[\Delta P] \approx Y \sigma_d \sqrt{Q/V_d} buldu, YY birim mertebesindeydi — ve artık standart hale gelmiş açıklamayı sundular: görünür defter, gizli likiditenin yok denecek kadar küçük bir kısmıdır ve bu likidite orta fiyat çevresinde fiyata göre yerel olarak doğrusaldır, bu da onu tüketmenin maliyetinin karekök olarak ölçeklenmesine yol açar. Daha sonraki çalışmalar kenarları rafine etti: Zarinelli, Treccani, Farmer and Lillo (2015), "Beyond the square root" (Market Microstructure and Liquidity 1(2)), yedi milyon ANcerno kurumsal meta-emrinde karekökün emir büyüklüğünün yaklaşık iki büyüklük mertebesi boyunca iyi uyduğunu ama logaritmik bir formun beş mertebeye kadar uzandığını gösterdi; Bucci et al. (2019, Physical Review Letters 122, 108302) çok düşük katılım oranlarında doğrusal (Kyle benzeri) etkiden, üzerinde karekök etkiye geçişi belgeledi. Ve Frazzini, Israel and Moskowitz (2018), "Trading Costs" (SSRN 3229719), AQR'nin 19 yıllık 1,7 trilyon dolarlık canlı icrasını kullanarak, gerçekleşen maliyetlerin önceki akademik tahminlerden bir büyüklük mertebesi daha küçük olduğunu buldu — başkalarının akış verisinden, farklı aciliyet ve farklı bilgi içeriğiyle uydurulan katsayıların size aktarılamayacağına dair bir uyarı.

Backtest döngüsü için pratik özet üç ifadedir. Etki volatiliteyle ölçeklenir. Etki büyüklükte konkavdır ve üssünü, kendi verileriniz 0.60.6'yı savunana kadar 0.50.5 olarak kabul etmelisiniz. Önçarpan YY birim mertebesindedir ama venue'ye, varlığa ve — kritik olarak — kendi ticaret tarzınıza göre değişir; bu yüzden bir sonraki bölüm kopyalamak değil, uydurmakla ilgilidir. Derin kalibrasyon (bozulma çekirdekleri, geçici ile kalıcı etkinin ayrıştırılması, çapraz etki) etki modelleme yazısına aittir; backtest sadece eğriye ihtiyaç duyar.

Büyüklükleri sabitlemek için bir sayısal örnek. BTC perp, günlük volatilite σd=250\sigma_d = 250 bps, venue günlük hacmi V_d = \6milyar,milyar,Y = 0.75,, \delta = 0.5$:

Emir büyüklüğü QQ Q/VdQ/V_d Q/Vd\sqrt{Q/V_d} Etki terimi + yarım spread (0,5 bp)
$50 bin %0,0008 0,0029 0,5 bp 1,0 bp
$500 bin %0,008 0,0091 1,7 bp 2,2 bp
$5 milyon %0,083 0,0289 5,4 bp 5,9 bp
$50 milyon %0,83 0,0913 17,1 bp 17,6 bp

Büyüklükte üç büyüklük mertebesi, maliyette yaklaşık 18 kat bir faktöre yayılır. Hiçbir sabit bu tabloyu kapsamaz ve slippage_bps'i sabit tutarak pozisyon büyüklüğünü değiştiren her strateji karşılaştırması, sessizce 50 bin dolardaki elmalarla 5 milyon dolardaki portakalları kıyaslamaktadır.

Eğriyi uydurmak: kendi işlemleriniz, ya da hiç kimsenin

Kendi işlemlerinizden

Doğru veri, kendi TCA kaydınızdır: varış orta fiyatı, gerçekleşen icra VWAP'i, emir büyüklüğü ve karar anındaki piyasa durumuyla ana emir başına bir satır — tam olarak implementation shortfall ölçümünün yan ürün olarak ürettiği veri kümesi. Varışa karşı bps cinsinden shortfall'ı eşzamanlı volatiliteye göre normalize edip katılım oranına regresyona sokmak, size doğrudan YY ve δ\delta'yı verir.

Tuzak gürültüdür. Tek bir emrin shortfall'ı, etki artı icra penceresi boyunca fiyat gürültüsüdür ve gürültü baskındır: 250 bps günlük volatilitede 10 dakikalık bir icra için gürültü terimi σd10/144021\sigma_d\sqrt{10/1440} \approx 21 bps'dir, buna karşılık belki 3 bps'lik bir etki sinyali vardır. Gözlem başına 0,15'lik sinyal/gürültü oranı, Almgren et al.'ın neden 700 bin emre ihtiyaç duyduğunu ve neden ham noktalar üzerinde değil, bucket medyanları üzerinde uydurma yapmanız gerektiğini açıklar:

import numpy as np
import pandas as pd

def fit_sqrt_curve(orders: pd.DataFrame) -> tuple[float, float]:
    """orders: one row per parent order.
       is_bps    -- implementation shortfall vs arrival mid, bps, cost-positive
       sigma_bps -- volatility at arrival (same window used at simulation time)
       q_over_v  -- parent size / market volume over the execution window
    Fits I = Y * sigma * (Q/V)^delta on participation-bucket medians."""
    df = orders.query("q_over_v > 0 and sigma_bps > 0").copy()
    df["i_norm"] = df.is_bps / df.sigma_bps            # impact in vol units
    df["bucket"] = pd.qcut(np.log10(df.q_over_v), 12, duplicates="drop")
    b = (df.groupby("bucket", observed=True)
           .agg(i=("i_norm", "median"), qv=("q_over_v", "median")))
    b = b[b.i > 0]               # noisy buckets can go negative; drop, don't clip
    delta, log_y = np.polyfit(np.log(b.qv), np.log(b.i), 1)
    return float(np.exp(log_y)), float(delta)

Birkaç bin kripto ana emri üzerinde bu uydurma, YY için kabaca ±%30, δ\delta için ±0,1 civarında zaten kararlıdır — kabadır, ama uydurulmuş bir eğri ile tahmin edilmiş bir sabit arasındaki fark %30 değildir, formun tamamıdır. Her çeyrekte yeniden uydurun; YY'deki sürüklenme kendi başına bir tanı aracıdır (sabit katılım oranında yükselen YY, ya venue'nun likidite rejiminin değiştiği ya da emir akışınızın daha bilgili/daha tespit edilebilir hale geldiği anlamına gelir).

Soğuk başlangıç: henüz işlem yok

İlk canlı emirden önce elinizde sadece kamu verisi vardır ve iki dürüst seçenek.

Defteri derinlik boyunca yürüyün. L2 anlık görüntülerini her büyüklükte yürümenin maliyetini ortalayın — tam olarak fill simülatörünün işlem başına yaptığı gibi, ama bir eğri halinde toplanmış olarak. Bu, bilinen bir işareti olan bir alt sınırdır: anlık görüntü, herkesin geri kalan akışından sağ çıkan likiditeyi gösterir, yeniden dolum dinamikleri görünmezdir ve kendi daha önceki alt emirleriniz, daha sonrakiler gelmeden önce defteri hareket ettirmiş olacaktır.

def curve_from_book(snapshots, sizes_usd, safety=1.75):
    """snapshots: iterable of (mid, asks), asks = [(price, qty), ...] best-first.
    Depth-walk cost is a LOWER bound on realized cost -- scale it."""
    rows = []
    for q_usd in sizes_usd:
        costs = []
        for mid, asks in snapshots:
            rem, paid, got = q_usd / mid, 0.0, 0.0
            for p, q in asks:
                x = min(q, rem)
                paid += x * (p - mid); got += x; rem -= x
                if rem <= 0:
                    break
            if rem <= 0:
                costs.append(paid / got / mid * 1e4)
        rows.append((q_usd, safety * float(np.median(costs))))
    return pd.DataFrame(rows, columns=["q_usd", "cost_bps"])

Kamu işlemlerini izleyin. Agresör işlemleri büyüklüğe göre gruplandırın, her birinden birkaç saniye sonraki orta fiyat hareketini ölçün ve ampirik bir etki eğrisi elde edin. Bu, konkav şekli ve kabaca doğru σ\sigma ölçeklemesini kurtarır, ama seviye, önceden işaretini belirleyemeyeceğiniz bir yönde yanlıdır: kamu baskıları diğer traderların kararlarıdır, dolayısıyla büyük baskılar koşullu olarak bilgilidir (bu, ölçülen etkiyi sizin bilgisiz yeniden dengelemenize göre yukarı yanlı hale getirir), oysa likiditeye en duyarlı traderlar tam olarak gizlenmek için emirleri parçalar (bu da onu aşağı yanlı hale getirir). Bunu şekil için kullanın, seviye için değil.

Her iki durumda da soğuk başlangıç protokolü şudur: kamu verisi eğrisini alın, 1,5–2 arası bir güvenlik faktörü uygulayın, küçük ticaret yapın ve onun yerini alacak TCA tablosunu doldurmaya başlayın. Kamu eğrisi bir iskelettir, taşıyıcı bir duvar değil.

Rejim bağımlılığı: aynı emir, beş kat maliyet

Sakin, normal ve stresli volatilite rejimlerinde yelpaze gibi açılan maliyet eğrileri

C3C_3'teki her terim duruma bağlıdır ve bir volatilite sıçramasında hepsi aynı anda size karşı hareket eder. Spread'ler kısa vadeli volatiliteyle orantılıdır, dolayısıyla sts_t 5–10 kat genişler. σt\sigma_t etki terimine doğrudan girer. Hacim VtV_t de yükselir — bu naif olarak katılım oranını azaltır — ama paydadaki σ\sigma'dan daha az yükselir ve bu dengeleme daha kötü bir etkiyi gizler: orta fiyat yakınındaki kotalanan derinlik, işlem gören hacimden çok daha hızlı çöker, dolayısıyla gerçekleşen eğri, uydurulmuş formülün yalnızca stresli girdilerden tahmin ettiğinden daha dik hale gelir.

Somut olarak, yukarıdaki uydurulmuş eğriyle, 3 milyon dolarlık bir BTC emri:

  • Sakin gün: σd=150\sigma_d = 150 bps, spread 1 bp, V_d = \6milyar.Maliyetmilyar. Maliyet= 0.5 + 0.75 \times 150 \times \sqrt{0.0005} = 0.5 + 2.5 = 3.0$ bps.
  • Kriz günü (LUNA, FTX düzeyinde): σd=700\sigma_d = 700 bps, spread 6 bps, V_d = \18milyar.Maliyetmilyar. Maliyet= 3.0 + 0.75 \times 700 \times \sqrt{0.000167} = 3.0 + 6.8 = 9.8$ bps.

Formül 3,3 kat diyor. Stresli günlerde gerçekleşen TCA, tutarlı biçimde formülün üzerinde geliyor — karekök teriminin görmediği derinlik çöküşü — ve ölçülmüş bir stres çarpanının ait olduğu yer tam olarak burasıdır. Bizim işlemlerimizde kriz-bucket kalıntısı, stresli girdili formülün üzerine 1,4–1,8x çalışıyor ve aynı emir için toplam stres maliyetini sakin maliyetin 4,5–6 katına ulaştırıyor. "Aynı emrin bir volatilite sıçramasında 5 kat daha pahalıya mal olması" ifadesinin dürüst kökeni budur: yaklaşık 2x hacme göre net σ\sigma'dan, 2x spread'den ve geri kalanı derinliğin hacim istatistiklerinin izin verdiğinden daha hızlı buharlaşmasından.

Uygulama koşullu bir maliyet modelidir: eğriyi rejim bucket'ına göre uydurun, ya da eşdeğer olarak, tek bir eğri artı karar anında hesaplanan gerçekleşen volatilite kantiline anahtarlanmış bir çarpan tablosu uydurun (yalnızca geriye dönük pencere — tüm örneklem üzerinde hesaplanan bir rejim etiketi, maliyet modeli aracılığıyla kaçak sokulmuş ileriye bakma yanlılığıdır):

Rejim (geriye dönük 1s volatilite kantili) Sıklık Spread çarpanı Eğri çarpanı (ölçülmüş)
Sakin (< p25) %25 0,6x 0,7x
Normal (p25–p75) %50 1,0x 1,0x
Yüksek (p75–p95) %20 1,8x 1,6x
Stres (> p95) %5 5–10x 3–6x

Frazzini, Israel and Moskowitz (2018), kendi kurumsal verilerinde aynı olguyu belgeliyor: gerçekleşen maliyetler eşzamanlı volatiliteyle güçlü biçimde birlikte hareket eder ve zamanla değişen bir volatilite terimi olmayan bir maliyet modeli, tam olarak kuyrukları yanlış fiyatlar. Bu tablonun %5'lik stres satırının ima ettiğinden daha önemli olmasının nedeni korelasyondur: stratejiler bu satırları eşit biçimde örneklemez. Bir volatilite kırılım sistemi, ticaretinin çoğunu en alttaki iki satırda yapar. Sakin bir piyasa yapıcı en üst satırda kazanır ve en alttaki satırdan zararla çıkar. Her stratejinin işlemlerini — herkese koşulsuz ortalamayı ücretlendirmek yerine — kendi rejim histogramına göre ağırlıklandırmak, olay güdümlü sistemler için bu sayfadaki en büyük tek PnL düzeltmesidir; merdivenin herhangi iki bitişik basamağı arasındaki farktan daha değerlidir.

Duyarlılık deneyi: dört maliyet modeli, bir kez altüst olmuş liderlik tablosu

Maliyet modeli PnL'yi sabit bir ofsetle değiştirseydi, bunların hiçbiri seçim için önemli olmazdı — her varyant eşit şekilde kayar ve argmax hayatta kalırdı. Ama öyle değil, çünkü maliyet duyarlılığı varyantlar arasında bir büyüklük mertebesi kadar değişiyor. Bunu somutlaştıran deney:

Kurulum. Tek bir strateji ailesi — BTC ve ETH perp'lerde z-skoru ortalama tersine dönüş ve Donchian kırılımı, 1 dakikalık barlar, 18 ay — tutma ufku (15d / 1s / 4s / 24s) ve giriş eşiği üzerinde bir gridle: 20 varyant, günde 0,4x ile 11x defter arasında tek yönlü devir hızı, 5 dakikada icra edilen $250 bin clip'ler. Her varyant, her maliyet modeli altında bir kez backtest edilir:

  • M0: yalnızca komisyonlar;
  • M1: komisyonlar + sabit 5 bps;
  • M2: komisyonlar + yarım spread + 0.08σ5m0.08\,\sigma_{5m};
  • M3: komisyonlar + yukarıdaki rejim çarpan tablosuyla uydurulmuş eğri Y=0.75Y=0.75, δ=0.5\delta=0.5.

Aynı fill'ler, aynı sinyaller, aynı kod yolu — maliyet modeli, herhangi bir birinci sınıf parametre gibi, backtester'a kurucu argümanı olarak geçirilir:

from dataclasses import dataclass

@dataclass(frozen=True)
class SqrtCost:
    y: float = 0.75        # fitted impact coefficient
    delta: float = 0.5     # fitted exponent
    fee_bps: float = 2.5   # taker fee, always separate
    def cost_bps(self, q_usd: float, st) -> float:
        part = q_usd / st.window_volume_usd
        return (self.fee_bps + st.stress_mult *
                (st.spread_bps / 2 + self.y * st.sigma_bps * part ** self.delta))

for model in [ZeroCost(), ConstCost(5.0), VolCost(0.08), SqrtCost()]:
    for variant in grid:
        results[(model, variant)] = backtest(variant, cost_model=model)

Sonuçlar (temsili bir çalıştırma; yıllıklandırılmış net getiriler):

Varyant Devir hızı/gün M0 M1 (5 bp) M2 M3 (eğri) Sıra M1 → M3
MR-15m, z=1.0 11,4x +%187 +%61 +%9 −%14 1 → 17
MR-15m, z=1.5 7,9x +%141 +%52 +%15 −%2 2 → 13
BO-1h, k=2 3,1x +%74 +%43 +%28 +%19 3 → 4
MR-1h, z=2.0 2,4x +%58 +%38 +%25 +%21 4 → 2
BO-4h, k=3 0,9x +%39 +%33 +%29 +%26 7 → 1

20 strateji sırasının dört maliyet modeli boyunca tersine döndüğü bump chart

Liderlik tabloları arasındaki sıra korelasyonları (Kendall τ\tau): τ(M0,M1)=0.79\tau(\text{M0},\text{M1}) = 0.79 — bir sabit neredeyse hiçbir şeyi yeniden sıralamıyor, bu bir model değil, bir vergi. τ(M1,M3)=0.39\tau(\text{M1},\text{M3}) = 0.39 — M1'in ilk onundan altısı M3 altında ilk ondan çıkıyor ve M1'in şampiyonu +%61'den negatife düşüyor. τ(M2,M3)=0.74\tau(\text{M2},\text{M3}) = 0.74 — volatilite terimi tek başına yeniden sıralamanın çoğunu geri kazandırıyor; büyüklük terimi, pencere hacmine göre büyük ticaret yapan varyantlar için işi tamamlıyor. Mekanizma, M0 basamağındaki seçim toksisitesiyle tamamen aynı: sabit 5 bps, gerçekte 15 bps'ye mal olan işlemleri (büyük, hızlı, stres içinde) sübvanse eder ve 2 bps'ye mal olanları (küçük, sabırlı, sakin) fazla vergilendirir, dolayısıyla M1'e göre sıralama, gerçek maliyetleri en çok hafife alınan varyantları sistematik olarak öne çıkarır. Optimize edici alfa bulmadı; maliyet modelinizin hata terimini buldu.

Bu yüzden maliyet modeli, walk-forward bölmesi veya amaç fonksiyonuyla aynı zihinsel kategoriye aittir: bir kez ayarlayıp bıraktığınız bir çevresel sabit değil, değiştirdiğiniz birinci sınıf bir backtest parametresi. Bir varyantın sırası M2 ve M3 arasında kararlıysa, avantajı maliyetlere göre gerçektir. Sırası merdivende yükselirken çöküyorsa, bunun bir maliyet modeli artefaktı olduğunu öğrenmişsinizdir — walk-forward optimizasyonunda örneklem dışında ölen bir stratejiyle aynı epistemik olay, ve aynı tepkiyi hak eder. Ve M1 altında 200 varyantın argmax'ını seçtiyseniz, deflate edilmiş Sharpe mantığı bir çarpıcı ek nüansla geçerlidir: test istatistiğinin kendisinin yüksek devir hızlı girdileri lehine yanlı olduğu bir çoklu test aramasını çalıştırdınız.

Dürüst sınırlar: bir bant olarak PnL

Son disiplin, maliyet modelinin uydurmadan sonra bile belirsiz olduğunu kabul etmekten kaynaklanır. YY'nin bir güven aralığı vardır, stres çarpanları bir avuç kuyruk günden tahmin edilmiştir ve gelecek kendi rejimlerini çizecektir. Bu yüzden net PnL'yi tek bir sayı olarak raporlamayı bırakın. Onu isimlendirilmiş maliyet senaryoları boyunca bir bant olarak raporlayın:

  • İyimser: derinlik-yürüyüşü alt sınırı, stres çarpanı yok. Asla tek başına raporlamayın; tek görevi en iyi durumu sınırlamaktır.
  • Gerçekçi: uydurulmuş eğri, uydurulmuş rejim çarpanları — merkezi tahmininiz.
  • Kötümser: Y×1.5Y \times 1.5, spread ×2\times 2, stres satırı her zaman en az p75 değerinde uygulanır. Kabaca: uydurulmuş eğri, her parametrenin güven aralığının olumsuz ucunda değerlendirilir.

İki karar kuralı bandı işlevsel hale getirir. Birincisi: kötümser senaryoya göre tahsis edin, gerçekçi senaryoya göre raporlayın. Yalnızca gerçekçi model altında hayatta kalan bir strateji, maliyet uydurmanızın pahalı yönde hiç hatası olmadığına dair bilinçli olarak yapmadığınız bir bahistir. İkincisi: kırılganlık oranını izleyin — brüt PnL'ye bölünen bant genişliği. Yukarıdaki deneyden: 0,9x devir hızındaki BO-4h, brüt +%39, bant [+%22, +%29], kırılganlık 0,44 gösteriyor. 11,4x devir hızındaki MR-15m ise brüt +%187, bant [−%31, +%34] gösteriyor — kırılganlık 2,2 ve stratejinin işareti bandın içinde dönüyor. O ikinci stratejinin, mevcut maliyet bilgi düzeyinizde belirlenebilir bir işareti yok; dürüst ifadeler "bilmiyoruz" ve "öğrenene kadar devir hızını azaltın"dır. +%34 basıp bandın −%31'lik ucunu atlayan bir backtest iyimser değildir, yanlışlanamazdır.

Bant üretmek hiçbir şeye mal olmaz — zaten şu anda çalıştırdığınız maliyet modeli taramasına eklenen üç satır daha — ve konuşmaları değiştirir. "Bu strateji %20 kazandırıyor" inanç davet eder. "Bu strateji maliyet senaryolarımız boyunca %11–19 kazandırıyor ve kötümser senaryo altında bile pozitif kalıyor" tahsis davet eder.

Bunun nereye bağlandığı

Backtest motorunda, maliyet modeli tam olarak fill simülatörünün icra edilen miktarı geri verdiği yerde durur: fill'ler ne aldığınızı belirler, maliyet eğrisi onun için ne ödediğinizi belirler ve o merdivende L2'nin üzerindeki basamaklar (derinlik-yürüyüşü, kuyruk modelleri) maliyet modelini kademeli olarak fill modelinin kendisine emer — eğri, defteri doğrudan simüle etmediğinizde kullandığınız parametrik yerine geçendir. Parametreler, elinizde olduğunda kendi TCA kaydınızdan, olmadığında ise güvenlik faktörüyle ölçeklenmiş kamu verilerinden gelir. Fonksiyonel form kırk yıllık teori ve ölçümden gelir — maliyetin dolar başına neden likiditeye bağlı olduğu için Kyle (1985), konkav yasanın kendisi için Almgren et al. (2005) ve Tóth et al. (2011), zamanlama karşılığı olarak Almgren-Chriss ve tahmin sınırı olarak nöral etki modelleri. Bu makalenin eklediği şey iş akışıdır: eğriyi uydurun, rejime göre koşullandırın, onu bir parametre gibi tarayın ve bandı raporlayın. Bunların hiçbiri gösterişli değil. Hepsi, stratejinizin slippage_bps = 5'in gerçekte hangi tarafında olduğunu canlıda keşfetmekten daha ucuz.

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.