2026 m. rugsėjo 5 d. · rizika

Tavo backtestas niekada nebuvo likviduotas: marža, mark kaina ir praleista sverto riba

Tavo backtestas niekada nebuvo likviduotas: marža, mark kaina ir praleista sverto riba

Praėjusį mėnesį viena sugeneruota strategija pateikė nuosavo kapitalo kreivę, kurioje buvo 63 % nuosmukis. Gilus, nemalonus kritimas, po kurio per kitas 6 savaites kreivė gražiai atsitiesė — tokį vaizdą pamatęs tyrėjas susiraukia ir nusprendžia, kad su mažesne pozicija tai dar pakeliama. Pakartotinai paleidau strategiją per maržos variklį, kuris žino, kas yra palaikomosios maržos pakopa. Sąskaita buvo likviduota 41-ą dieną, pačiame nuosmukio viduryje, o visa kreivė po 41-os dienos buvo išgalvota.

Tai brangiausia backtesto klaidų kategorija, kokią žinau, nes ji neiškreipia grąžos keliais baziniais punktais. Ji pašalina iš simuliacijos būseną, iš kurios nebegrįžtama. Strategija, kurios vertė gali nukristi iki nulio, ir strategija, kurios vertė negali nukristi iki nulio, yra skirtingos strategijos. Backtestas, kuris niekada netikrina maržos, negali pasakyti, kurią iš jų turite.

Štai 3 būdai, kuriais vis matau tai darant neteisingai.

Pirmas neteisingas būdas: svertą laikyti skaičiumi, kuriuo dauginama grąža

Dažniausiai daroma būtent taip. Apskaičiuojate signalų grąžos seką, nusprendžiate taikyti 10x svertą ir padauginate iš jo grąžą. Kartais skaičiavimas kiek sudėtingesnis — pozicijos dydis yra equity * leverage / price — bet sąskaitos būsena vis tiek tėra skaičius, kuris tai didėja, tai mažėja. Nėra maržos balanso, nominaliosios vertės ribos ar sąlygos, dėl kurios viskas baigtųsi.

Žala sunkiai pastebima, todėl klaida praslysta per patikrą. Sharpe rodiklis nekinta pakeitus mastelį, tad pagrindinis jūsų rodiklis nesikeičia, kai svertą padidinate nuo 3x iki 30x. Tyrėjas padaro išvadą, kad svertas yra nemokamas reguliatorius, keičiantis kintamumą į grąžą. Maksimalus nuosmukis didėja tiesiškai ir aritmetiniu atsitiktinumu lieka mažesnis nei 100 %, nes dauginama grąžų seka asimptotiškai artėja prie nulio ir niekada jo neperžengia. Padauginus -9 % dienos grąžą iš 12, sąžiningame variante gaunate -108 %, o naiviame — „-108 %, bet nuosavo kapitalo kreivė vis dar teigiama“; tai priklauso nuo to, ar sudėjote grąžas, ar jas kaupėte. Esu matęs abu variantus.

Trūksta esminio dalyko: svertas taikomas ne jūsų grąžai, o jūsų užstatui, o užstatas yra baigtinis dydis, kurį birža stebi kas sekundę. Kai tik jo suma tampa mažesnė už palaikomosios maržos reikalavimą, pozicija jums nebepriklauso.

Požymis paprastas: jei simuliacijoje negalite prarasti visko esant bet kokiam svertui, ji nemodeliuoja sverto.

Antras neteisingas būdas: likvidavimo kainą nustatyti vien pagal svertą

Kitas sudėtingumo lygis — įtraukti likvidavimo patikrą, dažniausiai maždaug taip: esant 20x svertui, 5 % nepalankus kainos pokytis sunaikina maržą, todėl ilgąją poziciją likviduojame ties įėjimo kaina × 0.95. Paprasta, intuityvu ir neteisinga iš 4 pusių iš karto.

Neterminuotų ateities sandorių biržos nenusprendžia, kada jūsų pozicija bus likviduota, pagal nustatytą svertą. Jos taiko palaikomosios maržos normą, kuri didėja pagal pozicijos nominaliąją vertę ir nustatoma pakopų lentelėje. Apytikslė BTCUSDT USDⓈ-M struktūra, kuri keičiasi biržoms atnaujinant sąlygas:

Pozicijos nominalioji vertė (USDT)Palaikomosios maržos normaDidžiausias svertas
0 – 50,0000.40%125x
50,000 – 600,0000.50%100x
600,000 – 3,000,0001.00%50x
3,000,000 – 12,000,0002.50%20x
12,000,000 – 70,000,0005.00%10x

