📝

Draft article

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

← Maqolalarga qaytish
July 23, 2026
5 daqiqa o'qish

Slippage konstantalari emas, slippage egri chiziqlari: jonli savdo bilan aloqaga kirganda omon qoladigan xarajat modellari

Slippage konstantalari emas, slippage egri chiziqlari: jonli savdo bilan aloqaga kirganda omon qoladigan xarajat modellari
#slippage
#tranzaksiya xarajatlari
#market impact
#backtest
#ekzekutsiya
#tca
#kvadrat ildiz qonuni
#xarajat modellari

Ko'pchilik backtestlardagi eng qimmat qator — bu slippage_bps = 5. Bu 5 raqami noto'g'ri bo'lgani uchun emas — bir yillik fill'lar bo'yicha o'rtachalashtirilsa, u hatto to'g'ri ham bo'lishi mumkin — balki konstanta shartli ravishda noto'g'ri bo'lgani uchun, sizning strategiya tanlash jarayoningiz esa aynan shartli xatolarni topib, ulardan foydalanadigan mashina. Slippage — order hajmi, spred, volatillik va mavjud likvidlikning funksiyasi. Konstanta esa shu funksiyaning bitta nuqtada baholanib, keyin hamma joyga, jumladan sizning mean-reversion signalingiz eng kuchli yonib, order kitobi odatdagidan o'n baravar yupqa bo'lgan tunning soat uchidagi likvidatsiya kaskadiga ham ekstrapolyatsiya qilingan ko'rinishi. Backtest u yerda ham 5 bps yechib oladi. Jonli savdo esa bunday qilmaydi.

Ushbu maqola backtest tsikli ichidagi xarajat modeli haqida: har bir simulyatsiya qilingan bitimdan ayiriladigan cost(size, market_state) funksiyasi haqida. Bu ataylab impact'ni ekzekutsiyani rejalashtirish uchun oldindan bashorat qilish haqida emas — bu yondosh masala bo'lib, model tomondan price impact modellashtirish maqolasida, optimal jadvallash tomondan esa Almgren-Chriss maqolasida yoritilgan. Bu yerda savol torroq va, backtest orqali strategiya tanlaydigan har bir kishi uchun, dolzarbroq: sizning konstantangiz turgan joyda qanday funksiya turishi kerak, uni haqiqatan ham qo'lingizdagi ma'lumotlardan qanday moslash mumkin va bu javob oxir-oqibat qaysi strategiyani ishga tushirishingizga qay darajada ta'sir qiladi. Oxirgi qism aniq empirik javobga ega: bitta strategiya oilasining 20 ta variantini to'rtta xarajat modeli ostida qayta reytingga soling va reyting jadvali qanday teskari aylanib ketishini kuzating.

Xarajat modeli zinapoyasi

Doimiy bps'dan kvadrat ildiz ishtirokigacha to'rt bosqichli xarajat modeli zinapoyasi

Fill simulyatsiyasi zinapoyasi kabi, xarajat modellari ham har bir bosqichi ko'proq ma'lumot talab qiladigan va bitta aniq tizimli xatoni bartaraf etadigan ishonchlilik zinapoyasini tashkil qiladi. Bosqichlar kumulyativ: har biri o'zidan pastdagi hadlarni saqlab, bittasini qo'shadi.

M0: doimiy bps

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

Bitta raqam, har bir bitimga qo'llaniladi. Uchta muvaffaqiyatsizlik rejimi, zarar oshib boruvchi tartibda:

  1. Hajmga ko'r. 10klikkesimva10k'lik kesim va 5M'lik ota-order bir xil to'laydi. Sig'im darajalari bo'yicha har qanday strategiya taqqoslash ma'nosizdir.
  2. Rejimga ko'r. Tinch seshanba tushdan keyin va FTX qulashi bir xil to'laydi. Bu xato shovqin emas; u aynan event-driven strategiyalar o'z savdolarini to'playdigan holatlarga qarama-qarshi korrelyatsiyalangan.
  3. Tanlovga zaharli. 200 ta parametr kombinatsiyasini sanab chiqqaningizda, optimallashtiruvchi tekis xarajat ostida aylanma haqiqatga nisbatan arzon ekanini kashf etadi va butun izlanishni yuqori chastotali variantlar tomon suradi. Xarajat xatosi PnL'ga nisbatan simmetrik kuch emas, balki model tanlashga yo'nalgan kuchga aylanadi.

