On üks küsimus, millest iga backtest kõrvale hiilib: kas seesama kood oleks sama turgu reaalajas saades käitunud samamoodi? Sellele ei saa vastata veel ühe backtestiga. Ainus viis on lasta strateegial joosta reaalajaandmetel päris täitmissemantikaga ja seejärel kontrollida — tehing tehingu haaval —, et kaks maailma on ühel nõul. Teeme seda kontrolli iga päev automaatselt ja see on olnud platvormi kõige viljakam vigadepüüdja.
Esimene päev: ehita peegel
Iga promoteeritud strateegia jookseb omaenda isoleeritud reaalajasõlmes ja tarbib päris börsivooge: täitmisteks reaalajakotatsioonid, päris spreadid, päris sessiooniajad. Strateegiate vahel ei jagata mingit olekut (selle õppetunni saime kätte valuga — jagatud sõlmes lekkisid ühe strateegia positsioonipäringud teise omadesse). Iga täitmine salvestatakse koos signaaliväärtusega, mis selle põhjustas.
Igal hommikul: taasesitus ja võrdlus
Igapäevane töö võtab iga strateegia paper-akna, laseb identse koodi backtest-mootoriga sama perioodi kataloogiandmetel läbi ja seob täitmised üks-ühele: sama suund, sama ajatempli tolerants, sama maht. Väljundiks pole korrelatsioon ega üldmulje. Väljundiks on tabel: kokkulangevad, ainult paper, ainult taasesitus. Terve strateegia näitab 54 kokkulangevust 55-st. Ebaterve ütleb sulle täpselt, milline tehing lahknes ja millal.
Mis katki läks, katkiminemise järjekorras
- Soojendustäitmised. Reaalajasõlm söötis indikaatorite soojendamiseks ajalugu sisse — ja kohandatud baaritöötlejatega strateegiad kauplesid selle pealt rõõmsalt. Backtestid neid fantoomsisenemisi kunagi ei näinud. Lahendus tuli esitamiskihi valvurina, mitte strateegia paranduseks, sest muidu pärib selle vea iga strateegia.
- Järjestikune mitmejalgne soojendus. Üks ristlõikeline strateegia soojendas instrumente ükshaaval; iga jalg nägi tühje naabreid ja ankur ei initsialiseerunud kunagi. Reaalajas ei kaubelnud see midagi; taasesituses kauples kenasti. Null kokkulangevat tehingut — aga ainult võrdlus ütles selle valjusti välja.
- Ticki täpsuse krahhitsüklid. Reaalajas saabuvad aggTrade tickid teistsuguse täpsusega, kui liivakastiinstrument ootas. Sõlm jäi krahhitsüklisse kinnituse otsa, mida backtest poleks kunagi vallandanud, sest kataloogibaarid on juba normaliseeritud.
- Taaskäivituse amneesia. Protsessi taaskäivitused vallandasid sisenemisloogika uuesti positsioonidel, mis olid juba olemas — tasakaalustava strateegia jaoks muutus taaskäivitus vaikselt rebalansiks. Reaalses kauplemises pole see mingi pariteedi joonealune märkus; see on punane lipp, mille küljes on raha.
Pane tähele mustrit: mitte ükski neist pole signaalivea. Kõik on täitmispiiri vead — soojendus, olek, täpsus, taaskäivitused. Just selle veaklassi suhtes on backtestid struktuurselt pimedad, sest backtestis on backtest-mootor ise see täitmispiir.
Asümmeetriad, mida hoiame meelega alles
Kaks maailma ei ole teadlikult identsed. Backtest võtab PnL-i sees modelleeritud poolspreadi pluss ruutjuurmõju; paper maksab päris spreadi täitmishinnas ja mõjumudelit ei ole. Modelleeritud spreadi lisamine paper'ile (või päris spreadi backtestile) tähendaks topeltarvestust. Pariteet tähendab samu otsuseid ja samu täitmisi tolerantsi piires — mitte bitihaaval identset PnL-i. Teadmine, millised erinevused on põhimõttelised ja millised on vead, ongi suurem osa distsipliinist.
Backtest on hüpotees. Paper trading on eksperiment. Taasesituse pariteet on laborimärkmik, mis püüab kinni hetke, mil sa iseennast lollitad.
Kui sa jooksutad strateegiaid ega võrdle regulaarselt reaalajakäitumist taasesitatud käitumisega, siis on sul olemas veaklass, mida sa pole kunagi näinud. Meie leiame ühe umbes iga paari nädala tagant ja iga üks neist oli backtesti seest nähtamatu.
← Kõik postitused
