📝

Draft article

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

← Kembali ke artikel
July 23, 2026
Bacaan 5 minit

Lengkung slippage, bukan pemalar slippage: model kos yang bertahan apabila bersentuhan dengan dagangan langsung

Lengkung slippage, bukan pemalar slippage: model kos yang bertahan apabila bersentuhan dengan dagangan langsung
#slippage
#kos transaksi
#impak pasaran
#backtest
#eksekusi
#tca
#hukum punca kuasa dua
#model kos

Baris paling mahal dalam kebanyakan backtest ialah slippage_bps = 5. Bukan kerana 5 itu nombor yang salah — dipurata sepanjang setahun fill, ia mungkin betul — tetapi kerana pemalar itu salah secara bersyarat, dan proses pemilihan strategi anda adalah mesin untuk mencari dan mengeksploitasi ralat bersyarat. Slippage adalah fungsi kepada saiz pesanan, spread, volatiliti, dan kecairan yang tersedia. Pemalar ialah fungsi itu yang dinilai pada satu titik dan kemudian diekstrapolasi ke mana-mana sahaja, termasuk ke lambakan kecairan jam 3 pagi di mana isyarat mean-reversion anda mencetus paling kuat dan buku pesanan hanya sepersepuluh kedalaman biasanya. Backtest tetap mengenakan 5 bps di situ juga. Dagangan langsung tidak akan berbuat demikian.

Artikel ini membincangkan model kos di dalam gelung backtest: fungsi cost(size, market_state) yang ditolak daripada setiap dagangan simulasi. Ia sengaja tidak membincangkan tentang meramal impak secara ex ante untuk menjadualkan eksekusi — itu masalah rakan sepasangan, dibincangkan dari sudut model dalam pemodelan impak harga dan dari sudut penjadualan optimum dalam Almgren-Chriss. Di sini soalannya lebih sempit dan, bagi sesiapa yang memilih strategi melalui backtest, lebih mendesak: fungsi apakah yang patut menggantikan pemalar anda sekarang, bagaimana anda memasangnya daripada data yang benar-benar anda ada, dan sejauh mana jawapan itu mengubah strategi yang akhirnya anda jalankan. Bahagian terakhir mempunyai jawapan empirikal yang tegas: susun semula kedudukan 20 varian daripada satu keluarga strategi di bawah empat model kos dan lihat papan pendahulu terbalik.

Tangga model kos

Tangga model kos empat anak tangga daripada bps tetap kepada penyertaan punca kuasa dua

Seperti tangga simulasi fill, model kos membentuk tangga kesetiaan di mana setiap anak tangga memerlukan lebih banyak data dan menghapuskan satu bias sistematik tertentu. Anak tangga ini bersifat kumulatif: setiap satu mengekalkan sebutan di bawahnya dan menambah satu lagi.

M0: bps tetap

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

Satu nombor, dikenakan pada setiap dagangan. Tiga mod kegagalannya, mengikut susunan kerosakan yang meningkat:

  1. Buta saiz. Klip 10kdanpesananinduk10k dan pesanan induk 5M membayar jumlah yang sama. Sebarang perbandingan strategi merentas tahap kapasiti menjadi tidak bermakna.
  2. Buta rejim. Petang Selasa yang tenang dan keruntuhan FTX membayar jumlah yang sama. Ralat ini bukan bunyi bising; ia berkorelasi songsang tepat dengan keadaan di mana strategi berasaskan peristiwa menumpukan dagangan mereka.
  3. Toksik kepada pemilihan. Apabila anda menyapu 200 kombinasi parameter, pengoptimum mendapati bahawa di bawah kos rata, turnover menjadi murah berbanding realiti dan menghanyutkan keseluruhan carian ke arah varian frekuensi tinggi. Ralat kos menjadi daya berarah ke atas pemilihan model, bukan daya simetri ke atas PnL.

M1: berkadar dengan spread

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

