Ett backtest kan fylla din limitorder trots att det aldrig fanns någon möjlighet att handla. Om stapelns lägsta pris gick under din köpgräns räknar många motorer det som en fyllnad. Men det lägsta priset visar bara att minst en rapporterad affär skedde till det priset eller lägre. Det säger inget om hur stor volym som omsattes, hur mycket som låg före dig i kön eller om din order hade hunnit vara aktiv.
Den skillnaden spelar störst roll när strategins fördel bygger på många passiva fyllnader. En modell som behandlar varje prisberöring som en fullständig fyllnad kan förvandla en tålmodig ingång till en påhittad källa till alfa.
Betyder det att min order fylldes när stapeln nådde mitt limitpris?
Nej. Det betyder att stapelns registrerade prisintervall omfattade ditt limitpris. Om din order kunde fyllas beror på marknadens orderbok, handelsflödet, din position i kön och när ordern kom fram.
Tänk dig en köporder med limitpris $100.00. Stapeln öppnar på $100.20, når ett lägsta pris på $99.98 och stänger på $100.10. En affär kan ha registrerats två cent under ditt pris, men om det låg en stor kö före dig på $100.00 och bara en liten volym handlades där kanske din order förblev orörd. Med enbart OHLCV kan du inte se kön.
Det finns ytterligare en komplikation: en stapel sammanfattar händelser över tid. Om din signal beräknas utifrån stapelns stängningskurs kan du inte anta att din order låg ute tidigare under stapeln när dess lägsta pris inträffade. Stapeln komprimerar just den händelsesekvens som skulle ge svaret.
Vad kan OHLCV-data egentligen säga om en limitfyllnad?
OHLCV kan utesluta vissa fyllnader och göra andra sannolika. Däremot kan det inte fastställa din köprioritet eller garantera hur stor volym som var tillgänglig för din order.
| Observation | Vad det stöder | Vad det inte kan bevisa |
|---|---|---|
| Stapeln nådde aldrig ner till en köpgräns | Ingen rapporterad affär nådde priset under stapeln | Att ordern skulle ha fyllts |
| Stapeln nådde köpgränsen | Priset rapporterades vid gränsen | Att någon volym handlades efter att din order kom fram |
| Stapeln gick under köpgränsen | Affärer skedde till eller under priset | Att tillräcklig volym nådde din position i kön |
| Stapelns totala volym översteg din orderstorlek | Marknaden handlade minst den volymen någon gång under stapeln | Att volymen handlades till ditt pris efter att ordern kom fram |
En stapelbaserad motor behöver alltså ett antagande om fyllnad. Behandla det som en modell med en känd blind fläck, inte som ett faktum som kan utläsas ur candlestick-stapeln.
Hur bör jag modellera limitfyllnader i ett backtest?
Börja med orderns tidsförlopp. Bestäm när signalen blir tillgänglig, när ordern når handelsplatsen och vilka efterföljande marknadshändelser som kan påverka den. Om signalen blir känd vid stapelns stängning är en försiktig stapelbaserad regel att låta ordern bli aktiv först från nästa stapel.
Skilj sedan på prisvillkor och fyllnadsvolym. Att en limitorder blir möjlig att handla betyder inte att hela ordern fylls. Om du har avslutsdata men saknar historik över orderboken kan du kräva att den omsatta volymen till limitpriset eller bättre överstiger en multipel av din orderstorlek. Den multipeln är en grov buffert för kön, inte en universell konstant. Testa flera värden och redovisa hur resultatet förändras.
Anta till exempel att strategin lägger en köporder på 2 BTC och att 3 BTC handlas till det valda priset efter att ordern blivit aktiv. En modell som kräver 5 BTC i kvalificerande volym skulle låta ordern stå ofylld; en modell med volymmultipeln 1.0 skulle fylla den. Inget av resultaten återskapar kön. Jämförelsen visar hur beroende strategin är av ett antagande som du inte kan observera.
Låt ofyllda order ligga kvar i simuleringen. Annullera dem när strategin skulle annullera dem och låt en missad affär förbli missad. Om strategin alltid får en fyllnad när limitpriset nås, samtidigt som order som löper ut utan att fyllas ignoreras, blir både exekveringen och antalet handelsmöjligheter snedvridna.
När behöver jag data från orderboken?
Använd uppdateringar av orderboken och avslutsdata när positionen i kön eller delfyllnader är avgörande för strategin: market making, kortlivade passiva köp- och säljkurser eller ingångar som kräver en plats nära köns främsta position på en prisnivå med många order. Även då kanske historisk offentlig data inte visar din exakta position i kön. Du behöver modellera när ordern kommer fram, annulleringar framför dig, matchningsregler och din egen marknadspåverkan.
För långsammare strategier kan detaljerade orderböcker öka komplexiteten utan att lösa den viktigaste osäkerheten. En användbar stapelbaserad studie kan ändå jämföra en övre gräns där varje prisberöring ger fyllnad med striktare scenarier som kräver tillräcklig volym. Om den skenbara fördelen försvinner så snart du kräver rimliga fyllnader är det värdefull information för analysen.
Hur ser jag om resultatet bygger på optimistiska fyllnader?
Kör samma strategi med ett litet antal tydligt definierade fyllnadsregler och jämför mer än slutavkastningen. Följ antal fyllda order, andel delfyllnader, liggtid, annullerad volym, missade prisrörelser efter ofyllda order och omsättning. Strategin kan behålla sin avkastning på papperet samtidigt som den bygger på betydligt färre och mer fördelaktiga affärer.
Pappershandel är nästa användbara kontroll: skicka in den faktiska orderlogiken och registrera bekräftelser, fyllnader och annulleringar. Även pappersfyllnader beror på handelsplatsens eller simulatorns egna regler, men de låter dig testa tidsförlopp och orderhantering som en candlestick-stapel inte kan visa.
Ett nått limitpris ger information om priset. En fyllnad är ett påstående om exekvering. Ditt backtest bör synliggöra skillnaden mellan de två påståendena.
← Alla inlägg


