En række med markedsdata kan være helt korrekt og stadig være ubrugelig som grundlag for en backtest. Handlen fandt sted, prisen er rigtig, og tidsstemplet er gyldigt, men feedet kan have leveret dataene for sent, en leverandør kan have rettet dem senere, eller det noterede marked er måske ikke et marked, din strategi havde adgang til.
Hvis du vil vide, om historiske data kunne handles på, skal du kontrollere mere end hændelsens tidsstempel. Du skal vide, hvad rækken beskriver, hvornår den blev tilgængelig for systemet, hvilken handelsplads eller hvilket instrument den repræsenterer, og om kursen eller handlen realistisk kunne danne grundlag for din ordre.
Er en korrekt historisk pris nok til en backtest?
Nej. Nøjagtighed besvarer spørgsmålet: »Hvilken pris registrerede kilden til sidst?« En backtest skal også besvare: »Hvad kunne min strategi vide på beslutningstidspunktet?« og »Hvad kunne den have eksekveret?« Det er forskellige spørgsmål.
Forestil dig, at en kryptohandel bliver gennemført kl. 12:00:00.120, men at din dataleverandørs stream først leverer den til din proces kl. 12:00:00.480. En strategi, der træffer en beslutning kl. .200, kan ikke bruge den handel, selvom hændelsens tidsstempel ligger før beslutningen. Hvis den historiske fil kun gemmer hændelsestidspunktet, kan backtesten ubemærket give strategien adgang til information, som dens liveproces endnu ikke ville have modtaget.
| Tid eller felt | Hvad det fortæller dig | Fejl i backtesten, hvis det mangler |
|---|---|---|
| Hændelsestidspunkt | Hvornår børsen siger, at hændelsen fandt sted | At forveksle markedstidspunkt med strategiens adgang til informationen |
| Modtagelsestidspunkt | Hvornår din dataindsamler modtog beskeden | At bruge forsinkede data, som om de var ankommet med det samme |
| Sekvens- eller opdaterings-ID | Hvor hændelsen hører til i feedets rækkefølge | At anvende opdateringer i forkert rækkefølge eller springe dem over uden varsel |
| Revisionstidspunkt | Hvornår en rettet historisk værdi blev kendt | At backteste med en værdi, som ikke fandtes i det oprindelige feed |
Hvis dit arkiv mangler modtagelsestidspunkter, så vær ærlig om begrænsningen. Du kan teste en antagelse om latenstid eller begrænse konklusionen til forskning baseret på hændelsestidspunkter. Du kan ikke genskabe det præcise informationsgrundlag ud fra tidsstempler, der aldrig blev gemt.
Hvordan afgør jeg, om en kurs kunne eksekveres?
Begynd med det marked, din ordre ville være sendt til. Et konsolideret bedste købs- og salgstilbud kan sammenfatte flere handelspladser; det beviser ikke, at din konto havde adgang til den viste mængde, at kursen stadig var tilgængelig, da ordren ankom, eller at handelspladsen ville acceptere din ordretype.
Ved en markedsordre er en udførelse til midtkursen som regel ren fiktion. Et mere brugbart skøn gennemgår den synlige ordrebog i forhold til ordrestørrelsen og lægger derefter gebyrer samt en antagelse om latenstid eller markedspåvirkning til. Hvis du kun har data fra bedste købs- og salgskurs, så begræns konklusionen: Du kan estimere det første niveau, men du kan ikke udlede dybde, der aldrig blev registreret.
Ved en limitordre betyder det ikke, at du blev fyldt, blot fordi prisen blev ramt. Ordrer foran din kan først opbruge den tilgængelige mængde. Køpositionen kan som regel ikke fastslås ud fra almindelige øjebliksbilleder, så en udfyldningsregel baseret på, at prisen blev ramt, bør betragtes som et optimistisk scenarie, ikke som et faktum om, hvad der skete.
En 1-minutsbar kan fortælle dig, at laveste kurs krydsede din limitpris. Den kan ikke fortælle dig, om din hvilende ordre nåede handelspladsen før lavpunktet, hvor meget der blev handlet dér, eller hvor stor en kø der lå foran dig.
Hvad bør jeg kontrollere, før jeg stoler på et markedsdataarkiv?
Jeg begynder med de helt grundlæggende egenskaber. De afslører flere fejl i research end en avanceret eksekveringsmodel, der er bygget oven på et defekt feed.
- Dækning: Mangler der tidsintervaller, er der dublerede hændelser eller huller i sekvensen, eller forekommer der uforklarlige perioder med nul volumen?
- Markedsidentitet: Henviser symbolet til samme børs, kontrakt, noteringsvaluta og instrumentspecifikationer gennem hele perioden?
- Tilgængelighed: Er både hændelses- og modtagelsestidspunkter bevaret? Hvis ikke, hvilken antagelse om forsinkelse afgrænser resultatet?
- Rettelser: Kan du skelne den oprindelige besked fra senere efterregistreringer eller revisioner fra leverandøren?
- Enheder: Fortolkes priser, mængder, kontraktmultiplikatorer og tidsstempler konsekvent?
Det sidste tjek lyder næsten for basalt. Jeg brugte engang en formiddag på at undersøge et tilsyneladende skift i volatilitetsregimet, som viste sig at skyldes, at et mængdefelt skiftede enhed efter en migrering af feedet. Diagrammet var flot; enheden var forkert.
Hvordan kan jeg teste, om dataenes tilgængelighed ændrer resultatet?
Kør en lille følsomhedstest omkring strategiens beslutningsgrænse. Forsink data, der kan bruges, med realistiske intervaller, kassér opdateringer, hvor sekvensen ikke hænger sammen, og sammenlign udfyldninger med den faktiske ordrebog på handelspladsen, hvis du har den. Rapportér både det oprindelige og det forringede resultat. Hvis selv en lille forsinkelse fjerner effekten, kan strategien være afhængig af en informationsfordel, som din dataindsamling ikke pålideligt kan levere.
Et konkret eksempel: Antag, at et signal udløses, når bedste købspris stiger med ét tick. Afspil det én gang med børsens hændelsestidspunkt og én gang med dataindsamlerens modtagelsestidspunkt. Hvis versionen med hændelsestidspunkt giver 40 handler, mens versionen med modtagelsestidspunkt giver 27, er forskellen en del af strategiens evidens. Det samme gælder afkastet ved hver afspilning. Skjul ikke det svagere resultat, fordi dets data ser mindre elegante ud.
Paper trading er et nyttigt næste tjek, fordi det afslører forsinkelser i feedet, forældede kurser, fejl i symboltilknytningen og begrænsninger på handelspladsen gennem den samme driftsvej, som dit researchsystem bruger. Det genskaber stadig ikke alle køpositioner eller al markedspåvirkning i livehandel. Hold den begrænsning synlig.
Hvad betyder »omsættelige data« i praksis?
Det betyder, at backtesten kan forklare, hvornår en observation fandt sted, hvornår strategien kunne bruge den, hvilket marked den kom fra, og hvilken dokumentation for eksekvering der understøtter den antagne udfyldning. En ren prisserie er et udgangspunkt. Researchen bliver troværdig, når antagelserne om timing, adgang og udfyldning tåler eftersyn, og resultatet stadig giver mening, når du gør dem mindre fordelagtige.
← Alle indlæg