M1: spredga proportsional

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

Qaror qabul qilish vaqt belgisida o'lchangan yarim-spredni yechib oling (plyus komissiya, u deterministik bo'lib, doim alohida qator bo'lishi kerak). Bu bozorga umuman javob beradigan birinchi model: spredlar yangiliklarda, sessiya ochilishlarida, yupqa altkoinlarda kengayadi, shuning uchun xarajat endi hech bo'lmaganda bitta likvidlik o'zgaruvchisi bilan birga harakatlanadi. U hali nimani o'tkazib yuboradi: spred faqat bitta top-of-book kesimining bitimini narxlaydi. Undan kattaroq har qanday narsa kitob bo'ylab yuradi, va bu yurish sts_t uchun ko'rinmasdir.

M2: volatillikka moslashtirilgan

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

Qisqa muddatli volatillikka proportsional had qo'shing. Bu asoslash ham empirik, ham strukturaviy: spredlar va chuqurlik market meyker'lar tomonidan belgilanadi, ularning noxush tanlov va zaxira riski σ\sigma ga proportsional o'zgaradi (Avellaneda-Stoikov kvota mantig'ini teskari yo'nalishda ishlatgandek), shuning uchun likvidlik talab qilish xarajati tabiiy ravishda volatillik birliklarida ifodalanadi. Sizda umuman order kitobi ma'lumoti bo'lmasa — kunlik barlar, uzoq tarix — cσc_\sigma taxminan 0.05–0.1 kunlik voldan bo'lgan cσσtc_\sigma \sigma_t har qanday konstantadan sezilarli darajada yaxshiroq model, chunki u hech bo'lmaganda rejim bilan birga "nafas oladi".

M3: ishtirokka nisbatan kvadrat ildiz

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)

Hajm hadi. QQ — order hajmingiz, VtV_t — tegishli oyna davomidagi bozor hajmi, σt\sigma_t — o'sha davr davomidagi volatillik. Bu funksional shakl qulaylik uchun emas; bu bozor mikrostrukturasidagi eng ko'p takrorlangan empirik natijalardan biri, va uning qayerdan kelib chiqqanini aniq bilish foydali.

Nazariy boshlang'ich nuqta — Kyle (1985), "Continuous auctions and insider trading" (Econometrica 53(6), 1315–1335). Kyle modelida market meyker narxni sof order oqimining chiziqli funksiyasi sifatida belgilaydi, Δp=λq\Delta p = \lambda q, bunda

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

— shovqinli savdo hajmiga nisbatan qiymat noaniqligiga proportsional bo'lgan oqim birligiga to'g'ri keladigan impact. Kyle lambdasi sohaga likvidlik birligini berdi (chuqurlik — 1/λ1/\lambda) va uning birinchi tekshiriladigan da'vosini: savdo qilingan dollarga to'g'ri keladigan xarajat konstantaga emas, balki axborot va likvidlik nisbatiga bog'liq. Ammo model hajm bo'yicha chiziqli, ma'lumotlar esa boshqacha deydi.

