13. syyskuu 2026 · toteutus

Kuinka paljon viivettä backtestiin pitäisi lisätä? Mittasimme jokaisen millisekunnin omasta järjestelmästämme

Kuinka paljon viivettä backtestiin pitäisi lisätä? Mittasimme jokaisen millisekunnin omasta järjestelmästämme

Neljä lukua, kaikki mitattu omasta paperikaupankäyntijärjestelmästämme: yksi strategia, 1 minuutin BTCUSDT-perpetuaalisignaalit, 31 päivää ja 1,418 toimeksiantoa. Mediaaniaika kynttilän sulkeutumisesta siihen, että pörssi kuittaa toimeksiannon: 195 ms. 99. persentiili: 2,970 ms. Mediaani 1 %:lla minuuteista, joilla toteutunut volatiliteetti oli suurin: 840 ms. Ja viivevakio, joka oli backtestin asetuksissa suurimman osan edellisestä vuodesta: 0.

195 msmediaani kynttilän sulkeutumisesta toimeksiannon kuittaukseen
2,970 msp99, sama polku
840 msmediaani volatiliteetin ylimmän 1 %:n minuuteilla

Kolme näistä luvuista ovat tylsiä. Kaikki tietävät, että nolla on väärin, ja lopulta kaikki korvaavat sen jollakin. Yleensä se jokin on vakio, jonka joku on valinnut näppituntumalla. 100 ms, 250 ms, ”ollaan varman päälle, 500”. Todella tärkeä luku on 840, koska se kertoo, että viive riippuu markkinatilanteesta. Juuri niissä markkinatilanteissa, joissa viive venyy, signaalisi luulee löytäneensä jotain.

Mihin 195 millisekuntia kuluu

Tässä on koko viivebudjetti mitattuna vaihe vaiheelta, kun jokaisessa välietapissa kirjattiin aikaleima monotonic clock -kellolla. Palvelin on AWS-instanssi alueella ap-northeast-1, samassa alueessa kuin kaupankäyntipaikan päätepisteet. Tämä on suunnilleen paras mahdollinen kokoonpano tavalliselle toimijalle, joka ei ole sijoittanut palvelintaan samaan konesaliin.

Vaihe p50 p95 p99
Kynttilän sulkeutumisesta WS kline-closed -tapahtuman vastaanottoon 128 ms 402 ms 1,940 ms
Jäsennys + piirretilan päivitys 3 ms 9 ms 28 ms
Päätös: mallin evaluointi + riskitarkistukset 11 ms 22 ms 60 ms
Toimeksiannon lähetys → pörssin kuittaus 47 ms 180 ms 1,100 ms
Päästä päähän (mitattu, ei summattu) 195 ms 690 ms 2,970 ms

Kaksi asiaa ennen kiinnostavaa osuutta. Ensinnäkin mediaanit eivät summaudu: 128 + 3 + 11 + 47 = 189, mutta mitattu päästä päähän -mediaani on 195. Persentiilit eivät ole yhteenlaskettavia. Jos arvioit viiveen laskemalla yhteen vaiheiden p99-arvot, saat 3,128 ms, vaikka todellinen p99 on 2,970. Tässä ero on pieni; jos vaiheet korreloivat toiseen suuntaan, tulos voi olla täysin pielessä. Mittaa koko polku.

Toiseksi katso ylintä riviä. Kaksi kolmasosaa mediaaniviiveestä kuluu odottaessa pörssin ilmoitusta kynttilän sulkeutumisesta. Ei verkkoon, koodiisi tai toimeksiannon reititykseen. Kaupankäyntipaikka kokoaa kaupat kline-kynttiläksi, päättää minuutin olevan ohi ja lähettää päivityksen. Sen edellä on jono, joka on yhteinen kaikille kyseisen virran tilaajille.

840

Kun jaamme kaikki 1,418 toimeksiantoa signaalin tuottaneen minuutin toteutuneen volatiliteetin mukaan, jakauma hajoaa osiin.