Kenakan separuh-spread yang diukur pada tanda masa keputusan (ditambah yuran, yang bersifat deterministik dan sepatutnya sentiasa menjadi item barisnya sendiri). Ini ialah model pertama yang bertindak balas terhadap pasaran sama sekali: spread melebar semasa berita, semasa pembukaan sesi, pada altcoin nipis, jadi kos kini bergerak seiring dengan sekurang-kurangnya satu pemboleh ubah kecairan. Apa yang masih terlepas: spread menetapkan harga bagi satu fill klip teratas buku pesanan. Apa-apa yang lebih besar melangkah menembusi buku, dan langkahan itu tidak kelihatan kepada sts_t.

M2: berskala volatiliti

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

Tambah sebutan berkadar dengan volatiliti jangka pendek. Justifikasinya bersifat empirikal dan struktural: spread dan kedalaman ditetapkan oleh pembuat pasaran yang risiko pemilihan lawan dan risiko inventorinya berskala dengan σ\sigma (logik sebut harga Avellaneda-Stoikov dijalankan secara songsang), jadi kos menuntut kecairan secara semula jadi didenominasi dalam unit volatiliti. Apabila anda tiada langsung data buku pesanan — bar harian, sejarah panjang — cσσtc_\sigma \sigma_t dengan cσc_\sigma sekitar 0.05–0.1 daripada vol harian sudah menjadi model yang jauh lebih baik daripada mana-mana pemalar, kerana ia sekurang-kurangnya "bernafas" bersama rejim pasaran.

M3: punca kuasa dua dalam penyertaan

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)

Sebutan saiz. QQ ialah saiz pesanan anda, VtV_t ialah volum pasaran sepanjang tetingkap masa yang berkaitan, σt\sigma_t ialah volatiliti sepanjang tetingkap masa yang sama. Bentuk fungsi ini bukan sekadar kemudahan; ia salah satu keputusan empirikal yang paling banyak direplikasi dalam mikrostruktur pasaran, dan wajar untuk kita tepat tentang asal-usulnya.

Titik permulaan teoretikal ialah Kyle (1985), "Continuous auctions and insider trading" (Econometrica 53(6), 1315–1335). Dalam model Kyle, pembuat pasaran menetapkan harga sebagai fungsi linear terhadap aliran pesanan bersih, Δp=λq\Delta p = \lambda q, dengan

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

— impak per unit aliran berkadar dengan ketidakpastian nilai berbanding volum dagangan bunyi bising. Lambda Kyle memberi bidang ini unit kecairannya (kedalaman ialah 1/λ1/\lambda) dan dakwaan pertamanya yang boleh diuji: kos per dolar didagangkan bergantung pada nisbah maklumat kepada kecairan, bukan pada pemalar. Tetapi model itu linear terhadap saiz, dan data menunjukkan sebaliknya.

