23. august 2026 · research

Dit backtest har et urproblem, selv når alle tidsstempler er korrekte

Dit backtest har et urproblem, selv når alle tidsstempler er korrekte

Den farligste tidsfejl i et backtest kan overleve en perfekt kontrol af tidsstemplerne. To hændelser kan begge være mærket 10:00:00.000 og stadig være indtruffet i en rækkefølge, som din simulator har gættet sig til.

Det har betydning, når en strategi reagerer på andet end afsluttede bars: en quoteopdatering, en handel, en fundingmeddelelse, en ændring af børsstatus eller dens egen ordrebekræftelse. Et tidsstempel fortæller, hvornår en hændelse er mærket. Det fortæller måske ikke, hvornår din strategi kunne reagere på den.

Hvad ændrer hændelsesrækkefølgen?

Forestil dig en strategi, der køber, når bedste ask falder til under $100.00. I samme millisekund registrerer feedet en askopdatering til $99.99 og en handel til $99.99. Hvis dit backtest behandler handlen først og derefter quoten, ser strategien den nye ask og sender en ordre. Hvis den behandler quoten først, kan det også være i orden, forudsat at hændelsen faktisk var tilgængelig. Men hvis handlen brugte den viste likviditet, før ordren ankom, er et fill til $99.99 fiktion.

Når rækker kun sorteres efter tidsstempel, må simulatoren selv vælge rækkefølgen for hændelser med samme tidspunkt. Filrækkefølge, symbolrækkefølge eller en databaseforespørgsels plan kan blive en utilsigtet eksekveringsregel. Egenkapitalkurven kan ændre sig, selvom de underliggende data ikke gjorde det.

Her er en god måde at se, hvor vilkårligt det kan blive: Sortér hændelser med samme tidspunkt efter symbolnavn i stedet for ankomstrækkefølge. En strategi med flere aktiver kan så opføre sig anderledes, blot fordi én ticker sorteres før en anden.

Hvilke ure bør et backtest holde styr på?

Markedsdata og ordrehåndtering involverer ofte flere forskellige tidspunkter. Behold de felter, din datakilde leverer, og beskriv deres betydning præcist. For mange feeds er børsens tidsstempel og det lokale modtagelsestidsstempel begge nyttige; ingen af dem er en universel sandhed om, hvad alle markedsdeltagere så.

UrHvad det registrererHvad det ikke i sig selv kan bevise
Tidspunkt for hændelse på børsenHvornår handelsstedet siger, at en hændelse indtrafRækkefølgen, som et andet feed eller din proces observerede den i
ModtagelsestidHvornår din dataindsamler modtog beskedenHvornår din strategi blev færdig med at behandle den
BeslutningstidHvornår din kode evaluerede signaletAt den angivne pris stadig var tilgængelig
OrdreankomsttidHvornår handelsstedet kunne handle på ordrenEt fill, medmindre matchningsreglerne og likviditeten understøtter det

Hvis historiske data ikke indeholder modtagelsestider, så beskriv dine antagelser. Et backtest kan behandle hændelser fra børsen i sekvens og lægge en fast forsinkelse på 5 ms fra beslutning til ordreankomst. Det er en model, ikke en genskabelse af historikken. Hvis du ikke har sekvensnumre for hændelser med samme tidsstempel på børsen, er din regel for at afgøre rækkefølgen også en antagelse.

Hvordan modellerer jeg hændelser med samme tidspunkt?

Bevar først kildens sekvensnumre, når de findes. Et sekvensnummer giver en stærkere rækkefølge inden for det pågældende feed end et tidsstempel, selvom sekvensområder kan være adskilte på tværs af kanaler eller produkter.

Gør derefter simulatorens behandlingsregel tydelig. For hver hændelse skal du beslutte, om den kan opdatere strategiens information, ændre den tilgængelige likviditet, udløse en ordre eller bekræfte en ordre. Det er forskellige handlinger; hvis de slås sammen til »behandl række«, kan umulige fills snige sig ind.

  1. Brug kun markedsinformation, der er ankommet inden strategiens beslutningstid.
  2. Opret ordren, og lad den derefter nå frem til det modellerede ankomsttidspunkt på handelsstedet.
  3. Tillad kun eksekvering mod kvalificeret likviditet efter ankomsten, baseret på fillantagelserne for den pågældende ordretype.
  4. Registrér input, hændelsesrækkefølge og forsinkelse for hvert simuleret fill.

For en barbaseret strategi kan det være mere apparat, end spørgsmålet kræver. Hvis signalet bruger afsluttede 1-minute bars, og ordrer udføres ved åbningen af den næste bar med en konservativ omkostningsmodel, vil rækkefølgen på under millisekundniveau sandsynligvis ikke ændre forskningskonklusionen. Pointen er at tilpasse tidsdetaljerne til den påstand, backtestet fremsætter.

Kan jeg stole på et backtest uden data om ankomsttid?

Du kan stadig bruge det, men vær tydelig om begrænsningen. Hvis strategien handler langsomt og har brede risikogrænser, kan nogle få millisekunder være uden betydning. Hvis den reagerer på flygtige quotes, konkurrerer om køposition eller afhænger af et lead-lag-signal på tværs af handelssteder, kan manglende ankomsttider være afgørende for resultatet.

Kritikerne har ret i, at præcis timing af hændelser kan føre til falsk præcision. Historiske feeds er ufuldstændige, ure driver, og tidsstempler fra handelssteder afslører ikke hvert eneste netværkshop. En simulator med nanosekundfelter kan stadig bygge på en grov fillantagelse.

Test derfor følsomheden i stedet for at hævde sikkerhed: Afspil med sandsynlige regler for hændelser med samme tidspunkt og forskellige ordreforsinkelser, og sammenlign derefter antal handler, fillpris og hvilke signaler der stadig holder. Hvis resultatet afhænger af en rækkefølge, som dataene ikke kan fastslå, hører den afhængighed hjemme i forskningsrapporten. Et backtest kan være nyttigt med et upræcist ur. Det skal bare erkende, hvad det faktisk ved om tiden.

hændelsesdrevet backtestingeksekveringsmodelleringmarkedsdatastrategiforskning
← Alle indlæg