Signaalikynttilän volatiliteettiluokka Toimeksiantoja p50 päästä päähän p99 päästä päähän
Alin kvartiili 201 141 ms 488 ms
Kaksi keskimmäistä kvartiilia 796 183 ms 1,210 ms
Ylin kvartiili 407 312 ms 2,880 ms
Kaikkien minuuttien ylin 1 % 14 840 ms 4,100 ms

Kaikki vaiheet hidastuvat yhtä aikaa, ja siksi vaikutukset kasaantuvat. Kaupankäyntipaikan kokoamis- ja lähetysjono kuormittuu täsmäytysmoottorin kuormasta, joten minuutin, jolla on 11,000 kauppaa, päivitys lähtee myöhemmin kuin minuutin, jolla on 600 kauppaa. Oma prosessisi käsittelee samassa aikaikkunassa enemmän syvyystietojen päivityksiä ja kauppatapahtumia, joten piirretilan päivitys kestää tavallisen 3 ms:n sijaan 28 ms. REST-toimeksiantopolku kilpailee kaikkien muiden paniikin kanssa, ja vastaan tulee satunnainen 503-virhe ja uusintayritys, joka vie yksinään kokonaisen sekunnin. Otoksessamme signaalikynttilän kauppamäärän ja päästä päähän -viiveen korrelaatiokerroin oli 0.41. Ei valtava. Mutta riittävä tekemään yhdestä vakiosta kelvottoman.

Ensimmäisen seulan läpäisevät strategiat ovat valtaosin läpimurtoihin, käänteisiin, hintapoikkeamiin ja likvidaatiokaskadeihin perustuvia. Ne laukeavat juuri siinä luokassa, jossa viive on pahimmillaan. Momentumisignaali, joka laukeaa vasta minuutin liikkeen ylittäessä 40 bps, on rakenteellisesti järjestetty niin, että sen palvelee aina järjestelmäsi hitain versio.

Käytimme kerran kokonaisen päivän 3.6 sekunnin poikkeaman selvittämiseen. Se ilmaantui suunnilleen samaan aikaan joka yö. Syy oli logrotate: se kopioi ja katkaisi 2 GB:n tiedostoa samalla EBS-taltiolla, jolle prosessi kirjoitti, ja pysäytti tapahtumasilmukan. Markkina oli syytön. Mittaa ensin ja syytä vasta sitten markkinamikrorakennetta.

Mitä tämä tekee toteutushinnalle

Hinta ehtii liikkua odottaessasi. Satunnaisella minuutilla keskimääräinen signaalin suuntainen epäedullinen hinnanmuutos 195 ms:n mediaaniviiveemme aikana oli noin 1.1 bps. Ylimmän kvartiilin minuuteilla, joilla viive oli 312 ms, se oli 5.8 bps. Ylimmän 1 %:n minuuteilla, joilla viive oli 840 ms, epäedullista hinnanmuutosta kertyi noin 14 bps ennen kuin toimeksianto ehti edes order bookiin.

BTC-perpetuaaleissa spreadin vaikutus tähän on lähes olematon: yksi tick 84,000:n noteerauksessa on 0.012 bps, joten vahinko tulee epäedullisesta hinnanmuutoksesta eikä spreadin ylittämisestä. Kun siirrät saman strategian keskisuuren markkina-arvon perpetuaaliin, myös toinen tekijä alkaa vaikuttaa: otoksessamme parhaan bidin ja askin spread kasvoi rauhallisten minuuttien 1.4 bps:stä ylimmän kvartiilin 6.2 bps:ään, ja syvyys kyseisellä hintatasolla oheni yli puolella. Maksat hinnanmuutoksesta, leveämmästä spreadistä ja heikommasta syvyydestä yhtä aikaa, koska kaikilla on sama syy.