Taigi izoliuota ilgoji pozicija gali atlaikyti maždaug 1/L − MMR nepalankų kainos pokytį, o ne 1/L. Antroje pakopoje, esant 20x svertui, tai yra 5% − 0.5% = 4.5%. Pusė procento atrodo kaip apvalinimo paklaida. Kai BTC kaina yra 84,000, tai sudaro 420 dolerių kainos skirtumą, o audringą valandą tie 420 dolerių lemia, ar jus išmušusi žvakės uodega pasiekė jūsų poziciją. Kiekviena tokia uodega tampa monetos metimu, kurio baigtį pakreipėte sau palankia kryptimi.

Dar yra mokesčiai. Taker įėjimo mokestis išskaičiuojamas iš jūsų maržos vos įvykdžius pavedimą: 0.045% nuo 500,000 nominaliosios vertės sudaro 225 USDT, nuskaičiuojamus nuo 25,000 maržos balanso. Likvidavimo kaina pasislenka dar prieš pozicijai spėjant ką nors nuveikti. Finansavimo mokėjimai veikia taip pat nuolat, o skaičiuojami nuo pozicijos su svertu jie būna daug didesni, nei tikisi tyrėjai:

4.55%faktinis nepalankus kainos pokytis, reikalingas likvidavimui esant 20x svertui, įskaitant įėjimo mokestį
0.60%kasdienis finansavimo mokėjimų poveikis maržai esant 20x svertui ir 0.01%/8h normai
18%tiek tos maržos prarandama per ramų mėnesį

Pozicija, kuri 30 dienų nejuda — nėra nepalankaus kainos pokyčio, nevyksta prekyba — sunaudoja beveik penktadalį užstato ir gerokai priartina likvidavimo kainą. Trečia ir ketvirta neteisingo modelio vietos: didinant poziciją keičiasi jos pakopa, todėl pozicija, pradėjusi 0.5% pakopoje ir padidinta iki 1.0% pakopos, turi blogesnę likvidavimo kainą nei ta, kurią apskaičiavote įeidami; kryžminė marža sujungia pozicijų užstatus, tad jūsų BTC ilgosios pozicijos išlikimas priklauso nuo to, kaip sekasi jūsų ETH trumpajai pozicijai. Jei kryžminę maržą imituojate kaip atskirų izoliuotų pozicijų rinkinį, neteisingai suprantate savo sąskaitos koreliacijų struktūrą.

Trečias neteisingas būdas: likvidavimą įvykdyti pagal netinkamą kainą, netinkamu momentu ir netinkama įvykdymo kaina

Tarkime, nustatėte teisingą suveikimo lygį. Dabar kyla klausimai: kuri kaina jį kerta, kada ją tikrinate ir kokia kaina įvykdomas pavedimas?

Likvidavimas suveikia pagal mark kainą — kelių spot biržų indeksą su glotninama baze, specialiai sukurtą tam, kad viena birža išspausdinta žvakės uodega nesukeltų staigaus pokyčio. Jūsų stop-loss pavedimas, priklausomai nuo jo nustatymų, tikriausiai suveikia pagal paskutinę sandorio kainą. Šios 2 kainos labiausiai išsiskiria būtent tada, kai tai svarbiausia. Per likvidavimų grandinę paskutinė neterminuoto ateities sandorio kaina gali būti 1–2% mažesnė už mark kainą dešimtis sekundžių. Backtestas, kuris ir stop-loss, ir likvidavimą tikrina pagal tą pačią OHLCV žemiausią kainą, modeliuoja neegzistuojančią biržą.

Čia galioja abi klaidos ir jos viena kitos nepanaikina. Jei naudojate paskutinę kainą, likviduojami ir tie atvejai, kai birža į kainos šuolius neatsižvelgė. Jei naudojate mark kainą, galite nepastebėti atvejo, kai pati mark kaina pasikeitė — indekso kainos išsiskyrimas spot biržoje yra reali priežastis, dėl kurios galite būti likviduoti už kainą, kuri niekada nebuvo parodyta jūsų prekiauto neterminuoto ateities sandorio kainoje.

