6 oktober 2026 · research

Varför handlade min backtest till ett pris som marknaden aldrig visade?

Varför handlade min backtest till ett pris som marknaden aldrig visade?

En backtest kan rapportera ett avslut till ett pris som marknaden aldrig visade. Vanligtvis har simulatorn härlett en exekvering som ser rimlig ut utifrån ofullständiga data: stapelns högsta och lägsta pris, ett mittpris eller ett limitpris som en enda handel nådde. Då kan handelsloggen se exakt ut samtidigt som den döljer vad marknaden faktiskt erbjöd.

Börja med att fråga dig vilket pris din order hade kunnat handlas mot. En stapel med senaste avslut visar vilka priser som handlades under ett intervall. Den visar inte köp- och säljkursen när din order kom in, hur stor volym som fanns tillgänglig där eller om din order hade kunnat ta sig längst fram i kön.

Varför visar min backtest ett avslut utanför marknadspriset?

Börja med att precisera vad du menar med ”utanför”. Ett köpavslut under stapelns lägsta pris eller ett sälj över dess högsta pris är ett uppenbart bokförings- eller tidsfel. Ett avslut inom spannet mellan högsta och lägsta pris kan ändå vara fiktivt: priset kan ha handlats innan ordern fanns, på fel sida av spreaden eller i en så liten volym att den inte hade räckt för att fylla din order.

Tänk dig en 1-minutsstapel med öppningskursen 100.00, lägsta priset 99.80 och stängningskursen 100.10. Strategin ser den färdiga stapeln, skickar en köporder och simulatorn fyller den till 99.80. Den lägsta kursen kan ha inträffat i början av minuten, 50 sekunder före signalen. Stapeln visar inte att 99.80 fanns tillgängligt efter beslutet.

Data du harVad den visarVad den inte visar
OHLCV-stapelObserverat prisintervall och volym under ett intervallPrisföljd, köp- och säljkurs eller tillgänglighet när ordern kommer in
HandelsnoteringarRapporterade avslut med tidsstämplar och priserVilande likviditet eller din plats i kön
Bästa köp- och säljkurserBästa visade köp- och säljkurs vid tidpunkter då data samplatsDjup bortom bästa nivån eller om en kurs låg kvar mellan samplingarna
OrderbokshändelserFörändringar i visat djup och köhändelser, beroende på datatäckningenDold likviditet, åtkomst till handelsplatsen eller garanterad prioritet

En annan vanlig orsak är att blanda ihop mittpris och priser som går att handla till. Om kursen är 99.99 på köpsidan och 100.01 på säljsidan ser ett köp till mittpriset 100.00 prydligt ut i rapporten. Ett köp som går mot marknaden betalas vanligtvis till säljkursen, plus eventuell marknadspåverkan från orderns storlek. Att kalla mittpriset ett avslut trollar tyst bort halva spreaden.

Kan en limitorder fyllas bara för att marknaden nådde dess pris?

Att priset nås visar att en handel noterades till limitpriset. Det bevisar inte att din vilande order hade gått till avslut. Om andra order låg före din kan handelsvolymen till det priset ha varit för liten för att nå din plats i kön. Noteringen kan också ha kommit från en annan handelsplats medan din order låg någon annanstans.

Anta att din köpgräns är 50.00 och att marknaden handlar 200 aktier till det priset efter att du lagt ordern. En simulator som bygger på att priset nås fyller alla 500 aktier. En försiktigare modell frågar hur mycket som handlades till eller under 50.00 efter att ordern kom in och tar sedan hänsyn till en uppskattning av kön framför din order. Utan orderdata från orderboken är kön ett antagande. Det bör synas i resultaten, inte smygas in som en säkerhet.

För ett mindre forskningssystem skulle jag hellre göra antagandet tydligt och testa ett intervall än låtsas att stapeldata avslöjar köprioriteten. Vilket intervall som passar beror på handelsplats, orderstorlek och hur ofta strategin handlar. En aktie med låg aktivitet vid öppning och ett tunt kryptokontrakt klockan 03:00 UTC innebär olika exekveringsproblem.

Hur väljer jag en modell för avslut med stapeldata?

Anpassa modellen både efter dataunderlaget och efter vad strategin påstår sig kunna göra. En stapelbaserad backtest kan fortfarande vara användbar för långsamma strategier, men avsluten bör respektera vad staplarna faktiskt visar.

  1. Ange beslutstid och ankomsttid. Om en signal använder stapelns stängningskurs ska ordern skickas efter stängningen. Modellera exekveringen utifrån nästa tillgängliga intervall eller kurs, inte utifrån stapelns tidigare lägsta pris.
  2. Använd rätt sida av spreaden. För köp som går mot marknaden, utgå från säljkursen; för sälj, från köpkursen. Om du bara har staplar med avslut, uppskatta spreaden från en separat källa eller redovisa att modellen utelämnar den.
  3. Begränsa avsluten till en rimlig likviditet. Sätt en gräns för deltagandeandelen av den observerade volymen och räkna med avgifter och marknadspåverkan. Stapelns totala volym innebär inte att allt fanns tillgängligt till priset du valde.
  4. Stresstesta antagandena. Jämför avslut vid nästa öppning med försiktig slippage och testa om resultatet håller vid sämre exekvering. Justera inte modellen för avslut tills strategin går med vinst.

Det här är modellval, inte ett recept för att återskapa det enda sanna avslutet utifrån ofullständiga data. Om strategin bygger på att fånga några få baspunkter kanske stapeldata inte räcker som belägg för det påståendet.

Hur hittar jag var det omöjliga avslutet kom in i backtesten?

Följ en misstänkt handel från signal till liggare. Håll beslutstidstämpel, orderns inskickningstid, simulerad ankomst, vald marknadsobservation, avslutspris, avslutsvolym och avgift i separata fält. Kontrollera sedan följande i tur och ordning:

Om du inte kan besvara de frågorna utifrån handelsregistreringen saknar backtesten exekveringsunderlag. Lägg till fälten, spela upp en handfull affärer manuellt mot rådata och kontrollera att det rapporterade avslutet hade kunnat ske enligt modellen du avsåg att använda. En jämn aktiekurva avslöjar inte ett pris som bara fanns inne i simulatorn.

backtestingmarknadsdataexekveringdatateknik
← Alla inlägg