Data menunjukkan bentuk cekung. Almgren, Thum, Hauptmann dan Li (2005), "Direct estimation of equity market impact" (Risk, Julai 2005), memasang kira-kira 700,000 pesanan ekuiti AS daripada meja dagangan Citigroup dan mendapati impak sementara berkembang mengikut penyertaan pangkat 3/53/5 — mereka secara eksplisit menguji dan menolak kedua-dua bentuk linear serta punca kuasa dua tulen demi δ=0.6\delta = 0.6 — manakala impak kekal terhasil pada 0.89±0.100.89 \pm 0.10, tidak boleh dibezakan secara statistik daripada linear (yang melegakan, kerana Huberman dan Stanzl (2004) menunjukkan impak kekal yang tidak linear membenarkan manipulasi). Tóth et al. (2011), "Anomalous price impact and the critical nature of liquidity in financial markets" (Physical Review X 1, 021006), menggunakan hampir 500,000 metaorder daripada Capital Fund Management merentas pasaran niaga hadapan, mendapati E[ΔP]YσdQ/Vd\mathbb{E}[\Delta P] \approx Y \sigma_d \sqrt{Q/V_d} dengan YY dalam lingkungan satu — dan memberikan penjelasan yang kini menjadi piawai: buku pesanan yang kelihatan hanyalah sebahagian kecil terpencil daripada kecairan tersembunyi, yang secara setempat linear terhadap harga di sekitar mid, menjadikan kos menembusi buku itu berskala sebagai punca kuasa dua. Kerja kemudian memperhalusi bahagian tepi: Zarinelli, Treccani, Farmer dan Lillo (2015), "Beyond the square root" (Market Microstructure and Liquidity 1(2)), menunjukkan pada tujuh juta metaorder institusi ANcerno bahawa punca kuasa dua sesuai dengan baik sepanjang kira-kira dua dekad saiz pesanan tetapi bentuk logaritma merentas lima dekad; Bucci et al. (2019, Physical Review Letters 122, 108302) mendokumentasikan peralihan daripada impak linear (seperti Kyle) pada penyertaan yang sangat kecil kepada punca kuasa dua di atasnya. Dan Frazzini, Israel dan Moskowitz (2018), "Trading Costs" (SSRN 3229719), menggunakan $1.7 trilion eksekusi langsung daripada AQR sepanjang 19 tahun, mendapati kos sebenar lebih kecil satu order magnitud berbanding anggaran akademik terdahulu — amaran bahawa pekali yang dipasang pada aliran orang lain, dengan tahap kesegeraan dan kandungan maklumat yang berbeza, tidak boleh dipindahkan begitu sahaja kepada aliran anda.

Bagi gelung backtest, rumusan praktikalnya ialah tiga pernyataan. Impak berskala dengan volatiliti. Impak bersifat cekung terhadap saiz, dengan eksponen yang patut dianggap sebagai 0.50.5 sehingga data anda sendiri menunjukkan 0.60.6. Prefaktor YY berada dalam lingkungan satu tetapi berbeza mengikut venue, aset, dan — secara kritikal — gaya dagangan anda sendiri, sebab itulah bahagian seterusnya membincangkan cara memasangnya dan bukan menyalinnya. Kalibrasi mendalam (kernel susut, penguraian sementara berbanding kekal, impak silang) tergolong dalam artikel pemodelan impak; backtest hanya memerlukan lengkungnya.

Satu contoh nombor, untuk menetapkan magnitud. BTC perp, vol harian σd=250\sigma_d = 250 bps, volum harian venue V_d = \6B,B, Y = 0.75,, \delta = 0.5$:

Saiz pesanan QQ Q/VdQ/V_d Q/Vd\sqrt{Q/V_d} Sebutan impak + separuh-spread (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

Tiga order magnitud dalam saiz merentangi faktor ~18 dalam kos. Tiada pemalar yang meliputi jadual itu, dan setiap perbandingan strategi yang mengubah saiz kedudukan sambil mengekalkan slippage_bps tetap sebenarnya secara senyap membandingkan epal pada 50kdenganorenpada50k dengan oren pada 5M.

Memasang lengkung: fill anda sendiri, atau tiada siapa punya

Daripada fill anda sendiri

Data yang betul ialah rekod TCA anda sendiri: satu baris bagi setiap pesanan induk dengan mid ketibaan, VWAP fill sebenar, saiz pesanan, dan keadaan pasaran pada masa keputusan — persis dataset yang dihasilkan oleh pengukuran implementation shortfall sebagai hasil sampingan. Shortfall dalam bps berbanding ketibaan, dinormalkan mengikut volatiliti serentak, diregresi terhadap penyertaan, memberikan anda YY dan δ\delta secara terus.

Perangkapnya ialah bunyi bising. Shortfall satu pesanan sahaja ialah impak ditambah bunyi bising harga sepanjang tetingkap eksekusi, dan bunyi bising itu mendominasi: bagi eksekusi 10 minit pada vol harian 250 bps, sebutan bunyi bising ialah σd10/144021\sigma_d\sqrt{10/1440} \approx 21 bps berbanding isyarat impak sekitar 3 bps sahaja. Nisbah isyarat-kepada-bunyi sebanyak 0.15 per pemerhatian itulah sebabnya Almgren et al. memerlukan 700 ribu pesanan dan sebabnya anda mesti memasang pada median baldi, bukan sekali-kali pada titik data mentah:

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)