Toliau — pavedimo įvykdymas. Naivūs varikliai uždaro poziciją likvidavimo kaina ir apskaito nuostolį taip, lyg tai būtų stop pavedimas. Iš tikrųjų likvidavimo variklis perima poziciją pagal bankroto kainą — lygį, kuriame jūsų marža yra lygiai nulis, t. y. žemesnį už suveikimo lygį. Be to, imamas likvidavimo apdorojimo mokestis, priklausantis nuo pakopos ir žemesnėse pakopose siekiantis apie 1% nominaliosios vertės. Esant 20x svertui, 1% nominaliosios vertės sudaro 20% likusios maržos. Jei variklis įvykdo pavedimą žemiau bankroto kainos, skirtumą padengia draudimo fondas. Kai kuriose biržose fondui išsekus nuostolis paskirstomas pelningoms orderių knygos pozicijoms. Realizuotas nuostolis nėra nuosmukis iki likvidavimo kainos. Jis didesnis, o skirtumas didžiausias būtent tomis dienomis, kai orderių knyga tokia sekli, kad nuostolis išauga labiausiai.

Čia galioja ir klausimas apie įvykių eiliškumą žvakės viduje, tik pasekmės griežtesnės nei įprastai. Jei 1-minute žvakė apima ir jūsų take-profit, ir likvidavimo lygį, backtestas, kuris prieš maržą patikrina pozicijos uždarymo sąlygas, noriai užskaitys pelną. Birža maržą tikrina kaskart atnaujinus mark kainą — maždaug kartą per sekundę — prieš visa kita, kas jums galbūt turėjo įvykti.

Ką turi sekti variklis

Nereikia nieko egzotiško. Reikia sekti būseną. Sąskaita yra objektas su balansu, o ne grąžų seka, ir kiekvienoje žvakėje ji atnaujinama tokia tvarka, kokia tai darytų birža:

  1. Atskirai sekite piniginės balansą ir nerealizuotą PnL. Maržos koeficientas yra palaikomoji marža, padalyta iš maržos balanso, o į maržos balansą įtraukiamas nerealizuotas PnL. Sumaišius šiuos dydžius, nuostolinga pozicija atrodo geriau padengta užstatu, nei yra iš tikrųjų.
  2. Kiekvieno simbolio pakopų lentelė, kurios versija priklauso nuo datos. Pakopos keičiamos. 2023 m. backtestas, atliekamas pagal 2026 m. pakopas, įtraukia subtilią ateities informaciją — dažniausiai palankią, nes laikui bėgant biržos paprastai sušvelnino pagrindinių aktyvų reikalavimus.
  3. Mark kainų seka, o ne vien žvakių duomenys. Jei negalite gauti istorinių mark kainų, nurodykite tai rezultatuose ir naudokite konservatyvų pakaitinį rodiklį. Niekada tyliai nepakeiskite jų paskutine kaina.
  4. Kiekvienos žvakės įvykių eiliškume pirmiausia tikrinkite maržą, prieš stop pavedimus, tikslus, signalus ar portfelio perbalansavimą.
  5. Pavedimus vykdykite bankroto kaina ir įtraukite apdorojimo mokestį; mokesčio normą imkite iš tos pačios pakopos eilutės kaip ir MMR.
  6. Numatyti galutinę, negrįžtamą būseną. Kai nuosavas kapitalas nukrenta iki nulio, vykdymas baigiasi. Jokio bazės nustatymo iš naujo, jokio „tarkime, prekiautojas papildo sąskaitą“, jokio sekos tęsimo nuo naujos nominaliosios vertės.

Daugiausia ginčų sukelia paskutinis punktas. Kas nors visada primena, kad tikra prekybos įmonė įneštų daugiau užstato, todėl baigti simuliaciją yra nepagrįstai griežta. Galbūt. Tačiau teiginį „ši strategija veikia, jei po žlugimo ją nuolat finansuoji“ verta taip ir suformuluoti ir sąmoningai patikrinti, aiškiai nurodžius papildymus kaip įvesties duomenis, o ne nepastebimai įtraukti juos kaip numatytąją prielaidą. Sąžiningai tai užrašius, dauguma supranta, kad iš tikrųjų to nenorėjo pasakyti.

Praktinė viso to nauda: kai tą pačią strategiją išbandote popierinėje prekyboje realioje biržoje, biržos rodomas maržos koeficientas ir jūsų simuliatoriaus apskaičiuotas koeficientas visą dieną turėtų skirtis ne daugiau kaip per 1 ar 2 bazinius punktus. Šį sutapimą galima nemokamai tikrinti kas minutę, kiekvienai atvirai pozicijai. Tai pigiausias visos sistemos lygiavertiškumo testas, tačiau beveik niekas jo neatlieka. O kai 2 skaičiai ima skirtis, teisi yra birža — vadinasi, turite klaidą, kurią verta rasti, kol nuosmukis jos neatskleidė.

neterminuoti ateities sandoriaisvertaslikvidavimasmaržos variklisbacktestavimas
← Visi įrašai