Täydellisesti toistettava backtesti voi olla vähemmän luotettava kuin hieman muuttuva tulos. Toistettavuus todistaa, että saat saman vastauksen kahdesti; se ei kerro mitään siitä, riippuuko vastaus yhdestä mielivaltaisesta dataotoksesta, kirjaston erikoisuudesta tai piilotetusta oletusarvosta.
Kuulostaa siltä kuin tämä olisi argumentti toistettavuutta vastaan, mutta sitä se ei ole. Lukitse ajo, jotta voit selittää sen. Vaihtele sitten tarkoituksella oletuksia, joiden ei pitäisi ratkaista tulosta. Ensimmäinen vaihe tekee tuloksesta auditoitavan; toinen kertoo, onko sillä mitään merkitystä.
Mitä toistettava backtest oikeastaan osoittaa?
Jos sama koodi, data, konfiguraatio ja satunnaissiemen tuottavat samat kaupat ja mittarit, olet hallinnut yhden tärkeän sekaannuksen lähteen. Agentin ”parannusta” voidaan verrata sen edeltävään ajoon. Virheenkorjaus voidaan erottaa muuttuneesta palkkiotaulukosta. Kollegasi voi tarkastella samaa tapahtumakirjaa ja löytää samat toteutumat.
Tulos on kuitenkin ehdollinen kaikelle, minkä lukitsit. Ajatellaan kryptostrategiaa, jonka historiatiedosto sisältää 1 minuutin kynttilöitä. Tallennat tiedoston tiivisteen, kiinnität koodiversion ja saat jokaisella uudelleenajolla Sharpe-luvuksi 1.4. Jos datantoimittaja myöhemmin korjaa muutaman kynttilän, siisti toistettavuus kuvaa edelleen vanhaa tiedostoa. Se ei kerro, kestääkö signaali korjatun historian tai olivatko kynttilät tuossa muodossa saatavilla tuolloin.
Tiivisteestä on hyötyä: se tekee riippuvuuden näkyväksi. Se ei todista, että riippuvuus olisi harmiton.
Pidä ajo vakiona, haasta havainto
Minusta kaksi kysymystä kannattaa erottaa toisistaan. Pystymmekö rekonstruoimaan juuri tämän ajon? Ja kestääkö tutkimuksen johtopäätös kohtuullisia muutoksia? Ensimmäinen edellyttää muuttumatonta tallennetta; toinen hallittuja muutoksia, yksi kerrallaan.
| Mitä tallennetaan | Mitä vaihdellaan jälkikäteen | Mitä se voi paljastaa |
|---|---|---|
| Raakadatan versio ja tarkistussummat | Datantoimittajan revisio tai toinen lähde | Riippuvuus korjatuista tai toimittajakohtaisista arvoista |
| Koodin commit ja pakettien versiot | Numeerisesti vastaava toteutus | Järjestys-, pyöristys- tai kirjastoriippuvuus |
| Palkkiot, rahoitus ja toteutusoletukset | Perusteltu kustannusväli | Tarvitseeko ohut tuottoetu poikkeuksellisen suotuisan toteutuksen |
| Instrumenttijoukko ja jäsenyys kyseisenä ajankohtana | Vaihtoehtoiset säännöt kelpoisten markkinoiden valintaan | Riippuvuus mukaanotto- tai poissulkupäätöksistä |
Oletetaan esimerkiksi, että futuuristrategia näyttää lähtötason toistoajossa 8 %:n annualisoidun ylituoton. Aja se uudelleen taker-kustannuksilla, jotka ovat 25 % korkeammat, siirtämällä rahoitus seuraavaan havaittuun selvitykseen ja poistamalla vuorollaan kaksi suurinta tuottoon vaikuttanutta positiota. Nämä eivät ole kolme tapaa parantaa mallia. Ne ovat koetinkysymyksiä: kukin selvittää, kannatteleeko jokin uskottava yksityiskohta otsikkotulosta.
Pidä jokainen kokeilu erillisenä. Jos muutat dataa, palkkiotaulukkoa ja toteutuksen ajoitusta yhtä aikaa, huonompi tulos kertoo vähän syistä. Jos kokeilu on epäuskottava, merkitse se stressitestiksi sen sijaan, että esittäisit sitä todennäköisenä lopputuloksena.
Älä sekoita bittitason yhtäläisyyttä numeeriseen totuuteen
Jotkin laskutoimitukset ovat järjestysherkkiä. Liukulukujen yhteenlasku ei ole assosiatiivista, joten monien pienten P&L-arvojen summaaminen eri järjestyksessä voi muuttaa viimeisiä numeroita. Rinnakkaiset pelkistyslaskut, laitteisto ja kirjastoversiot voivat kaikki vaikuttaa tarkkaan tulosteeseen. Yleensä tämä on harmitonta; joskus pieni numeerinen muutos ylittää kynnysarvon, muuttaa positiota ja ohjaa simulaation loppuosan eri polulle.
Siksi säilyttäisin sekä tarkat aineistot että vertailujen toleranssit. Tallenna kauppatapahtumien kirja, älä vain lopullista Sharpe-lukua. Vertaa ensin päätöksiä ja kassavirtoja, sitten mittareita ilmoitetun toleranssin puitteissa. Jos yhden sentin ero vaikuttaa siihen, lähetetäänkö toimeksianto, tarkastele tuota rajaa erikseen.
Hyödyllinen ajotallenne sisältää datan ja koodin tunnisteet, konfiguraation, satunnaissiemenen, suoritusympäristön ja riittävästi välituloksia, jotta mittarin voi jäljittää toteutumiin ja kassavirtoihin. Pelkkä lopputulos ei ole toistettava tutkimusaineisto.
Milloin vaihtelu on kohinaa ja milloin havainto
Kaikki muuttuneet luvut eivät ole kriisi. Eri yhteenlaskujärjestyksestä johtuva pieni mittarin heitto voi jättää kaupat ennalleen. Kynnysarvon lähellä muuttunut kauppa saattaa vaatia tarkastelua. Jos strategia menettää valtaosan tuloksestaan, kun yksi datantoimittaja muuttaa pientä osaa historiasta, se on paljastanut jotain omasta hauraudestaan, vaikka alkuperäinen ajo pysyisi täydellisesti toistettavana.
Robustiustestien kriitikoilla on yhdessä asiassa pointti: oletuksia on helppo muuttaa niin kauan, että haluttu strategia näyttää kestävältä, tai hylätä kelvollinen tulos, koska jokin tarkoituksella äärimmäinen skenaario rikkoo sen. Määrittele uskottavat muutokset etukäteen, raportoi koko joukko ja erottele tavanomaiset vaihtoehdot stressitesteistä. Säilytä sitten lähtötaso, jotta toinen tutkija voi toistaa täsmälleen sen, mitä havaitsit.
Toistettavuus antaa luotettavan lähtökohdan. Seuraava kysymys on hyödyllinen: mitkä vastauksen osat pysyvät samoina, kun ajoa ympäröivä maailma muuttuu tavoilla, joita voi kohtuudella odottaa?
← Kaikki kirjoitukset


