En backtest kan rapportere en fylling til en pris markedet aldri viste. Vanligvis har simulatoren utledet en tilsynelatende plausibel utførelse fra ufullstendige data: barens høyeste og laveste pris, et midtpunkt eller en limitpris som én handel traff. Det kan få handelsloggen til å se presis ut, samtidig som den skjuler hva markedet faktisk tilbød.
Begynn med å spørre hvilken pris ordren din kunne ha blitt utført mot. En bar med siste handelspris viser hvilke priser det ble handlet til i løpet av et intervall. Den forteller ikke hva kjøps- og salgskursen var da ordren din kom inn, hvor mye som var tilgjengelig der, eller om ordren din kunne komme først i køen.
Hvorfor viser backtesten min en fylling utenfor markedsprisen?
Begynn med å være presis om hva «utenfor» betyr. En kjøpsfylling under barens laveste pris eller et salg over barens høyeste pris er en åpenbar regnskaps- eller tidsfeil. En fylling innenfor høyeste og laveste pris kan fortsatt være fiktiv: Prisen kan ha blitt handlet til før ordren eksisterte, på den andre siden av spreaden eller i et volum som var for lite til å fylle ordren din.
Se for deg en 1-minuttsbar med åpningspris 100.00, laveste pris 99.80 og sluttkurs 100.10. Strategien din ser den ferdige baren, sender inn en kjøpsordre, og simulatoren fyller den til 99.80. Denne laveste prisen kan ha blitt nådd nær starten av minuttet, 50 sekunder før signalet. Baren gir ingen indikasjon på at 99.80 var tilgjengelig etter beslutningen.
| Data du har | Hva de viser | Hva de ikke viser |
|---|---|---|
| OHLCV-bar | Observert spenn i handelspriser og volum gjennom et intervall | Prisrekkefølge, kjøps- og salgskurser eller tilgjengelighet da ordren kom inn |
| Handelsposter | Rapporterte handler med tidsstempler og priser | Likviditet i ordreboken eller plassen din i køen |
| Kursene øverst i ordreboken | Beste viste kjøps- og salgskurs på utvalgte tidspunkter | Dybde utover beste nivå eller om en kurs holdt seg mellom målingene |
| Hendelser i ordreboken | Endringer i vist dybde og køhendelser, begrenset av datadekningen | Skjult likviditet, tilgang til handelsplassen eller garantert prioritet |
En annen vanlig årsak er at man forveksler midtpunktet med en pris det faktisk kan handles til. Hvis kursen er 99.99 på kjøpssiden og 100.01 på salgssiden, ser et kjøp til midtpunktet 100.00 ryddig ut i rapporten. Et kjøp som kan handles umiddelbart, betaler vanligvis salgskursen, pluss eventuell markedspåvirkning fra størrelsen. Å kalle midtpunktet en fylling fjerner i det stille halve spreaden.
Kan en limitordre fylles bare fordi markedet nådde prisen?
At prisen blir truffet, viser at en handel ble registrert til limitprisen. Det beviser ikke at den hvilende ordren din ville blitt utført. Hvis andre ordre lå foran din, kan handelsvolumet på den prisen ha vært for lite til å nå plassen din i køen. Handelen kan også ha skjedd på en annen handelsplass, mens ordren din lå et annet sted.
Anta at kjøpslimiten din er 50.00, og at markedet handler 200 aksjer til den prisen etter at du har lagt inn ordren. En simulator som fyller ved pristreff, fyller alle 500 aksjene. En mer forsiktig modell spør hvor mye som ble handlet til eller bedre enn 50.00 etter at ordren kom inn, og tar deretter høyde for anslått kø foran ordren. Uten data på ordrenivå fra ordreboken er køen en forutsetning. Den bør være synlig i resultatene, ikke smugles inn som en sikkerhet.
For et lite forskningssystem vil jeg heller gjøre denne forutsetningen eksplisitt og teste et spenn enn å late som om lysestakedata viser køprioritet. Det riktige spennet avhenger av handelsplassen, ordrestørrelsen og hvor ofte strategien handler. En rolig aksje ved åpning og en lite likvid kryptokontrakt klokken 03:00 UTC er to forskjellige utførelsesproblemer.
Hvordan bør jeg velge en fyllingsmodell for bardata?
Tilpass modellen både til dataene og til påstanden strategien bygger på. En backtest basert på barer kan fortsatt være nyttig for langsomme strategier, men fyllingene bør holde seg til det barene faktisk viser.
- Fastsett beslutnings- og ankomsttidspunkter. Hvis et signal bruker barens sluttkurs, sender du inn ordren etter at baren er avsluttet. Simuler utførelsen fra neste tilgjengelige intervall eller kurs, ikke fra et tidligere lavpunkt i den ferdige baren.
- Bruk riktig side av spreaden. For kjøp som kan handles umiddelbart, tar du utgangspunkt i salgskursen; for salg, i kjøpskursen. Hvis du bare har handelsbarer, anslår du spreaden fra en separat kilde eller oppgir at modellen utelater den.
- Begrens fyllinger til sannsynlig likviditet. Sett en grense for andelen av observert volum du kan delta med, og ta med gebyrer og markedspåvirkning. Barens samlede volum betyr ikke at alt var tilgjengelig til prisen du valgte.
- Test forutsetningene under press. Sammenlign fyllinger ved neste åpning med konservativ slippage, og undersøk om resultatet tåler dårligere utførelse. Ikke finjuster fyllingsmodellen til strategien vinner.
Dette er modellvalg, ikke en oppskrift på å finne den ene riktige fyllingen ut fra ufullstendige data. Hvis strategien er avhengig av å hente noen få basispunkter, er bardata kanskje ikke tilstrekkelig grunnlag for den påstanden.
Hvordan finner jeg ut hvor den umulige fyllingen kom inn i backtesten?
Spor én mistenkelig handel fra signal til hovedbok. Hold beslutningstidspunkt, tidspunkt for ordreinnsending, simulert ankomst, valgt markedsobservasjon, fyllingspris, fyllingsvolum og gebyr som separate felter. Kontroller deretter følgende, i denne rekkefølgen:
- Ble variabelen beregnet med data fra en bar som ennå ikke var ferdig da beslutningen ble tatt?
- Brukte fyllingen barens høyeste pris, laveste pris eller sluttkurs selv om prisen forekom før ordren kom inn?
- Ble et kjøp matchet mot kjøpskursen, eller et salg mot salgskursen?
- Var det simulerte volumet større enn tilgjengelig kursvolum eller modellens grense for deltakelse?
- Ble prisavrunding, minste tick-størrelse for kontrakten og gebyrer lagt til etter at fyllingen var valgt?
Hvis du ikke kan besvare disse spørsmålene ut fra handelsloggen, mangler backtesten dokumentasjon på utførelsen. Legg til feltene, spill av en håndfull handler manuelt mot rådataene, og kontroller at den rapporterte fyllingen kunne ha skjedd med modellen du hadde tenkt å bruke. En jevn egenkapitalkurve avslører ikke en pris som bare fantes inne i simulatoren.
← Alle innlegg