Kun ajoimme samat 31 päivää uudelleen käyttämällä kiinteän 200 ms:n sijaan kynttiläkohtaista ehdollista viivettä, backtestin keskimääräinen avauskurssi oli 3.1 bps huonompi. Ero keskittyi lähes kokonaan 9 %:iin kaupoista. Backtestin ja paperikaupankäynnin välinen avauskurssiero putosi 4.2 bps:stä 0.9 bps:ään. Strategian IS Sharpe laski 1.7:stä 1.1:een, mikä on rehellinen luku ja oli sitä koko ajan.

Mitä asetuksiin sitten pitäisi laittaa

Ei yhtä lukua. Näin toimimme nyt:

  1. Ota otos, älä aseta vakioarvoa. Arvo simuloidun toimeksiannon viive empiirisestä jakaumasta, joka ehdollistetaan kynttilän omaan aktiivisuuteen. Kauppamäärä ja absoluuttinen tuotto riittävät, ja molemmat löytyvät jo tavallisesta kline-tiedosta. Sovita jakauma kerran kaupankäyntipaikkaa ja toimeksiantotyyppiä kohden, sovita uudelleen kuukausittain.
  2. Säilytä jakauman häntä. Älä sovita lognormaalijakaumaa ja kuvittele sen riittävän. p99 syntyy uusintayritysten ryppäistä ja GC-pysähdyksistä, joita mikään tasainen jakauma ei kuvaa. Käytämme empiirisiä kvantiileja ja otannalla uudelleen muodostettua häntää p95:n yläpuolella.
  3. Viive koskee myös peruutuksia. Stop-toimeksiannon korvaamiseen ja suojauksen peruutukseen liittyy sama viive, ja nopeilla markkinoilla peruutuksesi kilpailee toimeksiannon täyttymisen kanssa. Jos simulaattorisi peruuttaa toimeksiannot välittömästi, riskimallisi on kuvitelmaa.
  4. Lisää vanhentumistarkistus ja simuloi se. Me hylkäämme saapuessaan kaikki signaalit, joiden kynttilä on yli 1.5 sekuntia vanha. Tällä on todellinen vaikutus ja todellinen hinta: kauppoja jää huomaamatta, ja backtestin pitää jättää väliin samat kaupat.
  5. Kalibroi uudelleen paperikaupankäyntiä vasten. Paperikaupankäynnistä saat todellisen vertailutiedon. Kirjaa jokaisesta toimeksiannosta aikaleimat kaikissa neljässä välietapissa ja vertaa jakaumia simulaattorin oletuksiin viikoittain.

Sama vaiva muissakin omaisuusluokissa. Yhdysvaltain osakkeet: konsolidoitu markkinadata lisää oman kokoamisviiveensä välittäjän viiveen päälle, ja se pitenee viestimäärän kasvaessa samasta rakenteellisesta syystä. Ennustemarkkinat: useimmissa kaupankäyntipaikoissa toimeksiannot lähetetään vain REST-rajapinnan kautta. Olemme mitanneet alle 100 ms:n mediaaneja, jotka venyvät useisiin sekunteihin, kun ratkaisun julkistus saa kaikki saapumaan samaan aikaan. Kryptojohdannaisoptiot: hinnoittelun pohjana käyttämäsi noteeraus voi olla kaksi sekuntia vanha juuri sillä minuutilla, jolloin kohde-etuus liikkui.

Yleinen virhe on käsitellä toteutusparametria riippumattomana vakiona, vaikka se riippuu samasta tilamuuttujasta, joka ohjaa signaalia. Kulut käyttäytyvät ennustettavasti, rahoituskulut käyttäytyvät ennustettavasti, viive ei. Jos tästä kaikesta painat mieleesi yhden luvun, paina mieleesi suhde: p99 on meillä viisitoista kertaa mediaani, ja signaalimme saapuvat suhteettoman usein lähelle p99:ää.

Mittaa neljän välietapin ajat. Siihen menee iltapäivä, ja se kertoo strategiastasi enemmän kuin toinen viikko parametrien hakua.

viivebacktestauspaperikaupankäyntitoteutuskryptofutuurit
← Kaikki kirjoitukset