Slippage sabitleri değil slippage eğrileri: canlı ticaretle temas ettiğinde ayakta kalan 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

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
Her işleme uygulanan tek bir sayı. Artan hasar sırasına göre üç başarısızlık modu:
- 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.
- 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.
- 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ı
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üş için görünmezdir.
M2: volatiliteye göre ölçeklenmiş
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 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ş — terimi, 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
Büyüklük terimi. emrinizin büyüklüğü, ilgili pencere boyunca piyasa hacmi, 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: , burada
— 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 '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 kuvveti olarak büyüdüğünü buldu — hem doğrusal hem de saf karekök formunu açıkça test edip reddederek 'yı benimsediler — kalıcı etki ise çı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 buldu, 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 'yı savunana kadar olarak kabul etmelisiniz. Önçarpan 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 bps, venue günlük hacmi V_d = \6Y = 0.75\delta = 0.5$:
| Emir büyüklüğü | 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 ve '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 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, için kabaca ±%30, 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; 'deki sürüklenme kendi başına bir tanı aracıdır (sabit katılım oranında yükselen , 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 ö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

'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 5–10 kat genişler. etki terimine doğrudan girer. Hacim de yükselir — bu naif olarak katılım oranını azaltır — ama paydadaki '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: bps, spread 1 bp, V_d = \6= 0.5 + 0.75 \times 150 \times \sqrt{0.0005} = 0.5 + 2.5 = 3.0$ bps.
- Kriz günü (LUNA, FTX düzeyinde): bps, spread 6 bps, V_d = \18= 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 '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 + ;
- M3: komisyonlar + yukarıdaki rejim çarpan tablosuyla uydurulmuş eğri , .
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 |

Liderlik tabloları arasındaki sıra korelasyonları (Kendall ): — bir sabit neredeyse hiçbir şeyi yeniden sıralamıyor, bu bir model değil, bir vergi. — M1'in ilk onundan altısı M3 altında ilk ondan çıkıyor ve M1'in şampiyonu +%61'den negatife düşüyor. — 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. '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: , spread , 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.
Yazarlar
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.