6. oktober 2026 · research

Hvorfor handlede min backtest til en pris, markedet aldrig viste?

Hvorfor handlede min backtest til en pris, markedet aldrig viste?

En backtest kan vise et fill til en pris, som markedet aldrig har vist. Som regel har simulatoren udledt en plausibelt udseende eksekvering ud fra ufuldstændige data: en bars high og low, en midtkurs eller en limitpris, som én handel ramte. Det kan få handelsloggen til at se præcis ud, mens den skjuler, hvad markedet faktisk tilbød.

Start med at spørge, hvilken pris din ordre kunne have handlet mod. En bar med seneste handelspriser fortæller, hvilke priser der blev handlet til i løbet af et interval. Den fortæller ikke, hvad bid og ask var, da din ordre ankom, hvor meget der var tilgængeligt dér, eller om din ordre kunne komme forrest i køen.

Hvorfor viser min backtest et fill uden for markedsprisen?

Vær først præcis om, hvad du mener med “uden for”. Et køb under barens low eller et salg over dens high er en åbenlys regnskabs- eller tidsfejl. Et fill inden for high-low-intervallet kan stadig være fiktivt: Prisen kan være handlet, før ordren fandtes, på den anden side af spreadet eller i en mængde, der var for lille til at udføre din ordre.

Forestil dig en 1-minutsbar med en open på 100.00, en low på 99.80 og en close på 100.10. Din strategi ser den afsluttede bar, sender en købsordre, og simulatoren udfører den til 99.80. Det low kan være forekommet tæt på minut­tets begyndelse, 50 sekunder før signalet. Baren giver ingen indikation af, at 99.80 var tilgængelig efter beslutningen.

De data, du harHvad de fastslårHvad de ikke kan fastslå
OHLCV-barObserveret interval for handelspriser og volumen i et tidsrumPrisrækkefølge, bid og ask eller tilgængelighed ved ordrens ankomst
HandelsprintsRapporterede handler med tidsstempler og priserPassiv likviditet eller din plads i køen
Top-of-book-quotesBedste viste bid og ask på udvalgte tidspunkterDybde ud over det bedste niveau, eller om en quote fortsatte mellem målingerne
OrdrebogshændelserÆndringer i vist dybde og køhændelser, afhængigt af feedets dækningSkjult likviditet, adgang til handelsstedet eller garanteret prioritet

En anden almindelig årsag er, at man forveksler midtkurs med eksekverbare priser. Hvis quoten er 99.99 bid og 100.01 ask, ser et køb til midtkursen 100.00 pænt ud i en rapport. Et marketable køb betaler som regel ask-prisen plus en eventuel priseffekt fra ordrestørrelsen. Når man kalder midtkursen et fill, fjerner man lydløst halvdelen af spreadet.

Kan en limitordre blive udført, bare fordi markedet ramte dens pris?

Et pris-touch viser, at der blev registreret en handel til limitprisen. Det beviser ikke, at din hvilende ordre ville være blevet udført. Hvis andre ordrer lå foran din, kan handelsvolumen til den pris have været for lille til at nå din position i køen. Handlen kan også være sket på et andet handelssted, mens din ordre lå et andet sted.

Antag, at din købslimit er 50.00, og at markedet handler 200 aktier til den pris, efter du har lagt ordren. En simulator baseret på pris-touch udfører alle 500 aktier. En mere forsigtig model spørger, hvor meget der blev handlet til eller under 50.00 efter ankomsten, og tager derefter højde for den estimerede kø foran ordren. Uden ordreniveau-data fra ordrebogen er køen en antagelse. Den bør fremgå tydeligt af resultaterne, ikke sniges ind som en sikkerhed.

I et mindre researchsystem vil jeg hellere gøre antagelsen tydelig og teste et interval end lade, som om candle-data afslører køprioritet. Det rette interval afhænger af handelssted, ordrestørrelse og hvor ofte strategien handler. En rolig aktie ved åbningen og en tyndt handlet kryptokontrakt kl. 03:00 UTC giver forskellige eksekveringsproblemer.

Hvordan vælger jeg en fill-model til bar-data?

Tilpas modellen til både dataene og det, strategien hævder. En barbaseret backtest kan stadig være nyttig til langsomme strategier, men dens fills skal respektere, hvad barerne faktisk viser.

  1. Fastlæg beslutnings- og ankomsttidspunkter. Hvis et signal bruger barens close, skal ordren sendes efter denne close. Simulér eksekveringen ud fra det næste tilgængelige interval eller den næste quote, ikke ud fra barens tidligere low.
  2. Brug den rigtige side af spreadet. For marketable køb skal du starte ved ask; for salg ved bid. Hvis du kun har handelsbarer, skal du estimere spreadet ud fra en separat kilde eller oplyse, at modellen udelader det.
  3. Begræns fills til plausibel likviditet. Sæt en deltagelsesgrænse i forhold til den observerede volumen, og medregn gebyrer og priseffekt. En bars samlede volumen betyder ikke, at det hele var tilgængeligt til den pris, du valgte.
  4. Test antagelserne under pres. Sammenlign fills ved næste åbning med konservativ slippage, og undersøg, om resultatet holder ved dårligere eksekvering. Justér ikke fill-modellen, indtil strategien vinder.

Det er modelvalg, ikke en opskrift på at genskabe det ene sande fill ud fra ufuldstændige data. Hvis strategien afhænger af at hente nogle få basispoint, er bar-data måske ikke tilstrækkeligt belæg for den påstand.

Hvordan finder jeg ud af, hvor det umulige fill kom ind i backtesten?

Følg én mistænkelig handel fra signal til regnskab. Registrér beslutningens tidsstempel, tidspunktet for ordreafgivelse, simuleret ankomst, den valgte markedsobservation, fill-pris, fill-mængde og gebyr som separate felter. Kontrollér derefter følgende i rækkefølge:

Hvis du ikke kan besvare de spørgsmål ud fra handelsregistreringen, mangler backtesten dokumentation for eksekveringen. Tilføj felterne, gennemgå en håndfuld handler manuelt mod rådataene, og kontrollér, at det rapporterede fill kunne være sket med den model, du havde tænkt dig. En pæn aktiekurve afslører ikke en pris, der kun fandtes inde i simulatoren.

backtestingmarkedsdataeksekveringdatateknik
← Alle indlæg