Iš naujo paleidome išsaugotą atgalinį testą ir gavome kitokią nuosavo kapitalo kreivę. Tas pats strategijos kodas, tas pats laikotarpis, tas pats simbolis. Galutinis likutis skyrėsi 1.8%, o trys sandoriai pasislinko per vieną žvakę.
To pakanka, kad tyrimo rezultatu būtų sunku pasitikėti. Jei komandos draugas, būsima jūsų versija ar prekybos demonstracinėje aplinkoje paslauga negali atkurti paleidimo, neįmanoma pasakyti, ar pakeitimas pagerino strategiją, ar tik pakeitė eksperimentą. Štai kokia seka vadovavomės ieškodami nuokrypio priežasties.
1 diena: užrašėme, ką reiškia „tas pats paleidimas“
Pirmoji mūsų klaida buvo laikyti strategijos failą visu eksperimentu. Taip nebuvo. Paleidimas taip pat priklausė nuo įvesties duomenų, variklio versijos, kalendoriaus, finansinių priemonių metaduomenų ir vykdymo nuostatų. Kodas aprašė tik dalį skaičiavimo.
Prieš ką nors keisdami, parengėme paleidimo aprašą. Jame užfiksavome strategijos commit, duomenų momentinių kopijų identifikatorius, laikotarpį, prekybos vietą, mokesčių grafiką, finansavimo šaltinį, pavedimų įvykdymo modelį ir programinės įrangos versijas. Taip pat išsaugojome gautus pavedimus ir įvykdymus, nes vien nuosavo kapitalo kreivė neparodo, kur du paleidimai pirmą kartą išsiskyrė.
| Artefaktas | Ką užfiksuoti | Kodėl tai svarbu |
|---|---|---|
| Rinkos duomenys | Momentinės kopijos ID, schemos versija, korekcijos | Tiekėjai taiso istorinius duomenis ir peržiūri įmonių veiksmų korekcijas |
| Vykdymas | Mokesčių lygis, finansavimo seka, įvykdymo ir poveikio rinkai nuostatos | Numatytosios nuostatos ir sąskaitos prielaidos keičia rezultatus |
| Vykdymo aplinka | Kodo commit, variklio ir priklausomybių versijos | Bibliotekos gali pakeisti eiliškumą, apvalinimą ar indikatorius |
| Rezultatas | Pavedimai, įvykdymai, pozicijos ir metrikos | Parodo, kur paleidimų rezultatai ima skirtis |
2 diena: lyginome sandorius, o ne Sharpe
Suvestinės metrikos klaidino. Abiejų paleidimų Sharpe buvo beveik vienodas, tačiau įvykdymų žurnaluose matėsi pirmasis neatitikimas per finansavimo atsiskaitymą. Viename paleidime tarifas buvo pritaikytas pozicijai, atidarytai atsiskaitymo laiko žyma, kitame – pozicijai po to laiko žymos balansavimo.
Strategijos kodas nebuvo pasikeitęs. Pasikeitė variklio įvykių eiliškumas. Nedidelis versijos atnaujinimas aiškiai apibrėžė seką, kuri anksčiau priklausė nuo to, kaip atsitiktinai surikiuojami du įvykiai.
Paleidimo sutartyje aiškiai nurodėme eiliškumą: finansavimą taikyti pozicijai, laikytai iki atsiskaitymo, tada apdoroti strategijos sprendimus tai laiko žymai. Tiksli tvarka gali skirtis pagal prekybos vietą ir variklį. Klaida – palikti ją neapibrėžtą.
3 diena: paaiškėjo, kad „tas pats“ duomenų failas skiriasi
Nustačius įvykių eiliškumą, likę neatitikimai telkėsi keliuose akcijų sandoriuose. Tiekėjas buvo pataisęs istorinę akcijų skaidymo korekciją. Failo pavadinimas ir eilučių skaičius buvo tokie patys kaip anksčiau, todėl atrodė, kad jis nepasikeitė.
Dabar kiekvienos nekintamos duomenų momentinės kopijos kontrolinę sumą apskaičiuojame ir kartu saugome korekcijų politiką. Maiša parodo, ar baitai pasikeitė, bet nepaaiškina kodėl. Todėl apraše taip pat nurodome šaltinį, gavimo laiką ir transformavimo versiją. Jei duomenys peržiūrimi, ši informacija tampa rezultato dalimi.
Atkuriamas atgalinis testas turi atsakyti į klausimą: „Kurią praeities versiją jis matė?“
4 diena: radome vieną nepastebimą numatytąją nuostatą
Paskutinis skirtumas buvo maker mokestis, nustatytas į nulį, nes strategijos konfigūracijoje šis laukas nebuvo nurodytas. Naujesnis variklis pritaikė numatytąjį sąskaitos mokestį. Vien ši numatytoji nuostata pakankamai pakeitė ribinius sandorius, kad paaiškintų didžiąją galutinių likučių skirtumo dalį.
Ekonomiškai reikšmingas nuostatas nurodėme aiškiai, o variklį nustatėme įrašyti galutinę konfigūraciją į paleidimo žurnalą. Numatytosios nuostatos patogios tyrinėjant. Jos nėra patikimas pagrindas lyginti rezultatus skirtingu metu.
Ko kitą kartą nedarytume
Pusę dienos praleidome lygindami suvestines metrikas, kol patikrinome pirmąjį nesutampantį įvykdymą. Nuo to nepradėkite. Surikiuokite abu įvykių žurnalus pagal laiko žymą ir palyginkite pirmąjį neatitikimą; vėlesni skirtumai dažnai kyla dėl tos pačios priežasties.
Taip pat atsisakytume minties, kad konteinerio atvaizdas savaime leidžia atkurti paleidimą. Jis užfiksuoja didelę programinės įrangos aplinkos dalį, bet ne išorinį duomenų failą, vykdymo metu gautą mokesčių grafiką ar tiekėjo peržiūrėtus istorinius duomenis.
Pasikeitus atgaliniam testui, išsaugokite abiejų paleidimų aprašus ir žurnalus, tada vienu metu taisykite tik vieną nuokrypio šaltinį. Naudingas rezultatas – ne vien kreivė, kurią galima atkurti. Tai įrašas, paaiškinantis, kokie duomenys ir prielaidos ją sukūrė ir kodėl kitas paleidimas gali skirtis.
← Visi įrašai