Ma'lumotlar botiq deydi. Almgren, Thum, Hauptmann va Li (2005), "Direct estimation of equity market impact" (Risk, iyul 2005) Citigroup deskalaridan taxminan 700,000 ta AQSh aksiya orderini moslab, vaqtinchalik impact ishtirok darajasiga 3/53/5 darajasida o'sishini aniqladilar — ular chiziqli va sof kvadrat ildiz modellarini aniq tekshirib rad etib, δ=0.6\delta = 0.6 ni tanladilar — permanent impact esa 0.89±0.100.89 \pm 0.10 chiqdi, bu statistik jihatdan chiziqlidan farqlanmaydi (bu tinchlantiruvchi natija, chunki Huberman va Stanzl (2004) chiziqli bo'lmagan doimiy impact manipulyatsiyaga yo'l qo'yishini ko'rsatgan edi). Tóth va boshqalar (2011), "Anomalous price impact and the critical nature of liquidity in financial markets" (Physical Review X 1, 021006), Capital Fund Management'ning fyuchers bozorlaridagi deyarli 500,000 ta metaorderidan foydalanib, E[ΔP]YσdQ/Vd\mathbb{E}[\Delta P] \approx Y \sigma_d \sqrt{Q/V_d} ni YY bir tartibda bo'lgan holda aniqladilar — va endi standart bo'lgan tushuntirishni taqdim etdilar: ko'rinadigan kitob yashirin likvidlikning juda kichik bir qismi bo'lib, u mid atrofida lokal ravishda narxga nisbatan chiziqli, bu esa uni yeb bitirish xarajati kvadrat ildiz sifatida o'sishiga olib keladi. Keyingi ishlar chetlarni aniqlashtiradi: Zarinelli, Treccani, Farmer va Lillo (2015), "Beyond the square root" (Market Microstructure and Liquidity 1(2)), yetti million ANcerno institutsional metaorderida kvadrat ildiz order hajmining taxminan ikki tartibida yaxshi mos kelishini, ammo logarifmik shakl esa beshta tartibga cho'zilishini ko'rsatdi; Bucci va boshqalar (2019, Physical Review Letters 122, 108302) juda kichik ishtirokdagi chiziqli (Kyle-simon) impact'dan undan yuqorida kvadrat ildizga o'tishni hujjatlashtirdilar. Frazzini, Israel va Moskowitz (2018) esa, "Trading Costs" (SSRN 3229719), AQR'ning 19 yillik $1.7 trillionlik jonli ekzekutsiyalaridan foydalanib, real xarajatlar ilgarigi akademik baholardan bir tartib kichikroq ekanini aniqladilar — bu boshqalarning oqimida moslashtirilgan koeffitsientlar, boshqacha shoshilinchlik va boshqacha axborot mazmuni bilan, sizniki uchun o'tkazilmasligi haqidagi ogohlantirish.

Backtest tsikli uchun amaliy xulosa uchta bayonotdan iborat. Impact volatillik bilan miqyoslanadi. Impact hajm bo'yicha botiq, ko'rsatkichini o'z ma'lumotlaringiz 0.60.6ni ko'rsatmaguncha 0.50.5 deb qabul qilish kerak. YY prefaktori bir tartibda, ammo maydon, aktiv va — muhimi — o'zingizning savdo uslubingizga qarab o'zgaradi, shuning uchun keyingi bo'lim uni ko'chirish emas, balki moslashtirish haqida. Chuqur kalibrlash (parchalanish yadrolari, vaqtinchalik va doimiy parchalanish, kesishuvchi impact) impact modellashtirish maqolasiga tegishli; backtestga esa faqat egri chiziq kerak.

Kattaliklarni aniqlash uchun hisoblangan misol. BTC perp, kunlik vol σd=250\sigma_d = 250 bps, birjaning kunlik hajmi V_d = \6B,B, Y = 0.75,, \delta = 0.5$:

Order hajmi QQ Q/VdQ/V_d Q/Vd\sqrt{Q/V_d} Impact hadi + yarim-spred (0.5 bp)
$50k 0.0008% 0.0029 0.5 bp 1.0 bp
$500k 0.008% 0.0091 1.7 bp 2.2 bp
$5M 0.083% 0.0289 5.4 bp 5.9 bp
$50M 0.83% 0.0913 17.1 bp 17.6 bp

Hajmdagi uch tartibli farq xarajatda ~18 martalik farqni beradi. Hech qanday konstanta bu jadvalni qamrab ololmaydi, va pozitsiya hajmini o'zgartirib, slippage_bpsni sobit ushlagan har qanday strategiya taqqoslashi 50kni50k'ni 5M bilan sukut bo'yicha noto'g'ri taqqoslamoqda.

Egri chiziqni moslash: o'z fill'laringiz, yoki hech kimniki

O'z fill'laringizdan

To'g'ri ma'lumot — bu sizning o'z TCA yozuvingiz: har bir ota-orderga bitta qator, kelish midi, real fill VWAP'i, order hajmi va qaror qabul qilish vaqtidagi bozor holati bilan — bu aynan ekzekutsiyaning shortfall'ini o'lchash yon mahsuloti sifatida ishlab chiqaradigan ma'lumotlar to'plami. Kelishga nisbatan bps'dagi shortfall, davriy volatillikka normallashtirilgan, ishtirokka regressiya qilinsa, sizga to'g'ridan-to'g'ri YY va δ\delta ni beradi.

