Kl. 10:14 UTC kjøpte en enkel utbruddsstrategi en evigvarende kryptokontrakt etter at prisen brøt over 20-minutters høyeste nivå. Backtesten viste en fylling på $64,210. Tallet fantes i dataene, signalet hadde korrekt tidsstempel, og den simulerte ordren kom fram på neste bar. Vi var nær ved å kalle resultatet ryddig.
Så stilte vi opp instrument-ID-ene. Signalet kom fra BTCUSDT-perpetualen. Fyllingen kom fra en BTCUSD-inverskontrakt. Begge ble handlet nær $64,210, og begge var likvide markeder. Likevel var det ulike ordrebøker, med ulike priser, tickstørrelser, dybder og gebyrsatser. Backtesten hadde sydd sammen et marked ingen trader kunne få tilgang til.
Strategien i seg selv var ordinær: gå inn ved en sluttkurs over den rullerende høyeste kursen, gå ut ved en sluttkurs under den rullerende laveste kursen, og dimensjoner hver posisjon etter en fast risiko i dollar. Problemet kom først fram da vi stilte et mer presist spørsmål enn «hva var BTC verdt?» Vi spurte: «Hva kunne denne ordren ha kjøpt i akkurat denne kontrakten på det tidspunktet?»
Diagrammet var en sammensatt serie før strategien i det hele tatt ble kjørt
Forskningsfeeden vår gjorde det enkelt å sammenligne handelsplasser. Den normaliserte symboler og viste en konsolidert prisserie. Det var nyttig for å følge markedet, men et dårlig grunnlag for å simulere utførelse. En sammensatt serie kan vise den beste prisen på tvers av børser, selv om strategien bare kan sende en ordre til én handelsplass.
Da utbruddet skjedde, var den konsoliderte barens høyeste kurs $64,205. Siste handel i den valgte kontrakten hadde allerede flyttet seg til $64,218. Samtidig viste en bufret kvote for inverskontrakten fortsatt en salgskurs på $64,210. Simulatoren brukte utbruddet fra én serie og den attraktive salgskursen fra en annen. Hver verdi var reell. Kombinasjonen var oppdiktet.
| Inndata | Dette brukte backtesten | Dette trengte ordren |
|---|---|---|
| Utbruddets høyeste kurs | Konsolidert BTC-pris | Prishistorikken til den valgte kontrakten |
| Referanse for inngang | Bufret salgskurs for inverskontrakten | Oppdatert salgskurs for instrumentet som ble handlet |
| Fyllingskvantum | Forespurt posisjonsstørrelse | Kvantum tilgjengelig på hvert prisnivå |
En rad i en markedsdatatabell kan se komplett ut selv om feltene beskriver ulike markeder. Et symbolalias beviser ikke at to instrumenter deler ordrebok. Kontrakt-ID, handelsplass, noteringsvaluta og tidsstempel må følge med gjennom signalgenereringen og utførelsen.
Vi spilte av ordren mot ordreboken
Vi kjørte inngangen på nytt med den valgte perpetualens egen beste salgskurs og ordrebokoppdateringene som var tilgjengelige da beslutningen ble tatt. Kursen var fersk, men bare 0.18 BTC lå på øverste nivå. Den simulerte ordren vår var på 0.50 BTC. De resterende 0.32 BTC ville ha gått mot høyere salgskurser.
Den justerte inngangskursen var $21 dårligere per BTC enn den registrerte fyllingskursen, før gebyrer. Det er en liten forskjell på én handel. I hele testen kom imidlertid det meste av strategiens bruttofortjeneste fra noen få raske utbrudd. Da vi spilte av disse inngangene mot de riktige ordrebøkene, falt bruttoresultatet med 31%; takergebyrer og priseffekt reduserte det ytterligere.
Vi fant også to tilfeller der kvoten fra øverste nivå i ordreboken kom etter signalets beslutningstidspunkt. En backtest som kobler sammen data på nærmeste tidsstempel, kan i det stille velge en framtidig oppdatering. Nå kobler vi bakover: kvoten må ha vært observert da ordren ble sendt, og vi registrerer alderen på den. Hvis den nyeste brukbare kvoten er for gammel, markerer simulatoren ordren som ikke-fyllbar eller bruker en uttrykkelig regel for utdaterte data.
Hva som kreves for at en pris skal kunne handles
En bars sluttkurs er nyttig for å beregne et signal. Den viser ikke at en bestemt ordre kunne blitt fylt der. For det må prisen tilhøre det nøyaktige instrumentet og handelsplassen, være tilgjengelig når ordren kommer fram, og ha nok motstående kvantum til den forespurte størrelsen. Når dataene ikke kan svare på disse spørsmålene, er et intervall eller en manglende fylling det ærlige resultatet, ikke en oppdiktet eksakt pris.
Vi beholdt den konsoliderte serien for markedskontekst og tok den ut av utførelsesløpet. Signaler viser nå til historikken for den valgte kontrakten; ordrer spilles av mot kontraktens egen ordrebok, og gebyrer og størrelse legges til etter at fyllingen er beregnet. Litt mer rørlegging, og en langt mindre flatterende egenkapitalkurve.
Det utbruddet skjedde faktisk. Backtesten ga det bare et bedre marked enn markedet strategien hadde valgt.
← Alle innlegg


