Prejšnji mesec je strategija, ustvarjena z generatorjem, izrisala kapitalsko krivuljo s 63-odstotnim padcem. Globok, grd padec, ki mu je v naslednjih šestih tednih sledilo čisto okrevanje — takšna oblika krivulje, ob kateri raziskovalec zamižuri in sklene, da je padec mogoče preživeti, če le zmanjšaš velikost pozicije. Strategijo sem znova pognal skozi sistem kritja, ki pozna vzdrževalno raven kritja. Račun je bil likvidiran 41. dan, sredi tega padca, in vse, kar se je dogajalo po 41. dnevu, je bila fikcija.
To je najdražja vrsta napake v backtestu, kar jih poznam, saj donosov ne popači za nekaj bazičnih točk. Iz simulacije izbriše stanje, iz katerega ni več vrnitve. Strategija, ki lahko pade na nič, in strategija, ki tega ne more, sta različni strategiji; backtest, ki nikoli ne preveri kritja, pa vam ne more povedati, katero imate.
Vedno znova opažam tri napačne pristope.
Prvi napačni pristop: finančni vzvod kot število, s katerim množite donose
Najpogostejši pristop. Iz signalov izračunate časovno vrsto donosov, se odločite za trgovanje z vzvodom 10x in donose pomnožite. Včasih je pristop nekoliko bolj izpopolnjen — velikost pozicije je equity * leverage / price — vendar je stanje računa še vedno zgolj skalar, ki niha gor in dol. Ni stanja kritja, omejitve nominalne vrednosti pozicije niti pogoja za neuspeh.
Škoda je težko opazna, zato napaka preživi pregled. Sharpejevo razmerje je neodvisno od merila, zato se glavna številka ne spremeni, če finančni vzvod spremenite s 3x na 30x, in raziskovalec sklene, da je finančni vzvod brezplačen gumb za menjavo volatilnosti za donos. Največji padec se poveča linearno, a po naključju aritmetike ostane pod 100 %, saj se časovna vrsta pomnoženih donosov ničli približuje asimptotično in je nikoli ne preseže. Če padec za -9 % pomnožite z 12, v poštenem modelu dobite -108 %, v naivnem pa »-108 %, a kapitalska krivulja je še vedno pozitivna« — odvisno od tega, ali ste donose verižno obračunavali ali seštevali. Videl sem oboje.
Manjka to, da se finančni vzvod ne uporablja za donose, temveč za vaše zavarovanje, zavarovanje pa je omejena količina, ki jo borza spremlja vsako sekundo. Ko pade pod zahtevano vzdrževalno raven, pozicija ni več vaša.
Znak: če vaša simulacija pri nobenem finančnem vzvodu ne more prikazati popolne izgube, finančnega vzvoda ne modelira.
Drugi napačni pristop: likvidacijska cena, izpeljana samo iz finančnega vzvoda
Naslednja stopnja izpopolnjenosti doda preverjanje likvidacije, običajno nekako takole: pri 20x neugoden premik za 5 % izniči kritje, zato pri dolgi poziciji likvidirajte pri vstopni ceni × 0,95. Čisto, intuitivno in napačno v štirih pogledih hkrati.
Platforme za trgovanje s trajnimi terminskimi pogodbami ne uporabljajo vaše nastavitve finančnega vzvoda za določanje, kdaj je igre konec. Uporabljajo vzdrževalno stopnjo kritja, ki se z nominalno vrednostjo pozicije zvišuje po stopnjah, določenih v tabeli. Približna struktura za BTCUSDT USDⓈ-M, ki se spreminja ob posodobitvah borz:
| Nominalna vrednost pozicije (USDT) | Vzdrževalna stopnja kritja | Največji finančni vzvod |
|---|---|---|
| 0 – 50,000 | 0.40% | 125x |
| 50,000 – 600,000 | 0.50% | 100x |
| 600,000 – 3,000,000 | 1.00% | 50x |
| 3,000,000 – 12,000,000 | 2.50% | 20x |
| 12,000,000 – 70,000,000 | 5.00% | 10x |
Neugoden premik, ki ga lahko prenesete pri izolirani dolgi poziciji, je torej približno 1/L − MMR, ne pa 1/L. Pri 20x v drugi stopnji je to 5 % − 0.5 % = 4.5 %. Pol odstotne točke se sliši kot zaokroževanje. Pri BTC pri 84,000 je to 420 dolarjev razlike v ceni; v burni uri je 420 dolarjev razlika med tem, ali vas je sveča s špico odnesla ali ne. Vsaka taka špica je met kovanca, vi pa ste vse izide nagnili sebi v prid.
Potem so tu še provizije. Vstopna provizija taker se odšteje od vašega kritja takoj ob izvršitvi: 0.045 % od nominalne vrednosti 500,000 je 225 USDT od stanja kritja 25,000, kar premakne likvidacijsko ceno, še preden se s pozicijo sploh kaj zgodi. Enako velja za financiranje, ki učinkuje neprekinjeno in je pri nominalni vrednosti s finančnim vzvodom veliko večje, kot raziskovalci pričakujejo:
Pozicija, s katero se trideset dni ne zgodi nič — brez neugodnih premikov, brez poslov — je porabila skoraj petino zavarovanja, njena likvidacijska cena pa se je občutno približala. Tretji in četrti razlog za napačen izračun: ko povečujete pozicijo, se spreminjajo stopnje, zato bo pozicija, ki se začne v stopnji 0.5 %, nato pa jo s povprečenjem povečate do stopnje 1.0 %, imela slabšo likvidacijsko ceno od tiste, ki ste jo izračunali ob vstopu. Pri kritju cross margin pa si pozicije delijo zavarovanje, zato je preživetje vaše dolge pozicije BTC odvisno od dogajanja pri vaši kratki poziciji ETH. Če kritje cross margin simulirate kot nabor neodvisnih izoliranih pozicij, ste korelacijsko strukturo lastnega računa obrnili na glavo.
Tretji napačni pristop: likvidacijo izvedete po napačni ceni, ob napačnem času in po napačni izvršilni ceni
Recimo, da ste pravilno določili sprožilno raven. Zdaj pa: katera cena jo preseže, kdaj to preverite in po kakšni ceni se pozicija izvrši?
Likvidacijo sproži mark cena, izračunana iz indeksa več promptnih borz z zglajeno komponento osnove, ki je namenoma zasnovana tako, da se upre špici na eni sami borzi. Stop-loss se glede na vašo nastavitev verjetno sproži ob zadnji sklenjeni ceni. Ti dve ceni se razhajata prav takrat, ko je to najpomembnejše. Med likvidacijskim plazom lahko zadnja cena terminske pogodbe za desetine sekund odstopa 1–2 % pod mark ceno. Backtest, ki stop-loss in likvidacijo izvede na podlagi iste najnižje vrednosti OHLCV, modelira borzo, ki ne obstaja.
Tukaj sta obe napaki prisotni hkrati in se ne izničita. Če uporabite zadnjo ceno, boste likvidirani ob špicah, ki jih borza prezre. Če uporabite mark ceno, spregledate primer, ko se je premaknila sama mark cena — odstopanje indeksa na promptni borzi je resničen način, da vas likvidirajo po ceni, ki se na terminski borzi, kjer ste trgovali, sploh ni pojavila.
Potem je tu še izvršitev. Naivni sistemi zaprejo pozicijo po likvidacijski ceni in zabeležijo izgubo, kot da bi šlo za stop-loss. V resnici likvidacijski sistem prevzame pozicijo po stečajni ceni — ravni, pri kateri je vaše kritje natanko nič, ki je slabša od sprožilne cene — nato pa zaračuna še pristojbino za izvedbo likvidacije, odvisno od stopnje in na nižjih stopnjah približno 1 % nominalne vrednosti. Pri 20x je 1 % nominalne vrednosti 20 % vašega preostalega kritja. Če sistem pozicijo izvrši pod stečajno ceno, razliko krije zavarovalni sklad; na nekaterih borzah pa ob izčrpanju sklada socializirana izguba seže tudi do dobičkonosnega dela knjige naročil. Vaša realizirana izguba ni padec do likvidacijske cene. Je večja, presežek pa je največji prav tiste dni, ko je knjiga naročil tako plitva, da so razmere najslabše.
Tudi vprašanje časa iz mehanike znotraj sveče je tukaj pomembno, posledice pa so ostrejše kot običajno. Če 1-minutna sveča vsebuje tako vaš cilj dobička kot likvidacijsko raven, bo backtest, ki pred preverjanjem kritja preveri izstope, brez težav zabeležil dobiček. Borza preverja kritje ob vsaki posodobitvi mark cene, približno enkrat na sekundo, še pred vsem drugim, kar bi se morda želelo zgoditi.
Kaj mora sistem spremljati
Nič od tega ni eksotično. Sistem mora hraniti stanje. Račun je objekt s stanjem, ne časovna vrsta donosov, in ob vsaki sveči se posodobi v vrstnem redu, po katerem bi ga posodobila borza:
- Stanje denarnice in nerealizirani PnL, ločeno. Razmerje kritja je vzdrževalno kritje, deljeno s stanjem kritja, ki vključuje nerealizirani PnL. Če ju enačite, je videti, kot da je izgubljajoča pozicija bolje zavarovana, kot je v resnici.
- Tabela stopenj za vsak simbol z različicami po datumu. Stopnje se posodabljajo. Backtest za leto 2023, izveden z lestvico stopenj za leto 2026, vsebuje neopazno pristranskost zaradi pogleda v prihodnost — navadno v vašo korist, saj so borze sčasoma za glavne instrumente na splošno omilile zahteve.
- Časovna vrsta mark cene, ne le klini. Če ne morete pridobiti zgodovinskih podatkov o mark ceni, to navedite med rezultati in uporabite konservativen približek. Nikoli je tiho ne nadomestite z zadnjo ceno.
- Najprej preverite kritje v vrstnem redu dogodkov znotraj sveče, pred stop-lossi, ciljnimi cenami, signali ali uravnoteženjem portfelja.
- Izvršitve po stečajni ceni in pristojbina za izvedbo likvidacije, pri čemer stopnjo provizije preberite iz iste vrstice tabele stopenj kot MMR.
- Končno stanje, iz katerega ni vrnitve. Ko kapital doseže nič, se izvajanje konča. Brez ponovne postavitve osnove, brez »predpostavimo, da trgovec doda sredstva«, brez nadaljevanja časovne vrste z novo nominalno vrednostjo.
Zadnja točka povzroči največ razprav. Vedno se najde kdo, ki poudari, da bi prava trgovalna miza dodala več zavarovanja, zato je konec simulacije nerealno strog. Morda. Toda trditev »ta strategija deluje, če ji po zlomu nenehno dodajate denar« si zasluži, da jo povemo prav s temi besedami in namerno preverimo, pri čemer so dodatna sredstva izrecen vhodni podatek, ne pa prikrito privzeto pravilo. Ko jo zapišete pošteno, večina ugotovi, da tega sploh ni mislila.
Praktična korist vsega tega: ko isto strategijo vzporedno izvajate na papirju in na borzi v živo, bi se moralo razmerje kritja, ki ga poroča borza, in tisto, ki ga izračuna vaš simulator, ves dan ujemati znotraj ene ali dveh bazičnih točk. To lahko brezplačno preverite vsako minuto pri vsaki odprti poziciji. To je najcenejši preizkus enakovrednosti v celotnem skladu in skoraj nihče ga ne izvaja — kadar se številki razideta, ima borza prav, vi pa imate napako, ki jo je vredno najti, preden jo najde padec.
← Vse objave

