Slippage константасы емес, slippage қисықтары: жанды сауданы кездескенде аман шығатын шығын модельдері
Көптеген backtest-тердегі ең қымбат жол — бұл slippage_bps = 5. 5-тің қате сан болғандығынан емес — бір жылдық толтырулар бойынша орташаланғанда ол дұрыс та болуы мүмкін — ал константаның шартты түрде қате болатындығынан, ал сіздің стратегия таңдау процесіңіз шартты қателерді тауып, оларды пайдалануға арналған машина. Slippage — тапсырыс өлшемінің, спредтің, құбылмалылықтың және қолжетімді өтімділіктің функциясы. Константа — бұл функцияны бір нүктеде есептеп, содан кейін оны барлық жерде экстраполяциялау, оның ішінде сіздің mean-reversion сигналыңыз ең қатты жанатын және стакан әдеттегі тереңдігінің оннан бір бөлігінде болатын түнгі сағат 3-тегі жойылу каскадына дейін. Backtest онда да 5 bps алады. Жанды сауда алмайды.
Бұл мақала — backtest циклінің ішіндегі шығын моделі туралы: әрбір симуляцияланған саудадан алынатын cost(size, market_state) функциясы. Ол әдейі орындауды жоспарлау үшін әсерді алдын ала болжау туралы емес — бұл серіктес мәселе, ол модель тарапынан нарықтық әсерді модельдеу және оңтайлы жоспарлау тарапынан Almgren-Chriss мақалаларында қамтылған. Мұнда сұрақ тарырақ және backtest арқылы стратегия таңдайтын кез келген адам үшін неғұрлым өткір: қазіргі константаңыздың орнында қандай функция тұруы керек, оны шын мәнінде бар деректерден қалай жобалауға болады және жауап сіз соңында іске қосатын стратегияны қаншалықты өзгертеді. Соңғы бөліктің өткір эмпирикалық жауабы бар: бір стратегия отбасының 20 нұсқасын төрт шығын моделі бойынша қайта саралап, рейтингтің қалай төңкерілетінін бақылаңыз.
Шығын моделінің сатысы

