Kuus nädalat pärast backtesti käivitamist käivitasime selle uuesti sama koodi, konfiguratsiooni ja kuupäevavahemikuga. Lõppomakapital oli erinev. Mitte drastiliselt, kuid piisavalt, et Sharpe'i suhtarv langeks 1.31-lt 1.08-le ja parimana tundunud parameetrikomplekt muutuks.
Strateegia ei olnud muutunud. Ajaloolised andmed olid. Andmepakkuja oli parandanud mitme päeva tehinguid ja küünlaid ning me polnud esimesel käivituskorral täpset sisendandmete hetktõmmist säilitanud. Järgmised päevad kulusid selgitamisele, kas uus tulemus tulenes andmete parandusest, andmetöötluse veast või uurimisprotsessist, mida me ei suutnud korrata.
Esmaspäev: korduskäivitus andis teise tulemuse
Esimene vihje oli väike erinevus likviidses spot-paaris. Meie algses küünlas oli tipphind 62,418. Korduskäivituse tulemus näitas 62,431. See erinevus tundus tühine, kuni jälitasime strateegia sisenemist: selle lävend jäi nende hindade vahele. Mõne küünla muutus tähendas teistsuguseid signaale ja mitu päeva hiljem ka teistsuguseid positsioone.
Võrdlesime päevaseid tehingute arve ja leidsime, et lahknevus algas ühel konkreetsel kuupäeval. Seejärel võrdlesime algandmete ridu, mille põhjal see kuupäev arvutati. Pakkuja praeguses vastuses oli käputäis parandatud tehinguid ja uuendatud koondküünal. Vastusele, mida olime kasutanud, polnud muudatuste logi lisatud.
Andmed käituvadki tavaliselt nii. Börsid parandavad kirjeid; pakkujad täidavad lünki, parandavad vigaseid hinnakirjeid ja kohandavad agregeerimisloogikat. Päring „jaanuari andmete” kohta võib märtsis anda teistsuguse vastuse.
Teisipäev: leidsime puuduva kviitungi
Käivituse kirjes olime talletanud pakkuja nime, sümboli ja kuupäevavahemiku. Me ei talletanud vastust ennast ega iga sisendpartitsiooni sisu räsi. Seega saime tõestada, mida küsisime, kuid mitte seda, millised baidid pakkuja tagastas.
Otsisime üles vanimad vahemällu salvestatud failid ja võrdlesime neid praeguse vastusega. Erinevus ei tulenenud spliti korrigeerimisest ega ajavööndi teisendusest. See oli väike hulk parandatud tehingukirjeid, mis mõjutasid küünalde koostamist. Nii saime ühe võimaliku seletuse kõrvale jätta, kuid vahemälu oli puudulik, mistõttu ei saanud me ikka kõiki mõjutatud küünlaid täpselt taastada.
| Mida talletasime | Millisele küsimusele see vastas | Mis oli puudu |
|---|---|---|
| Pakkuja, sümbol, kuupäevavahemik | Millise päringu käivitus tegi | Vastuse sisu |
| Andmetöötluse versioon | Milline kood küünlad koostas | Täpsed sisendread |
| Käivituse ajatempel | Millal töö käivitasime | Milline pakkuja andmerevisjon oli siis saadaval |
Olime käsitanud „sama päringut” kui „samu andmeid”. See eeldus pani katse paistma tegelikust reprodutseeritavamana.
Kolmapäev: parandus muutis pilti
Kordasime mõjutatud kuupäevade töötlust mõlema saadaoleva andmeversiooniga. Uuendatud küünlad jätsid ära kaks sisenemist ja nihutasid ühe väljumise ühe küünla võrra. Need kolm tehingut selgitasid suurema osa Sharpe'i muutusest. Strateegia oli mõne käivitustaseme lähedase vaatluse suhtes tundlik, kuigi hinnaseeria nägi graafikul peaaegu identne välja.
See ei tähendanud, et algne tulemus oli petturlik või uuendatud tulemus automaatselt parem. See tähendas, et väide vajas täpsustust: vana käivitus kirjeldas tol ajal olemas olnud andmete hetktõmmist, korduskäivitus aga pakkuja praegust ajalugu. Me ei saanud ausalt nimetada üht teise korduseks.
Neljapäev: muutsime uurimistöö kirjet
Lisame nüüd uutele uurimistöö käivitustele muutumatud sisendandmete hetktõmmised. Iga partitsioon saab sisu räsi ning käivituse manifest talletab allika, andmete hankimise aja, skeemi versiooni, korrigeerimispoliitika ja teisenduskoodi versiooni. Suurte andmestike puhul hoiame tegelikke faile sisule adresseeritud salvestuses, nii et identseid partitsioone saab jagada varasemaid versioone üle kirjutamata.
Kui salvestus- või litsentsireeglid ei luba meil algandmeid alles hoida, säilitame tugevaima lubatud kviitungi: räsid, päringu parameetrid, allika revisjoni tunnused ja väikese näidise parsitud ridadest diagnostikaks. Räsi ei taasta andmeid, kuid näitab, kui kaks käivitust ei kasutanud identseid baite.
Reprodutseeritav backtest vajab sisendi identiteeti, mitte ainult andmete URL-i. Talletage, mis saabus, millal see saabus ja kuidas sellest said read, mida teie strateegia kasutas.
Reede: mida me järgmine kord vahele jätaksime
Jätaksime vahele ainult põhinäitajate võrdlemise. Muutunud Sharpe näitab, et midagi muutus, kuid ei ütle, kust põhjust otsida. Alustage ridade arvu ja partitsioonide räsidega, seejärel leidke esimene erinev sisendkuupäev. Sealt edasi võrrelge selles järjekorras teisendatud ridu, signaale, ordereid ja täitmisi.
Samuti ei asendaks me enam vanu andmeid vaikselt parandatud ajalooga. Parandused on kasulikud, kuid vanad käivitused peaksid jääma seotuks oma algsete sisenditega. Uus andmestik peaks looma uue käivituse, mille seos vanemaga on selgelt nähtav.
Meie praktiline reegel on nüüd lihtne: kui korduskäivituse eesmärk on katset korrata, fikseerige andmete hetktõmmis. Kui eesmärk on kasutada parandatud ajalugu, märkige see uueks katseks. Selle eristuse õppimiseks kulus meil mõni päev, kuid manifestis võtab see ühe rea.
← Kõik postitused