Tuzoq — bu shovqin. Bitta orderning shortfall'i impact plyus ekzekutsiya oynasidagi narx shovqinidir, va shovqin ustunlik qiladi: 10 daqiqalik ekzekutsiya uchun kunlik 250 bps volda, shovqin hadi σd10/144021\sigma_d\sqrt{10/1440} \approx 21 bps bo'lib, taxminan 3 bps'lik impact signaliga qarshi turadi. Har bir kuzatuvda 0.15 signal-shovqin nisbati aynan Almgren va boshqalarga nima uchun 700 ming order kerak bo'lganini va nima uchun siz xom nuqtalarga emas, balki bucket median'lariga moslashishingiz kerakligini tushuntiradi:

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)

Bir necha ming kripto ota-orderida bu moslashtirish YY bo'yicha taxminan ±30% va δ\delta bo'yicha ±0.1 gacha allaqachon barqaror — dag'al, ammo moslashtirilgan egri chiziq va taxminiy konstanta orasidagi farq 30% emas, u — butun shakl. Har chorakda qayta moslashtiring; YY'dagi drift o'zi bir diagnostika hisoblanadi (bir xil ishtirokda YY o'sishi yoki birjaning likvidlik rejimi o'zgargani, yoki sizning order oqimingiz ko'proq axborotli/aniqlanadigan bo'lib qolganini bildiradi).

Sovuq boshlanish: hali fill yo'q

Birinchi jonli orderdan oldin sizda faqat ochiq ma'lumotlar bor, va ikkita halol variant.

Kitobni chuqurlik bo'yicha yurish (depth-walk). Har bir hajmda L2 snapshotlarni yurish xarajatini o'rtachalashtiring, xuddi fill simulyator har bir bitim uchun qiladigandek, ammo egri chiziqqa jamlangan holda. Bu ma'lum belgiga ega quyi chegara: snapshot boshqalarning oqimidan omon qolgan likvidlikni ko'rsatadi, to'ldirish dinamikasi ko'rinmaydi, va sizning oldingi bola-orderlaringiz keyingilari kelmasdan oldin kitobni allaqachon siljitgan bo'ladi.

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

Ochiq bitimlar izini kuzatish. Agressor bitimlarini hajmi bo'yicha guruhlab, har biridan bir necha soniya keyingi mid harakatini o'lchang va shundan empirik impact egri chizig'ini o'qib oling. Bu botiq shaklni va taxminan to'g'ri σ\sigma-miqyoslashni tiklaydi, ammo darajasi siz oldindan aniqlay olmaydigan yo'nalishda noto'g'ri: ochiq bitimlar boshqa treyderlarning qarorlari, shuning uchun katta bitimlar shartli ravishda axborotlangan (o'lchangan impact'ni sizning axborotsiz balanslashtirishingizga nisbatan yuqoriga siljitadi), likvidlikka eng sezgir treyderlar esa orderlarni aynan yashirish uchun bo'laklarga bo'ladi (uni pastga siljitadi). Uni shakl uchun ishlating, daraja uchun emas.

Har holda, sovuq boshlanish protokoli quyidagicha: ochiq ma'lumot egri chizig'ini oling, 1.5–2 xavfsizlik koeffitsientini qo'llang, kichik savdo qiling va uni almashtiradigan TCA jadvalini to'ldirishni boshlang. Ochiq egri chiziq — bu ustunga aylanadigan mustahkam devor emas, balki vaqtinchalik iskala.

Rejimga bog'liqlik: bir xil order, besh baravar ko'proq xarajat

Tinch, oddiy va stress volatillik rejimlari bo'ylab yoyilgan xarajat egri chiziqlari

C3C_3 dagi har bir had holatga bog'liq, va volatillik sakrashida ular hammasi birdaniga sizga qarshi harakatlanadi. Spredlar qisqa muddatli volga proportsional, shuning uchun sts_t 5–10 baravar kengayadi. σt\sigma_t impact hadiga to'g'ridan-to'g'ri kiradi. Hajm VtV_t ham o'sadi — bu naiv ravishda ishtirokni kamaytiradi — ammo u suratdagi σ\sigma ga qaraganda kamroq o'sadi, va bu kompensatsiya yanada yovuzroq effektni yashiradi: mid yaqinidagi kvotalangan chuqurlik savdo qilingan hajmga qaraganda ancha tezroq qulaydi, shuning uchun real egri chiziq faqat stress kirishlaridan hisoblangan formula bashorat qilganidan ham tikroq bo'ladi.