Толтыру симуляциясының сатысы сияқты, шығын модельдері дәлдік сатысын құрайды, онда әрбір баспалдақ көбірек дерек қажет етеді және бір нақты жүйелі ауытқуды жояды. Баспалдақтар жинақталған: әрқайсысы өзінен төмендегі мүшелерді сақтап, біреуін қосады.
M0: тұрақты bps
Әрбір саудаға қолданылатын бір сан. Зиянның өсу ретімен үш сәтсіздік режимі:
- Өлшемге соқыр. 5M ата-ана тапсырысы бірдей төлейді. Сыйымдылық деңгейлері бойынша кез келген стратегия салыстыруы мағынасыз.
- Режимге соқыр. Тыныш сейсенбі түстен кейінгі уақыт пен FTX құлдырауы бірдей төлейді. Қате — шу емес; ол оқиғаға негізделген стратегиялар өз саудасын шоғырландыратын күйлермен дәл кері корреляцияланған.
- Таңдауға улы. Сіз 200 параметр комбинациясын аралағанда, оптимизатор жалпақ шығын кезінде айналымның шындыққа қатысты арзан екенін ашып, барлық іздеуді жоғары жиілікті нұсқаларға қарай ығыстырады. Шығын қатесі модель таңдауға бағытталған күшке айналады, PnL-ге симметриялы емес.
M1: спредке пропорционал
Шешім қабылдау таймстампінде өлшенген жарты спредті алыңыз (плюс детерминистік болатын және әрдайым өз жеке жолы болуы керек комиссия). Бұл нарыққа мүлдем жауап беретін бірінші модель: спредтер жаңалық кезінде, сессия ашылуында, жұқа альткоиндерде кеңейеді, сондықтан шығын енді кем дегенде бір өтімділік айнымалысымен бірге қозғалады. Ол әлі де жіберіп алатыны: спред бір стакан басындағы клиптің толтырылуын бағалайды. Одан үлкен кез келген нәрсе стаканды кезіп өтеді, ал бұл кезу үшін көрінбейді.
M2: құбылмалылыққа масштабталған
Қысқа мерзімді құбылмалылыққа пропорционал мүше қосыңыз. Негіздеме эмпирикалық та, құрылымдық та: спредтер мен тереңдікті кері таңдау мен қор тәуекелі -мен масштабталатын нарық жасаушылар белгілейді (Avellaneda-Stoikov баға белгілеу логикасы кері жүргізілген), сондықтан өтімділікті талап ету құны табиғи түрде құбылмалылық бірліктерінде номиналданады. Стакан деректеріңіз мүлдем болмағанда — күндік бар, ұзақ тарих — шамамен күндік құбылмалылықтың 0,05–0,1-і болатын кез келген константадан қазірдің өзінде әлдеқайда жақсы модель, өйткені ол кем дегенде режиммен бірге тыныс алады.
M3: қатысу бойынша квадрат түбір
Өлшем мүшесі. — сіздің тапсырыс өлшеміңіз, — тиісті терезедегі нарық көлемі, — сол терезедегі құбылмалылық. Бұл функционалдық форма ыңғайлылық емес; ол нарық микроқұрылымындағы ең көп қайталанған эмпирикалық нәтижелердің бірі және оның қайдан келетінін нақтылап көрсеткен жөн.
Теориялық бастапқы нүкте — Kyle (1985), "Continuous auctions and insider trading" (Econometrica 53(6), 1315–1335). Kyle моделінде нарық жасаушы бағаны таза тапсырыс ағынының сызықтық функциясы ретінде белгілейді, , мұнда
— ағын бірлігіне келетін әсер, шу-сауда көлеміне қатысты құн белгісіздігіне пропорционал. Kyle лямбдасы салаға оның өтімділік бірлігін берді (тереңдік — ) және оның бірінші тексерілетін тұжырымын: сатылған долларға келетін шығын ақпараттың өтімділікке қатынасына тәуелді, константаға емес. Бірақ модель өлшемде сызықтық, ал деректер басқаша дейді.
Деректер ойыс дейді. Almgren, Thum, Hauptmann and Li (2005), "Direct estimation of equity market impact" (Risk, July 2005), Citigroup үстелдерінен шамамен 700 000 АҚШ акция тапсырысын жобалап, уақытша әсердің қатысудың дәрежесіне сәйкес өсетінін тапты — олар сызықтық және таза квадрат түбірдің екеуін де айқын тексеріп, пайдасына қабылдамады — ал тұрақты әсер болып шықты, сызықтықтан статистикалық түрде ажыратылмайтын (бұл жұбатарлық, өйткені Huberman and Stanzl (2004) сызықты емес тұрақты әсер манипуляцияға жол беретінін көрсетті). 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-тен фьючерс нарықтары бойынша 500 000-ға жуық метатапсырысты пайдаланып, табты, бірінші ретті — және қазір стандартқа айналған түсіндірмені берді: көрінетін стакан жасырын өтімділіктің шексіз аз бөлігі, ол орта маңында бағада жергілікті түрде сызықтық, бұл оны жеп өту құнын квадрат түбір ретінде масштабталуын қамтамасыз етеді. Кейінгі жұмыс шеттерін нақтылайды: Zarinelli, Treccani, Farmer and Lillo (2015), "Beyond the square root" (Market Microstructure and Liquidity 1(2)), жеті миллион ANcerno институционалдық метатапсырысы бойынша квадрат түбірдің тапсырыс өлшемінің шамамен екі декадасы бойынша жақсы сәйкес келетінін, бірақ логарифмдік форма беске созылатынын көрсетті; Bucci et al. (2019, Physical Review Letters 122, 108302) өте кіші қатысудағы сызықтық (Kyle тәрізді) әсерден одан жоғарыдағы квадрат түбірге өтуді құжаттандырды. Ал Frazzini, Israel and Moskowitz (2018), "Trading Costs" (SSRN 3229719), AQR-ден 19 жыл бойы $1,7 трлн жанды орындауды пайдаланып, іске асырылған шығындарды бұрынғы академиялық бағалаулардан бір реттік шаманы кіші тапты — бұл басқа адамдардың ағынына, әртүрлі шұғылдықпен және әртүрлі ақпараттық мазмұнмен жобаланған коэффициенттердің сіздікіне ауыспайтынын ескерту.
Backtest циклі үшін практикалық қорытынды — үш тұжырым. Әсер құбылмалылықпен масштабталады. Әсер өлшемде ойыс, көрсеткішін өз деректеріңіз -ны талап еткенше деп қараңыз. префакторы бірінші ретті, бірақ алаңқай, актив және — маңыздысы — сіздің өз сауда стиліңіз бойынша өзгереді, сондықтан келесі бөлім оны көшірудің орнына жобалау туралы. Терең калибрлеу (ыдырау ядролары, өтпелі мен тұрақтыны ыдырату, кросс-әсер) әсерді модельдеу мақаласына жатады; backtest тек қисықты қажет етеді.
Шамаларды бекіту үшін есептелген сан. BTC перп, күндік құбылмалылық bps, алаңқай күндік көлемі V_d = \6Y = 0.75\delta = 0.5$:
| Тапсырыс өлшемі | Әсер мүшесі | + жарты спред (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 |
Өлшемдегі үш реттік шама шығындағы ~18 еселік коэффициентті қамтиды. Ешбір константа осы кестені қамтымайды, ал slippage_bps-ты тұрақты ұстай отырып, позиция өлшемін өзгертетін әрбір стратегия салыстыруы 5M-дағы апельсинмен үнсіз салыстырады.
Қисықты жобалау: сіздің толтыруларыңыз немесе ешкімдікі емес
Өз толтыруларыңыздан
Дұрыс деректер — сіздің өз TCA жазбаңыз: ата-ана тапсырысына бір жол, келу ортасымен, іске асырылған толтыру VWAP-пен, тапсырыс өлшемімен және шешім қабылдау уақытындағы нарық күйімен — дәл орындау тапшылығын өлшеу қосымша өнім ретінде шығаратын дерекжинақ. Келуге қатысты bps-тегі тапшылық, тұспа-тұс құбылмалылыққа нормаланып, қатысу бойынша регрессияланғанда, сізге мен -ны тікелей береді.
Тұзақ — шу. Бір тапсырыстың тапшылығы — орындау терезесі бойынша әсер плюс баға шуы, ал шу үстемдік етеді: 250 bps күндік құбылмалылықта 10 минуттық орындау үшін шу мүшесі bps, мүмкін 3 bps болатын әсер сигналына қарсы. Бақылауға 0,15 сигнал-шу қатынасы — Almgren et al. неге 700k тапсырыс қажет еткенінің және сіз неге шикі нүктелерде емес, шелек медианаларында жобалауыңыз керектігінің себебі:
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)
Бірнеше мың крипто ата-ана тапсырысында бұл жобалау бойынша шамамен ±30% және бойынша ±0,1-ге дейін тұрақты — дөрекі, бірақ жобаланған қисық пен болжанған константаның арасындағы айырмашылық 30% емес, бұл бүкіл форма. Тоқсан сайын қайта жобалаңыз; -тегі дрейф өзі диагностика болып табылады (тұрақты қатысуда -тің өсуі алаңқайдың өтімділік режимі өзгергенін немесе тапсырыс ағыныңыздың неғұрлым ақпаратты/анықталатын болғанын білдіреді).
Суық бастау: әлі толтырулар жоқ
Бірінші жанды тапсырысқа дейін сізде тек ашық деректер бар, әрі екі адал нұсқа.
Стаканды тереңдік бойынша кезу. L2 суреттерін әрбір өлшемде кезу құнын орташалаңыз, дәл толтыру симуляторы саудаға сайын жасайтындай, бірақ қисыққа біріктірілген. Бұл — белгілі белгісі бар төменгі шекара: сурет барлық басқаның ағынынан аман шыққан өтімділікті көрсетеді, толтыру динамикасы көрінбейді, ал сіздің өз бұрынғы бала тапсырыстарыңыз кейінгілер келгенше стаканды жылжытады.
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"])
Ашық сауданың ізін салу. Агрессор саудаларын өлшемі бойынша топтастырыңыз, әрбіреуінен бірнеше секундтан кейінгі орта қозғалысын өлшеңіз және эмпирикалық әсер қисығын оқыңыз. Бұл ойыс форманы және шамамен дұрыс -масштабтауды қалпына келтіреді, бірақ деңгей сіз алдын ала белгісін бере алмайтын бағытта ауытқыған: ашық басылымдар — басқа трейдерлердің шешімдері, сондықтан үлкен басылымдар шартты түрде ақпаратты (өлшенген әсерді сіздің ақпаратсыз қайта теңгерімге қатысты жоғарылатады), ал ең өтімділікке сезімтал трейдерлер тапсырыстарды дәл жасыру үшін бөледі (оны төмендетеді). Оны деңгей үшін емес, форма үшін пайдаланыңыз.
Кез келген жағдайда, суық бастау хаттамасы: ашық-дерек қисығын алыңыз, 1,5–2 қауіпсіздік коэффициентін қолданыңыз, кішкене сауда жасаңыз және оны алмастыратын TCA кестесін толтыра бастаңыз. Ашық қисық — тіреу, жүк көтеретін қабырға емес.
Режимге тәуелділік: сол тапсырыс, бес есе қымбат

