7. november 2026 · mikrostruktur

Backtesten læste den rigtige pris fra det forkerte marked

Backtesten læste den rigtige pris fra det forkerte marked

Kl. 10:14 UTC købte en simpel breakoutstrategi en krypto-perpetual, efter at prisen brød over sit 20-minutters højeste niveau. Backtesten viste en fill til $64,210. Tallet fandtes i dataene, signalet havde korrekt tidsstempel, og den simulerede ordre kom frem på den næste bar. Vi var tæt på at kalde det et rent resultat.

Så satte vi instrument-ID'erne på linje. Signalet kom fra BTCUSDT-perpetualen. Fillen kom fra en invers BTCUSD-kontrakt. Begge handlede omkring $64,210, og begge var likvide markeder. Men det var stadig forskellige ordrebøger med forskellige priser, tickstørrelser, dybde og gebyrstrukturer. Backtesten havde sat et marked sammen, som ingen trader kunne tilgå.

Strategien i sig selv var helt almindelig: gå ind ved en lukning over det rullende højeste niveau, gå ud ved en lukning under det rullende laveste niveau, og tilpas hver position til en fast risiko i dollar. Problemet kom først frem, da vi stillede et mere præcist spørgsmål end “hvad var BTC værd?” Vi spurgte: “Hvad kunne denne ordre have købt i netop denne kontrakt på det tidspunkt?”

Diagrammet var et sammensat datasæt, før strategien overhovedet blev kørt

Vores researchfeed gjorde det nemt at sammenligne handelssteder. Det normaliserede symboler og viste en samlet prisserie. Det var nyttigt til at se på markedet, men en dårlig reference for eksekvering. Et sammensat datasæt kan vise den bedste pris på tværs af børser, selvom strategien kun kan sende en ordre til ét handelssted.

Ved breakoutet var den samlede bars højeste pris $64,205. Den valgte kontrakts egen seneste handel var allerede rykket til $64,218. Samtidig viste en cachet quote for den inverse kontrakt stadig et ask på $64,210. Simulatoren brugte breakoutet fra én serie og det attraktive ask fra en anden. Hver værdi var reel. Kombinationen var opdigtet.

InputHvad backtesten brugteHvad ordren krævede
BreakoutniveauSamlet BTC-prisDen valgte kontrakts prishistorik
Referencepris ved indgangCachet ask for invers kontraktFriskt ask for det handlede instrument
FillmængdeAnmodet positionsstørrelseTilgængelig mængde på hvert prisniveau

En række i en markedsdatatabel kan se komplet ud, selvom felterne beskriver forskellige markeder. Et symbolalias er ikke bevis på, at to instrumenter deler en ordrebog. Kontrakt-ID, handelssted, noteringsvaluta og tidsstempel skal følge med gennem signalgenerering og eksekvering.

Vi afspillede ordren mod ordrebogen

Vi kørte indgangen igen med den valgte perpetuals eget bedste ask og de opdateringer af ordrebogen, der var tilgængelige på beslutningstidspunktet. Quot'en var frisk, men der lå kun 0.18 BTC på det øverste niveau. Vores simulerede ordre var på 0.50 BTC. De resterende 0.32 BTC ville have krydset til højere asks.

$64,218bedste ask, da ordren ankom
0.18 BTCtilgængelig ved det ask
$64,231volumenvægtet replaypris

Den justerede indgang var $21 dårligere pr. BTC end den registrerede fill, før gebyrer. Det er en lille forskel på en enkelt handel. Men på tværs af testen hentede strategien det meste af sit bruttooverskud på en håndfuld hurtige breakouts. Da vi replayede disse indgange mod de korrekte ordrebøger, faldt bruttoresultatet med 31%; takergebyrer og markedspåvirkning reducerede det yderligere.

Vi fandt også to tilfælde, hvor quoten fra det øverste niveau i ordrebogen ankom efter signalets beslutningstidspunkt. En backtest, der kobler sammen på det nærmeste tidsstempel, kan stille og roligt vælge en fremtidig opdatering. Nu kobler vi bagud: quot'en skal være observeret, inden ordren blev sendt, og vi registrerer dens alder. Hvis den seneste brugbare quote er for gammel, markerer simulatoren ordren som umulig at fylde eller anvender en eksplicit regel for forældede data.

Hvad en handlebar pris kræver

En bars lukkekurs er nyttig til at beregne et signal. Den viser ikke, at en bestemt ordre kunne fyldes dér. Til det skal prisen høre til det præcise instrument og handelssted, være tilgængelig, når ordren ankommer, og have tilstrækkelig mængde på den modsatte side til den ønskede størrelse. Når dataene ikke kan besvare de spørgsmål, er det ærlige resultat et interval eller en manglende fill, ikke en opdigtet præcis pris.

Vi beholdt den samlede serie til markedskontekst og fjernede den fra eksekveringsforløbet. Signaler refererer nu til den valgte kontrakts egen historik; ordrer replayes mod kontraktens ordrebog, og gebyrer og størrelse anvendes, efter fillen er beregnet. Lidt mere opsætning og en langt mindre flatterende egenkapitalkurve.

Det breakout fandt sted. Backtesten gav det bare et bedre marked end det, strategien havde valgt.

kryptofuturesordrebøgermarkedsdatabacktestingeksekvering
← Alle indlæg