Pada beberapa ribu pesanan induk kripto, pemasangan ini sudah stabil pada lingkungan ±30% untuk YY dan ±0.1 untuk δ\delta — kasar, tetapi perbezaan antara lengkung yang dipasang dan pemalar yang diteka bukanlah 30%, ia adalah keseluruhan bentuk. Pasang semula setiap suku tahun; hanyutan pada YY itu sendiri satu diagnostik (peningkatan YY pada penyertaan tetap bermakna sama ada rejim kecairan venue berubah atau aliran pesanan anda sendiri menjadi lebih bermaklumat/lebih mudah dikesan).

Permulaan sejuk: belum ada fill

Sebelum pesanan langsung pertama anda, anda hanya ada data awam, dan dua pilihan yang jujur.

Susur kedalaman buku pesanan. Purata kos menyusuri snapshot L2 pada setiap saiz, persis seperti yang dilakukan oleh penyimulasi fill bagi setiap dagangan, tetapi diagregatkan menjadi satu lengkung. Ini ialah sempadan bawah dengan tanda yang diketahui: snapshot menunjukkan kecairan yang terselamat daripada aliran semua orang lain, dinamik pengisian semula tidak kelihatan, dan pesanan anak anda sendiri yang lebih awal akan menggerakkan buku sebelum pesanan yang kemudian tiba.

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

Jejak dagangan awam. Baldikan dagangan agresor mengikut saiz, ukur pergerakan mid beberapa saat selepas setiap satu, dan baca lengkung impak empirikal daripadanya. Ini memulihkan bentuk cekung dan lebih kurang penskalaan σ\sigma yang betul, tetapi aras kosnya bias ke arah yang tidak boleh anda tentukan tandanya secara priori: cetakan awam adalah keputusan pedagang lain, jadi cetakan besar cenderung bermaklumat secara bersyarat (membiaskan impak terukur ke atas berbanding penyeimbangan semula anda yang tidak bermaklumat) manakala pedagang yang paling sensitif kepada kecairan memecahkan pesanan tepat untuk bersembunyi (membiaskannya ke bawah). Gunakan untuk bentuk, bukan aras.

Apa pun caranya, protokol permulaan sejuk ialah: ambil lengkung data awam, kenakan faktor keselamatan 1.5–2, berdagang kecil, dan mula mengisi jadual TCA yang akan menggantikannya. Lengkung awam itu perancah, bukan dinding penanggung beban.

Kebergantungan rejim: pesanan yang sama, lima kali ganda kosnya

Lengkung kos berselerak merentas rejim volatiliti tenang, normal dan tertekan

Setiap sebutan dalam C3C_3 bergantung kepada keadaan, dan semasa lonjakan volatiliti semuanya bergerak menentang anda serentak. Spread berkadar dengan vol jangka pendek, jadi sts_t melebar 5–10x. σt\sigma_t memasuki sebutan impak secara langsung. Volum VtV_t juga meningkat — yang secara naif mengurangkan penyertaan — tetapi ia meningkat kurang daripada σ\sigma pada pengangka, dan pengimbangan itu menyembunyikan kesan yang lebih buruk: kedalaman disebut harga berhampiran mid runtuh jauh lebih pantas berbanding volum yang didagangkan, jadi lengkung sebenar menjadi lebih curam berbanding apa yang diramalkan formula terpasang daripada input tertekan sahaja.