-тегі әрбір мүше күйге тәуелді, ал құбылмалылық секірісінде олардың бәрі бірден сізге қарсы қозғалады. Спредтер қысқа мерзімді құбылмалылыққа пропорционал, сондықтан 5–10 есе кеңейеді. әсер мүшесіне тікелей енеді. Көлем де өседі — бұл аңғырт түрде қатысуды азайтады — бірақ ол алымдағы -дан аз өседі, ал өтемақы жағымсызырақ әсерді жасырады: орта маңындағы белгіленген тереңдік сатылған көлемнен әлдеқайда жылдам құлайды, сондықтан іске асырылған қисық тек стрессті кірістерден жобаланған формула болжағаннан асып тіктеледі.
Нақтырақ айтқанда, жоғарыдағы жобаланған қисықпен $3M BTC тапсырысы:
- Тыныш күн: bps, спред 1 bp, V_d = \6= 0.5 + 0.75 \times 150 \times \sqrt{0.0005} = 0.5 + 2.5 = 3.0$ bps.
- Дағдарыс күні (LUNA, FTX деңгейінде): bps, спред 6 bps, V_d = \18= 3.0 + 0.75 \times 700 \times \sqrt{0.000167} = 3.0 + 6.8 = 9.8$ bps.
Формула 3,3 еселік дейді. Стресс күндеріндегі іске асырылған TCA дәйекті түрде формуладан жоғары шығады — квадрат түбір мүшесі көрмейтін тереңдік құлауы — дәл өлшенген стресс көбейткіші осында жатады. Біздің толтыруларымызда дағдарыс-шелек қалдығы стрессті-кіріс формуласының үстінен 1,4–1,8 еселік жүреді, сол тапсырыс үшін жалпы стресс шығынын тыныш шығынның 4,5–6 еселігіне жеткізеді. Бұл "сол тапсырыс құбылмалылық секірісінде 5 есе қымбаттырақ тұрады" дегеннің адал тегі: көлемнен таза -дан шамамен 2 есе, спредтен 2 есе, ал қалғаны тереңдіктің көлем статистикасы мойындағаннан жылдамырақ буланып кетуінен.
Іске асыру — шартты шығын моделі: қисықты режим-шелегіне жобалаңыз, немесе баламалы түрде бір қисықты және шешім қабылдау уақытында есептелген іске асырылған-құбылмалылық квантилінде кілттелген көбейткіш кестесін жобалаңыз (тек ізбойлаушы терезе — толық үлгіде есептелген режим белгісі шығын моделі арқылы жасырын әкелінген алдын көру):
| Режим (ізбойлаушы 1 сағат құбылмалылық квантилі) | Жиілік | Спред көбейткіші | Қисық көбейткіші (өлшенген) |
|---|---|---|---|
| Тыныш (< p25) | 25% | 0.6x | 0.7x |
| Қалыпты (p25–p75) | 50% | 1.0x | 1.0x |
| Жоғарылаған (p75–p95) | 20% | 1.8x | 1.6x |
| Стресс (> p95) | 5% | 5–10x | 3–6x |
Frazzini, Israel and Moskowitz (2018) сол құбылысты өз институционалдық деректерінде құжаттандырады: іске асырылған шығындар тұспа-тұс құбылмалылықпен қатты бірге қозғалады, ал уақытпен өзгеретін құбылмалылық мүшесі жоқ шығын моделі дәл құйрықтарды дұрыс бағаламайды. Бұл кестенің оның 5% стресс жолы болжағаннан маңыздырақ болу себебі — корреляция: стратегиялар бұл жолдарды біркелкі іріктемейді. Құбылмалылық-серпіліс жүйесі саудасының көбін екі төменгі жолда жасайды. Тыныш-нарық жасаушы жоғарғы жолда табыс табады және төменгісі арқылы тоқтап шығады. Әрбір стратегияның саудаларын оның өз режим гистограммасымен өлшеу — әркімге шартсыз орташаны алудың орнына — оқиғаға негізделген жүйелер үшін осы бүкіл беттегі ең үлкен жалғыз PnL түзетуі, ол сатының кез келген екі көршілес баспалдағы арасындағы айырмашылықтан құндырақ.
Сезімталдық эксперименті: төрт шығын моделі, бір қайта араласқан рейтинг
Егер шығын моделі PnL-ды тұрақты ығысумен өзгертсе, бұның бәрі таңдау үшін маңызды болмас еді — әрбір нұсқа бірдей ығысып, argmax аман қалар еді. Ол олай емес, өйткені шығын сезімталдығы нұсқалар бойынша бір реттік шамаға өзгереді. Бұны нақтылайтын эксперимент:
Орнату. Бір стратегия отбасы — z-score mean reversion және Donchian breakout, BTC мен ETH перптерінде, 1 минуттық барлар, 18 ай — ұстау көкжиегі (15m / 1h / 4h / 24h) мен кіру шегі бойынша тормен: 20 нұсқа, күніне стаканнан 0,4x-тен 11x-ке дейінгі бір жақты айналым, 5 минут ішінде орындалатын $250k клиптер. Әрбір нұсқа шығын моделіне бір рет backtest жасалады:
- M0: тек комиссиялар;
- M1: комиссиялар + 5 bps тұрақты;
- M2: комиссиялар + жарты спред + ;
- M3: комиссиялар + жобаланған қисық , жоғарыдағы режим көбейткіш кестесімен.
Бірдей толтырулар, бірдей сигналдар, бірдей код жолы — шығын моделі кез келген бірінші дәрежелі параметр сияқты backtester-ге конструктор аргументі ретінде беріледі:
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)
Нәтижелер (өкілдік іске қосу; жылдық таза кірістер):
| Нұсқа | Айналым/күн | M0 | M1 (5 bp) | M2 | M3 (қисық) | Ранг 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 |

