Yra klausimas, kurio išvengia kiekvienas backtestas: ar tas pats kodas, maitinamas ta pačia rinka realiu laiku, būtų pasielgęs taip pat? Į jį neatsakysite dar vienu backtestu. Atsakyti galima tik paleidus strategiją su gyvais duomenimis ir tikra vykdymo semantika, o paskui patikrinus – sandoris po sandorio – ar abu pasauliai sutampa. Šį patikrinimą atliekame kasdien, automatiškai, ir jis tapo produktyviausiu klaidų medžiotoju visoje platformoje.
Pirmoji diena: pastatyti veidrodį
Kiekviena paaukštinta strategija sukasi savo izoliuotame gyvame mazge ir vartoja tikrus biržos srautus: gyvas kotiruotes vykdymui, tikrus spredus, tikras sesijų valandas. Jokios bendros būsenos tarp strategijų (šitą išmokome skaudžiuoju būdu – bendrame mazge vienos strategijos pozicijų užklausos persiliedavo į kitos). Kiekvienas įvykdymas įrašomas kartu su signalo reikšme, kuri jį sukėlė.
Kas rytą: pakartoti ir palyginti
Kasdienė užduotis paima kiekvienos strategijos popierinės prekybos laikotarpį, paleidžia identišką kodą per backtesto variklį tuo pačiu laikotarpiu su katalogo duomenimis ir sugretina įvykdymus vienas su vienu: ta pati pusė, ta pati laiko žymos paklaida, tas pats dydis. Rezultatas – ne koreliacija ir ne nuojauta. Tai lentelė: sutapo, tik popieriuje, tik pakartojime. Sveika strategija rodo 54 iš 55 sutapusių. Nesveika tiksliai pasako, kuris sandoris ir kada išsiskyrė.
Kas lūžo – tokia tvarka, kokia lūžo
- Įvykdymai apšilimo metu. Gyvas mazgas tiekė istoriją indikatoriams apšildyti – o strategijos su savais barų apdorojimo metodais linksmai ja prekiavo. Backtestai tų fantominių įėjimų niekada nematė. Pataisa buvo pateikimo sluoksnyje, o ne strategijoje, nes kitaip šią klaidą paveldi kiekviena strategija.
- Nuoseklus kelių kojų apšilimas. Skerspjūvio strategija šildėsi po vieną instrumentą; kiekviena koja matydavo tuščias kaimynes, o inkaras taip ir neinicializuodavo. Gyvai ji neprekiavo nieko; pakartota – prekiavo puikiai. Nulis sutapusių sandorių – bet tik palyginimas tai pasakė balsu.
- Kainos tikslumo avarijų ciklai. Gyvi aggTrade tikai ateina kitokio tikslumo, nei tikėjosi smėlio dėžės instrumentas. Mazgas suko avarijų ciklą ties tvirtinimu, kurio backtestas niekada nebūtų sukėlęs, nes katalogo barai jau normalizuoti.
- Perkrovimo amnezija. Proceso perkrovimai iš naujo paleisdavo įėjimo logiką jau egzistuojančioms pozicijoms – balansavimo strategijai perkrovimas tyliai virsdavo perbalansavimu. Realioje prekyboje tai ne pariteto išnaša; tai raudona vėliava su pinigais.
Atkreipkite dėmesį į dėsningumą: nė viena iš šių klaidų nėra signalo klaida. Visos jos yra vykdymo ribos klaidos – apšilimas, būsena, tikslumas, perkrovimai. Būtent šiai klaidų klasei backtestai yra struktūriškai akli, nes backteste vykdymo riba ir yra pats backtesto variklis.
Asimetrijos, kurias paliekame sąmoningai
Abu pasauliai tyčia nėra identiški. Backtestas PnL viduje nuskaičiuoja modeliuotą pusės spredo dydį plius kvadratinės šaknies poveikį; popierinė prekyba moka tikrą spredą įvykdymo kainoje ir jokio poveikio modelio neturi. Pridėjus modeliuotą spredą popierinei prekybai (arba tikrąjį – backtestams) skaičiuotume dvigubai. Paritetas reiškia tuos pačius sprendimus, tuos pačius įvykdymus paklaidos ribose, o ne bitas į bitą sutampantį PnL. Žinoti, kurie skirtumai yra principiniai, o kurie – klaidos, ir sudaro didžiąją disciplinos dalį.
Backtestas yra hipotezė. Popierinė prekyba yra eksperimentas. Pakartojimo paritetas yra laboratorinis žurnalas, pagaunantis jus mulkinant patį save.
Jei valdote strategijas ir reguliariai nelyginate gyvo elgesio su pakartotu, turite klaidų kategoriją, kurios niekada nesate matę. Mes tokią randame maždaug kas porą savaičių, ir kiekviena jų iš backtesto vidaus buvo nematoma.
← Visi įrašai
