Den farligste tidsfeilen i en backtest kan overleve en perfekt kontroll av tidsstemplene. To hendelser kan begge være merket 10:00:00.000 og likevel ha skjedd i en rekkefølge simulatoren din bare har gjettet seg fram til.
Dette er viktig når en strategi reagerer på mer enn ferdige candlesticks: en kursoppdatering, en handel, et varsel om funding, en statusendring hos en børs eller en ordrebekreftelse for din egen ordre. Et tidsstempel forteller deg når en hendelse er merket. Det forteller kanskje ikke når strategien din kunne reagere på den.
Hva endrer hendelsesrekkefølgen?
Se for deg en strategi som kjøper når beste ask faller under $100.00. I samme millisekund registrerer feeden en ask-oppdatering til $99.99 og en handel til $99.99. Hvis backtesten behandler handelen først og deretter kursoppdateringen, ser strategien den nye ask-kursen og sender inn en ordre. Det kan også være greit å behandle kursoppdateringen først, forutsatt at hendelsen faktisk var tilgjengelig. Men hvis handelen tok den viste likviditeten før ordren kom fram, er en utførelse på $99.99 oppdiktet.
Når rader sorteres kun etter tidsstempel, må simulatoren velge en rekkefølge for hendelser med samme tidspunkt. Filrekkefølge, symbolrekkefølge eller en spørringsplan for databasen kan dermed bli en utilsiktet utførelsesregel. Egenkapitalkurven kan endre seg selv om de underliggende dataene er uendret.
Det finnes en god måte å se hvor vilkårlig dette kan bli: sorter hendelser med samme tidspunkt etter symbolnavn i stedet for ankomstsekvens. En strategi som handler flere aktiva, kan da oppføre seg annerledes bare fordi én ticker sorteres før en annen.
Hvilke klokker bør en backtest holde styr på?
Markedsdata og ordrehåndtering involverer ofte flere ulike tidspunkter. Behold feltene kilden din oppgir, og beskriv betydningen deres presist. For mange feeder er både børsens tidsstempel og det lokale mottakstidspunktet nyttige; ingen av dem er en universell fasit for hva alle markedsaktører så.
| Klokke | Hva den registrerer | Hva den ikke kan bevise alene |
|---|---|---|
| Tidspunkt for børshendelse | Når børsen oppgir at en hendelse fant sted | Rekkefølgen en annen feed eller prosessen din observerte den i |
| Mottakstidspunkt | Når datainnsamleren din mottok meldingen | Når strategien din var ferdig med å behandle den |
| Beslutningstidspunkt | Når koden din evaluerte signalet | At den oppgitte prisen fortsatt var tilgjengelig |
| Ordreankomsttidspunkt | Når børsen kunne behandle ordren | En utførelse, med mindre matchingreglene og likviditeten tilsier det |
For historiske data uten mottakstidspunkter bør du oppgi hva du antar. En backtest kan behandle børshendelser i rekkefølge og legge inn en fast forsinkelse på 5 ms fra beslutning til ordreankomst. Det er en modell, ikke en gjenskaping av historikken. Hvis du mangler sekvensnumre for børshendelser med samme tidsstempel, er regelen du bruker for å bryte likheten også en antakelse.
Hvordan modellerer jeg hendelser med samme tidspunkt?
Ta først vare på sekvensnumrene fra kilden når de finnes. Et sekvensnummer gir en sikrere rekkefølge innenfor feeden enn et tidsstempel, selv om sekvensnumrene kan være separate på tvers av kanaler eller produkter.
Gjør deretter simulatorens behandlingsregel tydelig. For hver hendelse må du avgjøre om den kan oppdatere informasjonen strategien har, endre tilgjengelig likviditet, utløse en ordre eller bekrefte en ordre. Dette er ulike handlinger; når de slås sammen til «behandle rad», kan umulige utførelser snike seg inn.
- Bruk bare markedsinformasjon som har kommet fram innen strategiens beslutningstidspunkt.
- Opprett ordren, og flytt den deretter fram til det modellerte ankomsttidspunktet på børsen.
- Tillat utførelse bare mot kvalifisert likviditet etter ankomst, i tråd med utførelsesantakelsene for ordretypen.
- Registrer inndataene, hendelsesrekkefølgen og forsinkelsen som ble brukt for hver simulert utførelse.
For en strategi basert på candlesticks kan dette være mer apparat enn spørsmålet krever. Hvis signalet bruker ferdige 1-minuttscandlesticks og ordrer utføres ved åpningen av neste candle med en konservativ kostnadsmodell, vil rekkefølgen på millisekundnivå trolig ikke endre forskningskonklusjonen. Poenget er å tilpasse detaljnivået for timing til påstanden backtesten fremsetter.
Kan jeg stole på en backtest uten data om ankomsttid?
Du kan fortsatt bruke den, men vær tydelig på begrensningene. Hvis strategien handler langsomt og har romslige risikogrenser, kan noen få millisekunder være uten betydning. Hvis den reagerer på flyktige kurser, konkurrerer om plass i køen eller er avhengig av et lead-lag-signal på tvers av børser, kan manglende ankomsttider være avgjørende for resultatet.
Kritikere har rett i at presis timing av hendelser kan gi falsk presisjon. Historiske feeder er ufullstendige, klokker driver, og tidsstempler fra børsen viser ikke alle nettverkshopp. En simulator med nanosekundfelt kan fortsatt bygge på en grov antakelse om utførelse.
Test derfor følsomheten i stedet for å hevde at du vet sikkert: spill av dataene på nytt med plausible regler for rekkefølgen på hendelser med samme tidspunkt og ulike ordreforsinkelser, og sammenlign deretter antall handler, utførelsespris og hvilke signaler som består. Hvis resultatet avhenger av en rekkefølge dataene ikke kan fastslå, hører den avhengigheten hjemme i forskningsrapporten. En backtest kan være nyttig selv med en unøyaktig klokke. Den må bare være ærlig om hvilke tidspunkter den faktisk kjenner.
← Alle innlegg