Рейтингтер арасындағы ранг корреляциялары (Kendall ): — константа ешнәрсені әрең қайта реттейді, бұл салық, модель емес. — M1-дің үздік ондығының алтауы M3-те үздік ондықтан кетеді, ал M1-дің чемпионы +61%-тен теріске ауысады. — құбылмалылық мүшесі жалғыз өзі қайта реттеудің көбін қалпына келтіреді; өлшем мүшесі терезе көлеміне қатысты үлкен сауда жасайтын нұсқалар үшін жұмысты аяқтайды. Механизм M0 баспалдағынан дәл сол таңдау улылығы: жалпақ 5 bps шын мәнінде 15 bps тұратын (үлкен, жылдам, стрессте) саудаларды субсидиялайды және 2 тұратындарды (кіші, шыдамды, тыныштықта) артық салықтайды, сондықтан M1 бойынша саралау шынайы шығындары ең көп бағаланбайтын нұсқаларды жүйелі түрде алға жылжытады. Оптимизатор альфа тапқан жоқ; ол сіздің шығын моделіңіздің қате мүшесін тапты.
Міне сондықтан шығын моделі walk-forward бөлінуі немесе мақсат функциясымен бірдей ойша санатқа жатады: сіз бір рет орнататын орта константасы емес, сіз өзгертетін бірінші дәрежелі backtest параметрі. Егер нұсқаның рангі M2 мен M3 бойынша тұрақты болса, оның артықшылығы шығындарға қатысты шынайы. Егер оның рангі сатыда жоғары көтерілгенде құласа, сіз оның шығын-моделі артефактісі екенін білдіңіз — бұл walk-forward оңтайландыруындағы стратегияның үлгіден тыс өлуімен бірдей эпистемиялық оқиға, әрі ол сондай жауапқа лайық. Ал егер сіз 200 нұсқаның argmax-ын M1 бойынша таңдасаңыз, дефляцияланған Sharpe логикасы бір бұралумен қолданылады: сіз тест статистикасының өзі жоғары айналымды кірулердің пайдасына ауытқыған көп-тестілеу іздеуін жүргіздіңіз.
Адал шектеулер: PnL — жолақ ретінде
Соңғы тәртіп шығын моделі жобалаудан кейін де белгісіз екенін мойындаудан туындайды. -тің сенімділік аралығы бар, стресс көбейткіштері бірнеше құйрық күнінен бағаланады, ал болашақ өз режимдерін тартады. Сондықтан таза PnL-ды сан ретінде хабарлауды тоқтатыңыз. Оны аталған шығын сценарийлері бойынша жолақ ретінде хабарлаңыз:
- Оптимистік: тереңдік-кезу төменгі шекарасы, стресс көбейткіштерсіз. Ешқашан жалғыз хабарламаңыз; оның жалғыз жұмысы — ең жақсы жағдайды шектеу.
- Реалистік: жобаланған қисық, жобаланған режим көбейткіштері — сіздің орталық бағалауыңыз.
- Пессимистік: , спред , стресс жолы әрдайым оның p75 мәнінде қолданылады. Шамамен: әрбір параметрдің сенімділік аралығының қолайсыз шетінде есептелген жобаланған қисық.
Екі шешім ережесі жолақты жұмысшы етеді. Біріншісі: пессимистік бойынша бөліңіз, реалистік хабарлаңыз. Тек реалистік модельде аман қалатын стратегия — сіздің шығын жобалауыңызда қымбат бағытта қате жоқ деген бәс, ол сіз саналы түрде қоймаған бәс. Екіншісі: сынғыштық қатынасын — жалпы PnL-ге қатысты жолақ енін — қадағалаңыз. Жоғарыдағы эксперименттен: 0,9x айналымдағы BO-4h жалпы +39% көрсетеді, жолақ [+22%, +29%], сынғыштық 0,44. 11,4x-тегі MR-15m жалпы +187% көрсетеді, жолақ [−31%, +34%] — сынғыштық 2,2, ал стратегияның белгісі жолақ ішінде аударылады. Ол екінші стратегияның сіздің қазіргі шығын білу күйіңізде анықталатын белгісі жоқ; адал тұжырымдар — "біз білмейміз" және "біз білгенше айналымды азайтыңыз". +34% басып, жолақтың −31% шетін қалдырып кететін backtest оптимистік емес, ол теріске шығарылмайтын.
Жолақты шығару ешнәрсеге тұрмайды — қазір бәрібір жүргізіп жатқан шығын-моделі аралауындағы тағы үш жазба — және ол әңгімелерді өзгертеді. "Бұл стратегия 20% табады" сенімге шақырады. "Бұл стратегия біздің шығын сценарийлеріміз бойынша 11–19% табады және пессимистік модельде оң болып қалады" бөлуге шақырады.
Бұл қайда жалғанады
Backtest қозғалтқышында шығын моделі дәл толтыру симуляторы орындалған көлемді қайтаратын жерде тұрады: толтырулар не алғаныңызды анықтайды, шығын қисығы оны неге төлегеніңізді анықтайды, ал сол сатыдағы L2-ден жоғары баспалдақтар (тереңдік-кезу, кезек модельдері) шығын моделін толтыру моделінің өзіне біртіндеп сіңіреді — қисық сіз стаканды тікелей симуляцияламай жатқан кездегі пайдаланатын параметрлік орынбасары. Параметрлер сіздің өз TCA жазбаңыздан келеді, болғанда, және болмағанда қауіпсіздік-масштабталған ашық деректерден. Функционалдық форма қырық жылдық теория мен өлшеуден келеді — Kyle (1985) долларға келетін шығынның неге өтімділікке тәуелді екені үшін, Almgren et al. (2005) және Tóth et al. (2011) ойыс заңының өзі үшін, Almgren-Chriss жоспарлаудың серіктесі ретінде және нейрондық әсер модельдері болжау шебі ретінде. Бұл мақала қосатыны — жұмыс процесі: қисықты жобалаңыз, оны режимге шарттандырыңыз, оны параметр сияқты аралаңыз және жолақты хабарлаңыз. Оның ешбірі әсем емес. Оның бәрі стратегияңыздың slippage_bps = 5-тің қай жағында шын мәнінде болғанын жанды түрде ашқаннан арзанырақ.
Authors
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.