Backtesten vår regnet med 91 fyllinger av 100 sendte ordrer. I papertrading fikk den samme strategien 63. Median tiden fra signal til ordrebekreftelse var 84 millisekunder, og 12 av de uteblitte paperfyllingene var limitordrer som backtesten antok var fylt så snart prisen var innom nivået.
Avviket på 28 prosentpoeng så ut som et strategiproblem helt til vi skilte mellom beslutninger om ordre og beslutninger om fylling. Strategien valgte nesten samme retning, størrelse og pris i begge kjøringene. Utførelsesforløpet var annerledes: Noen ordrer kom fram for sent, noen ble stående åpne, og noen traff et marked som allerede hadde beveget seg.
Hva betyr samsvar mellom backtest- og paperordrer?
Samsvar betyr at backtesten og papersystemet tar sammenlignbare beslutninger ut fra den samme tilgjengelige informasjonen, og at forskjellene i utførelsesmodellene håndteres eksplisitt. Det betyr ikke at hver simulert fylling skal samsvare med en paperfylling. Historiske barer kan ikke gjenskape køposisjon, og en paperplattform kan bruke en annen matchingsmodell enn en livebørs.
Det nyttige spørsmålet er mer avgrenset: For hver ordre strategien hadde til hensikt å legge inn, kan du forklare hva som skjedde videre? Antall handler og sluttavkastning skjuler for mye. Lag en sammenkoblet logg for hver beslutning, med en stabil ID for strategibeslutningen som følger signal-, ordre-, bekreftelses-, kansellerings- og fyllingshendelsene.
| Sammenligning | Hva den avdekker | Eksempel |
|---|---|---|
| Beslutningstidspunkt og retning | Ulike inndata eller planlegging | Papersignalet utløses én bar senere |
| Ønsket størrelse og pris | Avrunding, risiko eller plattformregler | Backtesten sender inn 0.013 BTC; paper runder av til 0.01 |
| Overganger i ordrestatus | Avvik ved innsending, avvisning og kansellering | Backtesten behandler en kanselleringsforespørsel som fullført |
| Fyllingsmengde og pris | For optimistisk fyllingsmodell eller markedsbevegelse | En limitordre som treffes, får full fylling i backtesten, men ingen paperfylling |
Hvorfor sto limitordrer som traff prisnivået for så mange av de uteblitte fyllingene?
Backtesten vår brukte 1-minuttsbarer. Hvis limitprisen lå innenfor barens høyeste og laveste pris, markerte den ordren som fylt. Denne regelen sier om markedet handlet på den prisen på et eller annet tidspunkt i løpet av minuttet. Den sier ikke om ordren vår var aktiv da, om den lå først i køen, eller om det ble handlet nok volum etter at ordren kom fram.
Paperloggene avdekket timingproblemet. Strategien beregnet et signal kl. 12:03:00.000, men markedsdatahendelsen nådde ordreprosessen 31 millisekunder senere. Risikosjekkene tok ytterligere 22 millisekunder, og plattformsimulatoren bekreftet ordren 31 millisekunder etter det. Ved en rask bevegelse kan en historisk bar få en pris til å se oppnåelig ut, selv om limitordren kom fram etter at markedet hadde forlatt nivået.
Det var også en annen komplikasjon: Tolv paperordrer var fortsatt åpne da backtesten allerede hadde gått videre. Simulatoren godtok en kanselleringsforespørsel som om ordren forsvant umiddelbart. I papersystemet kom kanselleringsbekreftelsen senere; tre ordrer ble fylt i mellomtiden. Det endret posisjonen det neste signalet så.
Hvordan måler jeg avviket uten å lure meg selv?
Begynn med en enkel avstemmingsrapport gruppert etter ordreintensjon. Vis nevneren. «Fyllingsgrad» kan bety fyllinger per innsendt ordre, fylt mengde delt på ønsket mengde, eller fylte ordrer delt på ordrer som nådde plattformen. Dette er ulike spørsmål.
- Koble sammen hendelser ved hjelp av en beslutnings-ID eller klientordre-ID, ikke et tidsstempel du gjetter deg fram til i etterkant.
- Sammenlign først beslutningene: signaltidspunkt, retning, ønsket mengde, ordretype og limitpris.
- For beslutninger som samsvarer, sammenlign bekreftelsesforsinkelse, avvisninger, tid som åpen, kanselleringstidspunkt, fylt mengde og volumveid fyllingspris.
- Rapporter rater etter ordretype og markedsforhold. En samlet fyllingsgrad på 63 % kan skjule 90 % for markedsordrer og 35 % for passive limitordrer.
Skill kategoriene tydelig fra hverandre. En avvist ordre er ikke en ufyllt ordre; en delvis fylt ordre er ikke en full fylling; og en ordre som kanselleres etter en delvis fylling, har likevel endret posisjonen. Tell både ordrer og ønsket mengde, slik at en klynge små ordrer ikke får resultatet til å se bedre ut enn det er.
Hva bør endres i backtesten?
Bruk en fyllingsregel som passer til dataoppløsningen og den tiltenkte ordreoppførselen. Med barer er en limitordre som treffer prisnivået tegn på en mulig fylling, ikke bevis på at den ble fylt. Du kan modellere delvise fyllinger konservativt, kreve at prisen går forbi nivået, eller utelate passive ordrer der køposisjonen ikke kan anslås. Hvert valg besvarer et ulikt spørsmål; dokumenter det og sammenlign resultatet under flere plausible regler.
Modeller også ordrestatus. En ordre forblir aktiv til systemet mottar en terminal hendelse, og en kanselleringsforespørsel fjerner ikke eksponeringen. Hvis strategien kan sende inn en ordre nummer 2 mens den første venter, må backtesten gjenskape dette kappløpet eller forhindre det gjennom utformingen.
En fyllingsmodell er en påstand om hva ordren din kunne ha gjort. Gi den en regel du kan forklare, og kontroller deretter regelen mot paperloggene.
For avviket på 28 prosentpoeng var det overraskende ikke at en backtest med 1-minuttsbarer overvurderte passive fyllinger. Det var at strategiens posisjon avvek før neste beslutning fordi kanselleringstidspunktet var utelatt. Da vi korrigerte modellen for ordrestatus og sluttet å behandle hver limitordre som traff prisnivået som fylt, ble papersammenligningen mindre flatterende og mer nyttig.
Det er den praktiske målestokken for samsvar: Hver meningsfulle forskjell mellom simulert atferd og paperatferd har en dokumentert årsak, og backtesten hevder ikke å vite sikkert det datagrunnlaget ikke kan fastslå.
← Alle innlegg