Aniqrog'i, yuqoridagi moslashtirilgan egri chiziq bilan, $3M BTC order uchun:

  • Tinch kun: σd=150\sigma_d = 150 bps, spred 1 bp, V_d = \6B.XarajatB. Xarajat = 0.5 + 0.75 \times 150 \times \sqrt{0.0005} = 0.5 + 2.5 = 3.0$ bps.
  • Inqiroz kuni (LUNA, FTX darajasida): σd=700\sigma_d = 700 bps, spred 6 bps, V_d = \18B.XarajatB. Xarajat = 3.0 + 0.75 \times 700 \times \sqrt{0.000167} = 3.0 + 6.8 = 9.8$ bps.

Formula 3.3 baravarni ko'rsatadi. Stress kunlaridagi real TCA doimiy ravishda formuladan yuqori chiqadi — sqrt hadi ko'rmaydigan chuqurlik qulashi — va aynan shu yerda o'lchangan stress ko'paytiruvchisi joylashadi. Bizning fill'larimizda inqiroz-bucket qoldig'i stresslangan-kirish formulasi ustida 1.4–1.8 baravarni tashkil etadi, bir xil order uchun umumiy stress xarajatini tinch kun xarajatidan 4.5–6 baravar yuqoriga olib chiqadi. Bu "bir xil order vol sakrashida 5 baravar qimmatroqqa tushadi" degan gapning halol kelib chiqishi: taxminan 2 baravar σ\sigma hajmdan sof holda, 2 baravar spreddan, va qolgani chuqurlikning hajm statistikasi ruxsat etganidan tezroq bug'lanishidan.

