Sešas nedēļas pēc atpakaļtesta veikšanas mēs to izpildījām vēlreiz ar to pašu kodu, konfigurāciju un datumu diapazonu. Beigu kapitāls bija citāds. Atšķirība nebija milzīga, taču pietiekama, lai Sharpe koeficients mainītos no 1.31 uz 1.08 un par labāko izskatītos cits parametru kopums.
Stratēģija nebija mainījusies. Bija mainījušies vēsturiskie dati. Piegādātājs bija pārskatījis vairāku dienu darījumus un sveces, bet pirmajā izpildē mēs nebija saglabājuši precīzu ievaddatu momentuzņēmumu. Nākamās dažas dienas mēs centāmies noskaidrot, vai jaunais rezultāts bija datu labojums, datu apstrādes plūsmas kļūda vai pētījuma process, ko nespējām atkārtot.
Pirmdiena: atkārtotais izpildījums nesakrita
Pirmā pazīme bija neliela atšķirība likvīdā tūlītējo darījumu pārī. Sākotnējā svecē augstākā cena bija 62,418. Atkārtotajā izpildījumā tā bija 62,431. Šī starpība šķita nekaitīga, līdz izsekojām stratēģijas ieejas punktu: tās slieksnis atradās starp šīm cenām. Dažas izmainītas sveces nozīmēja citādus signālus un pēc vairākām dienām — citādas pozīcijas.
Salīdzinājām darījumu skaitu pa dienām un konstatējām, ka neatbilstība sākās vienā konkrētā datumā. Tad salīdzinājām šajā datumā izmantotās neapstrādāto datu rindas. Piegādātāja pašreizējā atbildē bija daži laboti darījumi un pārskatīta apkopotā svece. Atbildei, ko bijām izmantojuši, nebija pievienots izmaiņu žurnāls.
Tā ir parasta datu īpašība. Biržas labo ierakstus, piegādātāji aizpilda iztrūkstošos datus, izlabo kļūdainus darījumus un pielāgo apkopošanas loģiku. Vaicājums pēc “janvāra datiem” martā var atgriezt citu atbildi.
Otrdiena: atradām trūkstošo apliecinājumu
Izpildes ierakstā bijām saglabājuši piegādātāja nosaukumu, simbolu un datumu diapazonu. Taču nebijām saglabājuši pašu atbildi vai katras ievaddatu sadaļas satura jaucējvērtību. Tāpēc varējām pierādīt, ko pieprasījām, bet ne to, kādus baitus piegādātājs atgrieza.
Sameklējām vecākos kešatmiņā saglabātos failus un salīdzinājām tos ar pašreizējo atbildi. Atšķirību neizraisīja sadalījuma korekcija vai laika joslas konvertēšana. To radīja neliels skaits labotu darījumu ierakstu, kas tika izmantoti sveču veidotājā. Tas atspēkoja vienu pieņēmumu, taču kešatmiņa bija nepilnīga, tāpēc joprojām nevarējām precīzi rekonstruēt visas skartās sveces.
| Ko reģistrējām | Uz kādu jautājumu tas ļāva atbildēt | Kā trūka |
|---|---|---|
| Piegādātājs, simbols, datumu diapazons | Kādu pieprasījumu izpilde veica | Atbildes saturs |
| Datu apstrādes plūsmas versija | Kurš kods izveidoja sveces | Precīzās ievaddatu rindas |
| Izpildes laikspiedols | Kad palaidām uzdevumu | Kāda piegādātāja datu versija tobrīd bija pieejama |
Bijām pieņēmuši, ka “tas pats vaicājums” nozīmē “tie paši dati”. Šis pieņēmums lika eksperimentam izskatīties reproducējamākam, nekā tas patiesībā bija.
Trešdiena: labojums mainīja ainu
Atkārtoti apstrādājām skartos datumus, izmantojot abas pieejamo datu versijas. Pārskatītās sveces likvidēja divas ieejas un pārcēla vienu izeju par vienu sveci. Šie trīs darījumi veidoja lielāko daļu Sharpe izmaiņas. Stratēģija bija jutīga pret dažiem novērojumiem, kas atradās tuvu tās aktivizēšanas slieksnim, lai gan cenu laikrinda diagrammā izskatījās gandrīz identiska.
Tas nenozīmēja, ka sākotnējais rezultāts bija krāpniecisks vai pārskatītais rezultāts automātiski bija labāks. Tas nozīmēja, ka apgalvojumam vajadzēja noteikt tvērumu: vecais izpildījums raksturoja tobrīd pieejamo datu momentuzņēmumu, bet atkārtotais — piegādātāja pašreizējos vēsturiskos datus. Mēs nevarējām godīgi apgalvot, ka viens ir otra atkārtojums.
Ceturtdiena: pārveidojām pētījuma ierakstu
Jaunajiem pētījuma izpildījumiem pievienojām nemaināmus ievaddatu momentuzņēmumus. Katrai datu sadaļai piešķiram satura jaucējvērtību, un izpildes manifestā reģistrējam avotu, izgūšanas laiku, shēmas versiju, korekciju politiku un pārveidošanas koda versiju. Lielām datu kopām faktiskos failus glabājam pēc to satura adresētā krātuvē, lai identiskas sadaļas varētu koplietot, nepārrakstot iepriekšējās versijas.
Ja glabāšanas vai licencēšanas noteikumi neļauj paturēt neapstrādātos datus, saglabājam spēcīgāko apliecinājumu, ko noteikumi pieļauj: jaucējvērtības, pieprasījuma parametrus, avota versiju identifikatorus un nelielu analizēto rindu paraugu diagnostikai. Jaucējvērtība nevar atgūt datus, taču tā var parādīt, ka divās izpildēs izmantoti atšķirīgi baiti.
Lai atpakaļtests būtu reproducējams, vajadzīga ievaddatu identitāte, nevis tikai datu URL. Reģistrējiet, kas tika saņemts, kad tas tika saņemts un kā tas tika pārveidots rindās, ko izmantoja jūsu stratēģija.
Piektdiena: ko nākamreiz izlaistu
Mēs izlaistu tikai galveno rādītāju salīdzināšanu. Sharpe izmaiņa pasaka, ka kaut kas ir mainījies, bet neatklāj cēloni. Sāciet ar rindu skaitu un sadaļu jaucējvērtībām, pēc tam atrodiet pirmo datumu, kurā ievaddati atšķiras. Tad salīdziniet pārveidotās rindas, signālus, rīkojumus un izpildes šādā secībā.
Mēs arī vairs klusi neaizstātu vecos datus ar labotu vēsturi. Labojumi ir noderīgi, taču vecajiem izpildījumiem jāsaglabā saikne ar sākotnējiem ievaddatiem. Jauna datu kopa jāizmanto jaunā izpildījumā, skaidri norādot tā saistību ar vecāko izpildījumu.
Tagad mūsu praktiskais noteikums ir vienkāršs: ja atkārtotajam izpildījumam jāatkārto eksperiments, fiksējiet datu momentuzņēmumu. Ja mērķis ir izmantot laboto vēsturi, atzīmējiet to kā jaunu eksperimentu. Mums vajadzēja dažas dienas, lai šo atšķirību apgūtu, un izpildes manifestā tā aizņem vienu rindu.
← Visi raksti