Secara konkrit, dengan lengkung terpasang di atas, satu pesanan $3M BTC:

  • Hari tenang: σd=150\sigma_d = 150 bps, spread 1 bp, V_d = \6B.KosB. Kos = 0.5 + 0.75 \times 150 \times \sqrt{0.0005} = 0.5 + 2.5 = 3.0$ bps.
  • Hari krisis (gred LUNA, FTX): σd=700\sigma_d = 700 bps, spread 6 bps, V_d = \18B.KosB. Kos = 3.0 + 0.75 \times 700 \times \sqrt{0.000167} = 3.0 + 6.8 = 9.8$ bps.

Formula menyatakan 3.3x. TCA sebenar pada hari tertekan secara konsisten melebihi formula — keruntuhan kedalaman yang tidak dilihat oleh sebutan sqrt — dan di situlah letaknya pengganda tekanan yang diukur. Dalam fill kami, baki (residual) baldi krisis berada pada 1.4–1.8x di atas formula input tertekan, menjadikan jumlah kos tekanan 4.5–6x kos tenang bagi pesanan yang sama. Itulah asal-usul jujur bagi pernyataan "pesanan yang sama kos 5x lebih mahal semasa lonjakan vol": lebih kurang 2x daripada σ\sigma bersih volum, 2x daripada spread, dan selebihnya daripada kedalaman yang lesap lebih pantas berbanding apa yang diakui oleh statistik volum.

Implementasinya ialah model kos bersyarat: pasang lengkung mengikut baldi rejim, atau setara dengannya pasang satu lengkung dan satu jadual pengganda berdasarkan kuantil vol sebenar yang dikira pada masa keputusan (hanya tetingkap tertinggal — label rejim yang dikira ke atas keseluruhan sampel ialah bias lihat-depan yang diselundup masuk melalui model kos):

Rejim (kuantil vol tertinggal 1j) Kekerapan Pengganda spread Pengganda lengkung (terukur)
Tenang (< p25) 25% 0.6x 0.7x
Normal (p25–p75) 50% 1.0x 1.0x
Meningkat (p75–p95) 20% 1.8x 1.6x
Tertekan (> p95) 5% 5–10x 3–6x

Frazzini, Israel dan Moskowitz (2018) mendokumentasikan fenomena yang sama dalam data institusi mereka: kos sebenar bergerak seiring kuat dengan volatiliti serentak, dan model kos tanpa sebutan vol yang berubah mengikut masa menyalah-hargakan tepat pada bahagian ekor. Sebab jadual ini lebih penting berbanding apa yang disarankan oleh baris tekanan 5%-nya ialah korelasi: strategi tidak menyampel baris-baris ini secara seragam. Sistem vol-breakout melakukan sebahagian besar dagangannya pada dua baris terbawah. Pembuat pasaran pasaran tenang memperoleh keuntungan pada baris teratas dan terkeluar melalui baris terbawah. Memberatkan dagangan setiap strategi mengikut histogram rejim strateginya sendiri — bukannya mengenakan purata tidak bersyarat kepada semua orang — ialah pembetulan PnL terbesar tunggal di seluruh halaman ini bagi sistem berasaskan peristiwa, lebih bernilai berbanding perbezaan antara mana-mana dua anak tangga bersebelahan pada tangga tersebut.

Eksperimen kepekaan: empat model kos, satu papan pendahulu tersusun semula

Jika model kos mengubah PnL dengan ofset pemalar, tiada satu pun daripada ini penting bagi pemilihan — setiap varian akan beralih secara sama rata dan argmax akan kekal. Ini tidak berlaku, kerana kepekaan kos berbeza merentas varian sehingga satu order magnitud. Eksperimen yang membuktikan ini secara konkrit:

