23 augusti 2026 · forskning

Din backtest har ett klockproblem, även när alla tidsstämplar stämmer

Din backtest har ett klockproblem, även när alla tidsstämplar stämmer

Det farligaste timingfelet i en backtest kan överleva en perfekt granskning av tidsstämplarna. Två händelser kan båda vara märkta 10:00:00.000 och ändå ha inträffat i en ordning som simulatorn har gissat sig till.

Det spelar roll när en strategi reagerar på mer än färdiga staplar: en kursuppdatering, en affär, ett finansieringsmeddelande, en statusändring på en börs eller en bekräftelse på den egna ordern. En tidsstämpel talar om när en händelse är märkt. Den talar inte nödvändigtvis om när strategin kunde agera på den.

Vad förändrar händelseordningen?

Tänk dig en strategi som köper när bästa säljkursen faller under $100.00. Vid samma millisekund registrerar dataflödet en uppdatering av säljkursen till $99.99 och en affär på $99.99. Om backtesten behandlar affären först och sedan kursnoteringen ser strategin den nya säljkursen och skickar en order. Om den behandlar kursnoteringen först kan det också vara rimligt, förutsatt att händelsen faktiskt var tillgänglig. Men om affären förbrukade den visade likviditeten innan ordern anlände är en fyllning på $99.99 påhittad.

När rader sorteras enbart efter tidsstämpel måste simulatorn välja ordning för händelser med samma tid. Filordning, symbolordning eller en databasfrågas exekveringsplan kan råka bli en regel för exekvering. Egetkapitalkurvan kan förändras trots att underliggande data är densamma.

Ett enkelt sätt att se hur godtyckligt detta kan bli är att sortera händelser med samma tid efter symbolnamn i stället för ankomstordning. En strategi med flera tillgångar kan då bete sig annorlunda bara för att en ticker sorteras före en annan.

Vilka klockor bör en backtest hålla reda på?

Marknadsdata och orderhantering involverar ofta flera skilda tidpunkter. Behåll fälten som din datakälla tillhandahåller och ange tydligt vad de betyder. För många dataflöden är både börsens tidsstämpel och den lokala mottagningstiden användbara; ingen av dem är en universell sanning om vad alla marknadsaktörer såg.

KlockaVad den registrerarVad den inte kan bevisa på egen hand
Börsens händelsetidNär handelsplatsen säger att en händelse inträffadeI vilken ordning ett annat dataflöde eller din process observerade den
MottagningstidNär din datainsamlare tog emot meddelandetNär strategin hade behandlat det färdigt
BeslutstidNär din kod utvärderade signalenAtt det noterade priset fortfarande var tillgängligt
Orderns ankomsttidNär handelsplatsen kunde agera på ordernEn fyllning, såvida inte matchningsreglerna och likviditeten stöder det

För historiska data utan mottagningstider bör du ange dina antaganden. En backtest kan behandla börshändelser i sekvens och lägga till en fast fördröjning på 5 ms från beslut till orderns ankomst. Det är en modell, inte återskapad historik. Om du saknar sekvensnummer för börstidsstämplar som sammanfaller är även din regel för att bryta tidslikhet ett antagande.

Hur modellerar jag händelser med samma tid?

Bevara först källans sekvensnummer där de finns. Ett sekvensnummer ger en säkrare ordning inom dess dataflöde än en tidsstämpel, även om sekvensutrymmen kan vara separata mellan kanaler eller produkter.

Gör sedan simulatorns behandlingsregel tydlig. För varje händelse avgör du om den kan uppdatera strategins information, ändra tillgänglig likviditet, utlösa en order eller bekräfta en order. Det här är olika åtgärder; om allt slås ihop till ”behandla rad” kan omöjliga fyllningar smita igenom.

  1. Använd bara marknadsinformation som har anlänt senast vid strategins beslutstid.
  2. Skapa ordern och flytta den sedan fram till den modellerade ankomsttiden på handelsplatsen.
  3. Tillåt exekvering endast mot kvalificerad likviditet efter ankomsten, enligt fyllningsantagandena för den ordertypen.
  4. Registrera indata, händelseordning och fördröjning för varje simulerad fyllning.

För en strategi som bygger på staplar kan det här vara mer maskineri än frågan kräver. Om signalen använder färdiga 1-minutsstaplar och order fylls vid nästa stapels öppning med en försiktig kostnadsmodell, lär ordning på under millisekunden inte ändra forskningsslutsatsen. Poängen är att anpassa tidsdetaljerna till påståendet som backtesten gör.

Kan jag lita på en backtest utan data om ankomsttider?

Du kan fortfarande använda den, men var tydlig med begränsningen. Om strategin handlar långsamt och har breda riskgränser kan några millisekunder sakna betydelse. Om den reagerar på flyktiga kursnoteringar, konkurrerar om köposition eller bygger på en ledande eftersläpande signal mellan handelsplatser kan avsaknaden av ankomsttider vara avgörande för resultatet.

Kritikerna har rätt i att exakt tid för händelser kan skapa en falsk precision. Historiska dataflöden är ofullständiga, klockor driver och handelsplatsernas tidsstämplar visar inte varje nätverkshopp. En simulator med nanosekundfält kan fortfarande bygga på ett grovt fyllningsantagande.

Testa därför känsligheten i stället för att hävda säkerhet: spela upp data med rimliga regler för att bryta tidslikhet och olika orderfördröjningar, och jämför sedan antalet affärer, fyllningspriser och vilka signaler som håller. Om resultatet hänger på en ordning som data inte kan fastställa hör det beroendet hemma i forskningsrapporten. En backtest kan vara användbar även med en ofullkomlig klocka. Den behöver bara medge vilken tid den faktiskt känner till.

händelsestyrd backtestingexekveringsmodelleringmarknadsdatastrategiforskning
← Alla inlägg