Amalga oshirish — bu shartli xarajat modeli: egri chiziqni har bir rejim bucket'i bo'yicha moslashtiring, yoki teng ravishda bitta egri chiziq va qaror qabul qilish vaqtida hisoblangan real-vol kvantiliga (faqat orqaga qarab boradigan oyna — to'liq namuna bo'yicha hisoblangan rejim yorlig'i xarajat modeli orqali yashirincha kiritilgan look-aheaddir) bog'langan ko'paytiruvchilar jadvalini moslashtiring:

Rejim (orqaga qarab 1 soatlik vol kvantili) Chastota Spred ko'paytiruvchisi Egri chiziq ko'paytiruvchisi (o'lchangan)
Tinch (< p25) 25% 0.6x 0.7x
Oddiy (p25–p75) 50% 1.0x 1.0x
Ko'tarilgan (p75–p95) 20% 1.8x 1.6x
Stress (> p95) 5% 5–10x 3–6x

Frazzini, Israel va Moskowitz (2018) o'zlarining institutsional ma'lumotlarida xuddi shu hodisani hujjatlashtirdilar: real xarajatlar davriy volatillik bilan kuchli birga harakatlanadi, va vaqt bo'yicha o'zgaruvchan vol hadisiz xarajat modeli aynan uchlarni noto'g'ri baholaydi. Bu jadval o'zining 5% lik stress qatoridan ko'ra muhimroq bo'lishining sababi — korrelyatsiya: strategiyalar bu qatorlarni bir tekisda tanlamaydi. Vol-breakout tizimi savdosining ko'p qismini eng pastki ikki qatorda amalga oshiradi. Tinch bozor meykeri eng yuqori qatorda daromad topadi va eng pastki qator orqali to'xtaydi. Har bir strategiyaning bitimlarini o'zining rejim gistogrammasi bilan tortishlash — hammani shartsiz o'rtachaga to'lattirish o'rniga — ushbu butun sahifadagi eng katta PnL tuzatishi bo'lib, event-driven tizimlar uchun zinapoyaning ixtiyoriy ikkita qo'shni bosqichi orasidagi farqdan ham qimmatliroqdir.

Sezuvchanlik tajribasi: to'rtta xarajat modeli, bitta qayta aralashib ketgan reyting jadvali

Agar xarajat modeli PnL'ni doimiy siljish bilan o'zgartirsa, bu tanlov uchun ahamiyatsiz bo'lardi — har bir variant teng ravishda siljigan bo'lardi va argmax omon qolardi. Bunday bo'lmaydi, chunki xarajatga sezuvchanlik variantlar orasida bir tartibga farq qiladi. Buni aniq ko'rsatadigan tajriba:

O'rnatish. Bitta strategiya oilasi — BTC va ETH perp'lardagi z-score mean reversion va Donchian breakout, 1 daqiqalik barlar, 18 oy — ushlab turish gorizonti (15m / 1s / 4s / 24s) va kirish chegarasi bo'yicha to'r bilan: 20 variant, bir tomonlama aylanma kuniga 0.4x'dan 11x kitobgacha, 5 daqiqada bajarilgan $250k kesimlar. Har bir variant har bir xarajat modeli bo'yicha bir marta backtest qilinadi:

  • M0: faqat komissiyalar;
  • M1: komissiyalar + 5 bps doimiy;
  • M2: komissiyalar + yarim-spred + 0.08σ5m0.08\,\sigma_{5m};
  • M3: komissiyalar + moslashtirilgan egri chiziq Y=0.75Y=0.75, δ=0.5\delta=0.5, yuqoridagi rejim ko'paytiruvchisi jadvali bilan.

Bir xil fill'lar, bir xil signallar, bir xil kod yo'li — xarajat modeli backtester'ga konstruktor argumenti sifatida uzatiladi, xuddi har qanday birinchi darajali parametr kabi:

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)

Natijalar (namunaviy prognoz; yillik sof daromadlar):

Variant Kunlik aylanma M0 M1 (5 bp) M2 M3 (egri chiziq) Reyting 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

To'rtta xarajat modeli bo'ylab 20 ta strategiya reytingi teskari aylanishining bump chart'i

Reyting jadvallari orasidagi reyting korrelyatsiyalari (Kendall τ\tau): τ(M0,M1)=0.79\tau(\text{M0},\text{M1}) = 0.79 — konstanta deyarli hech nimani qayta tartibga solmaydi, u model emas, soliq. τ(M1,M3)=0.39\tau(\text{M1},\text{M3}) = 0.39 — M1'ning eng yaxshi o'nligidan oltitasi M3 ostida eng yaxshi o'nlikdan chiqib ketadi, M1'ning chempioni +61%'dan manfiyga tushadi. τ(M2,M3)=0.74\tau(\text{M2},\text{M3}) = 0.74 — faqat vol hadi qayta tartiblanishning katta qismini tiklaydi; hajm hadi esa oyna hajmiga nisbatan katta savdo qiladigan variantlar uchun ishni tugatadi. Mexanizm aynan M0 bosqichidagi tanlov zaharliligi bilan bir xil: tekis 5 bps aslida 15 bps'ga tushadigan bitimlarni (katta, tez, stressda) subsidiyalaydi va 2 bps'ga tushadigan bitimlarni (kichik, sabrli, tinch) ortiqcha soliqqa tortadi, shuning uchun M1 bo'yicha reytinglash tizimli ravishda o'zining haqiqiy xarajatlari eng ko'p kam baholangan variantlarni ilgari suradi. Optimallashtiruvchi alfa topmadi; u sizning xarajat modelingizning xato hadini topdi.

Shuning uchun xarajat modeli walk-forward bo'linishi yoki maqsad funksiyasi bilan bir xil mental toifaga tegishli: siz bir marta o'rnatadigan atrof-muhit konstantasi emas, balki o'zgartiradigan birinchi darajali backtest parametri. Agar variantning reytingi M2 va M3 orasida barqaror bo'lsa, uning ustunligi xarajatlarga nisbatan haqiqiy. Agar reytingi zinapoyaga ko'tarilganda qulasa, siz buni xarajat-modeli artefakti ekanini bildingiz — bu walk-forward optimallashtirishda strategiyaning namunadan tashqarida o'lishi bilan bir xil epistemik hodisa, va u xuddi shunday javobga loyiq. Va agar siz M1 ostida 200 ta variantning argmax'ini tanlagan bo'lsangiz, deflated Sharpe mantig'i burilish bilan qo'llaniladi: siz test statistikasining o'zi yuqori-aylanma yozuvlar foydasiga noto'g'ri bo'lgan ko'p marta test qilish qidiruvini o'tkazdingiz.

Halol chegaralar: PnL zolim sifatida

Yakuniy intizom — xarajat modeli moslashtirilgandan keyin ham noaniq ekanini tan olishdan kelib chiqadi. YY ishonch oralig'iga ega, stress ko'paytiruvchilari bir necha uchki kunlardan baholangan, va kelajak o'z rejimlarini o'zi chizadi. Shuning uchun sof PnL'ni raqam sifatida ma'lum qilishni to'xtating. Uni nomli xarajat stsenariylari bo'ylab zolim sifatida ma'lum qiling:

  • Optimistik: chuqurlik-yurish quyi chegarasi, stress ko'paytiruvchilarisiz. Hech qachon yolg'iz ma'lum qilmang; uning yagona vazifasi eng yaxshi holatni chegaralash.
  • Realistik: moslashtirilgan egri chiziq, moslashtirilgan rejim ko'paytiruvchilari — sizning markaziy bahoyingiz.
  • Pessimistik: Y×1.5Y \times 1.5, spred ×2\times 2, stress qatori doim uning p75 qiymatida yoki undan yuqorida qo'llaniladi. Taxminan: moslashtirilgan egri chiziq har bir parametrning ishonch oralig'ining noqulay chetida baholanadi.

Ikkita qaror qoidasi zolimni amaliy qiladi. Birinchi: pessimistik bo'yicha ajrating, realistik bo'yicha ma'lum qiling. Faqat realistik model ostida omon qoladigan strategiya — bu sizning xarajat moslashtirishingizda qimmat yo'nalishda xato yo'q degan garov, siz ongli ravishda qo'ymagan garov. Ikkinchi: mo'rtlik nisbatini kuzatib boring — zolim kengligining yalpi PnL'ga nisbati. Yuqoridagi tajribadan: BO-4h 0.9x aylanmada yalpi +39%, zolim [+22%, +29%], mo'rtlik 0.44 ni ko'rsatadi. MR-15m 11.4x'da yalpi +187%, zolim [−31%, +34%] — mo'rtlik 2.2, va strategiyaning belgisi zolim ichida teskari aylanadi. Ikkinchi strategiyaning sizning hozirgi xarajat bilimingiz darajasida aniqlanadigan belgisi yo'q; halol bayonotlar "bilmaymiz" va "buni bilguningizcha aylanmani kamaytiring". +34% chiqarib, zolimning −31% chetini o'tkazib yuboradigan backtest optimistik emas, u yolg'onga chiqarib bo'lmaydigan.

Zolimni ishlab chiqarish hech narsaga tushmaydi — siz hozir baribir amalga oshirayotgan xarajat-modeli sanovida yana uchta yozuv — va u suhbatlarni o'zgartiradi. "Bu strategiya 20% daromad qiladi" ishonchni taklif qiladi. "Bu strategiya bizning xarajat stsenariylarimiz bo'ylab 11–19% daromad qiladi va pessimistik ostida ham musbat qoladi" ajratishni taklif qiladi.

Bu qayerga ulanadi

Backtest dvigatelida xarajat modeli aynan fill simulyator bajarilgan miqdorni qaytaradigan joyda joylashadi: fill'lar nima olganingizni belgilaydi, xarajat egri chizig'i esa buning uchun nima to'laganingizni belgilaydi, va o'sha zinapoyada L2'dan yuqoridagi bosqichlar (chuqurlik-yurish, navbat modellari) xarajat modelini asta-sekin fill modeliga singdiradi — egri chiziq esa kitobni to'g'ridan-to'g'ri simulyatsiya qilmayotganingizda ishlatadigan parametrik o'rinbosardir. Parametrlar sizda bo'lganda o'z TCA yozuvingizdan, va bo'lmaganda xavfsizlik-miqyoslangan ochiq ma'lumotlardan keladi. Funksional shakl esa qirq yillik nazariya va o'lchovdan keladi — nima uchun dollarga to'g'ri keladigan xarajat umuman likvidlikka bog'liqligi uchun Kyle (1985), botiq qonunning o'zi uchun Almgren va boshqalar (2005) hamda Tóth va boshqalar (2011), jadvallash hamkori sifatida Almgren-Chriss va bashorat chegarasi sifatida neyron impact modellari. Ushbu maqola qo'shgan narsa — bu ish jarayoni: egri chiziqni moslashtiring, uni rejimga shartlang, uni parametr sifatida sanab chiqing va zolimni ma'lum qiling. Bularning hech biri jozibali emas. Ammo bularning hammasi strategiyangiz slippage_bps = 5ning qaysi tomonida haqiqatan ham bo'lganini jonli holda kashf etishdan arzonroq.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

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

Newsletter

Bozordan bir qadam oldinda bo'ling

Sun'iy intellekt savdo tahlillari, bozor tahlili va platforma yangiliklari uchun bizning xabarnomaga obuna bo'ling.

Biz sizning maxfiyligingizni hurmat qilamiz. Istalgan vaqtda obunadan chiqishingiz mumkin.