Persediaan. Satu keluarga strategi — mean reversion skor-z dan breakout Donchian pada BTC dan ETH perp, bar 1 minit, 18 bulan — dengan grid merentas horizon pegangan (15m / 1j / 4j / 24j) dan ambang kemasukan: 20 varian, turnover sehala daripada 0.4x hingga 11x buku setiap hari, klip $250k dieksekusi sepanjang 5 minit. Setiap varian dibacktest sekali bagi setiap model kos:

  • M0: yuran sahaja;
  • M1: yuran + 5 bps tetap;
  • M2: yuran + separuh-spread + 0.08σ5m0.08\,\sigma_{5m};
  • M3: yuran + lengkung terpasang Y=0.75Y=0.75, δ=0.5\delta=0.5 dengan jadual pengganda rejim di atas.

Fill yang sama, isyarat yang sama, laluan kod yang sama — model kos dihantar masuk ke dalam backtester sebagai hujah konstruktor, sama seperti mana-mana parameter kelas pertama:

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)

Keputusan (larian mewakili; pulangan bersih tahunan):

Varian Turnover/hari M0 M1 (5 bp) M2 M3 (lengkung) Kedudukan 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

Carta lonjakan 20 kedudukan strategi terbalik merentas empat model kos

Korelasi kedudukan (Kendall τ\tau) antara papan pendahulu: τ(M0,M1)=0.79\tau(\text{M0},\text{M1}) = 0.79 — pemalar hampir tidak menyusun semula apa-apa, ia adalah cukai, bukan model. τ(M1,M3)=0.39\tau(\text{M1},\text{M3}) = 0.39 — enam daripada sepuluh teratas M1 keluar daripada sepuluh teratas di bawah M3, dan juara M1 beralih daripada +61% kepada negatif. τ(M2,M3)=0.74\tau(\text{M2},\text{M3}) = 0.74 — sebutan vol sahaja sudah memulihkan sebahagian besar penyusunan semula; sebutan saiz menyelesaikan baki kerja bagi varian yang berdagang besar berbanding volum tetingkap. Mekanismenya persis toksisiti pemilihan daripada anak tangga M0: 5 bps rata mensubsidi dagangan yang sebenarnya berkos 15 bps (besar, pantas, semasa tekanan) dan mengenakan cukai berlebihan pada yang berkos 2 (kecil, sabar, semasa tenang), jadi menyusun kedudukan mengikut M1 secara sistematik mempromosikan varian yang kos sebenarnya paling diremehkan. Pengoptimum itu bukan menemui alfa; ia menemui sebutan ralat model kos anda.

Inilah sebabnya model kos tergolong dalam kategori mental yang sama dengan pembahagian walk-forward atau fungsi objektif: parameter backtest kelas pertama yang anda ubah-ubah, bukan pemalar persekitaran yang anda tetapkan sekali sahaja. Jika kedudukan sesuatu varian stabil merentas M2 dan M3, kelebihannya nyata berbanding kos. Jika kedudukannya runtuh apabila menaiki tangga, anda telah mempelajari bahawa ia sebenarnya artifak model kos — peristiwa epistemik yang sama seperti strategi yang mati di luar-sampel dalam pengoptimuman walk-forward, dan ia wajar menerima respons yang sama. Dan jika anda memilih argmax daripada 200 varian di bawah M1, logik Sharpe terdeflasi terpakai dengan satu lawi tambahan: anda telah menjalankan carian ujian berganda di mana statistik ujian itu sendiri bias memihak kepada entri turnover tinggi.

Sempadan yang jujur: PnL sebagai jalur

Disiplin terakhir ini terhasil daripada mengakui bahawa model kos tidak pasti walaupun selepas dipasang. YY mempunyai selang keyakinan, pengganda tekanan dianggarkan daripada segelintir hari ekor, dan masa depan melukis rejimnya sendiri. Jadi berhenti melaporkan PnL bersih sebagai satu nombor. Laporkan ia sebagai jalur merentas senario kos bernama:

  • Optimistik: sempadan bawah susur kedalaman, tanpa pengganda tekanan. Jangan sekali-kali dilaporkan bersendirian; tugasnya hanya membatasi kes terbaik.
  • Realistik: lengkung terpasang, pengganda rejim terpasang — anggaran pusat anda.
  • Pesimistik: Y×1.5Y \times 1.5, spread ×2\times 2, baris tekanan sentiasa dikenakan pada sekurang-kurangnya nilai p75-nya. Secara kasar: lengkung terpasang dinilai pada bahagian tepi yang tidak mesra bagi setiap selang keyakinan parameter.

Dua peraturan keputusan menjadikan jalur ini operasional. Pertama: peruntukkan berdasarkan pesimistik, laporkan berdasarkan realistik. Strategi yang hanya bertahan di bawah model realistik ialah pertaruhan bahawa pemasangan kos anda tiada ralat pada arah yang mahal — satu pertaruhan yang anda tidak buat secara sedar. Kedua: jejaki nisbah kerapuhan — lebar jalur berbanding PnL kasar. Daripada eksperimen di atas: BO-4h pada turnover 0.9x menunjukkan kasar +39%, jalur [+22%, +29%], kerapuhan 0.44. MR-15m pada 11.4x menunjukkan kasar +187%, jalur [−31%, +34%] — kerapuhan 2.2, dan tanda strategi itu terbalik di dalam jalur tersebut. Strategi kedua itu tiada tanda yang boleh ditentukan pada tahap pengetahuan kos anda sekarang; pernyataan jujurnya ialah "kita tidak tahu" dan "kurangkan turnover sehingga kita tahu." Backtest yang mencetak +34% dan mengabaikan tepi −31% jalur itu bukan optimistik, ia tidak boleh dipalsukan.

Jalur ini tidak memerlukan kos tambahan untuk dihasilkan — cuma tiga entri lagi dalam sapuan model kos yang sudah pun anda jalankan — dan ia mengubah perbualan. "Strategi ini menghasilkan 20%" mengundang kepercayaan. "Strategi ini menghasilkan 11–19% merentas senario kos kami, dan kekal positif di bawah senario pesimistik" mengundang peruntukan.

Di mana ini bersambung

Dalam enjin backtest, model kos duduk tepat di tempat penyimulasi fill menyerahkan kuantiti yang dieksekusi: fill menentukan apa yang anda perolehi, lengkung kos menentukan apa yang anda bayar untuknya, dan anak tangga di atas L2 pada tangga itu (susur kedalaman, model giliran) secara progresif menyerap model kos ke dalam model fill itu sendiri — lengkung ialah pengganti parametrik yang anda gunakan apabila anda tidak mensimulasikan buku pesanan secara langsung. Parameternya datang daripada rekod TCA anda sendiri apabila anda memilikinya dan daripada data awam berskala keselamatan apabila anda tidak memilikinya. Bentuk fungsinya datang daripada empat puluh tahun teori dan pengukuran — Kyle (1985) bagi sebab kos per dolar bergantung pada kecairan sama sekali, Almgren et al. (2005) dan Tóth et al. (2011) bagi hukum cekung itu sendiri, dengan Almgren-Chriss sebagai rakan sepasangan penjadualan dan model impak neural sebagai sempadan ramalan. Apa yang artikel ini tambahkan ialah aliran kerja: pasang lengkungnya, syaratkan ia pada rejim, sapu ia seperti parameter, dan laporkan jalurnya. Tiada satu pun daripadanya glamor. Semuanya lebih murah berbanding menemui, secara langsung, sebelah manakah slippage_bps = 5 sebenarnya berpihak bagi strategi anda.

Penafian: Maklumat yang disediakan dalam artikel ini adalah untuk tujuan pendidikan dan maklumat sahaja dan bukan merupakan nasihat kewangan, pelaburan, atau dagangan. Dagangan mata wang kripto melibatkan risiko kerugian yang ketara.

Pengarang

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

Kekal Mendahului Pasaran

Langgan surat berita kami untuk pandangan dagangan AI eksklusif, analisis pasaran, dan kemas kini platform.

Kami menghormati privasi anda. Berhenti melanggan pada bila-bila masa.