11 november 2026 · uitvoering

De strategie doorstond de tests. Toen veranderde de beurs de tickgrootte.

De strategie doorstond de tests. Toen veranderde de beurs de tickgrootte.

Op dinsdag om 08:00 UTC wijzigde een cryptoplatform de tickgrootte voor een perpetualcontract met een middelhoge prijs. Onze basisstrategie merkte er niets van. Het signaal zag nog steeds dezelfde spread tussen spot en futures, de risicolimieten waren ongewijzigd en de backtest bleef dezelfde resultaten opleveren.

Paper trading merkte het wel. De orderadapter rondde een kooplimiet af naar beneden, tot de dichtstbijzijnde toegestane prijs. Daardoor lag de order één tick onder het niveau dat de backtest had gemodelleerd. De markt raakte de oude prijs, de gesimuleerde order werd gevuld en de paperorder bleef onaangeroerd. Tegen lunchtijd was de positie van de strategie scheef.

Het incident leek op een kleine afrondingsfout. In werkelijkheid lag het probleem op de grens van het model: de strategie kende de prijzen, maar de backtest kende het prijsrooster van het handelsplatform niet.

We handelden een eenvoudig basissignaal: spot kopen en een perpetual verkopen wanneer de futurespremie boven een drempel uitkwam. De orders waren passief, omdat het verwachte basisvoordeel klein was. Een paar ticks konden bepalen of de instap genoeg opleverde om de kosten en de uiteindelijke uitstap te dekken.

Wat veranderde er toen de tickgrootte veranderde?

Voor de update accepteerde de perpetual prijzen in stappen van 0.01. Daarna accepteerde hij in de relevante prijsklasse stappen van 0.05. Het signaal berekende een doelverkoopprijs van 42,318.03, geldig onder de oude regel. Onder de nieuwe regel was die prijs ongeldig.

De beurs wees ongeldige prijzen af, maar onze adapter had een terugvaloptie: de verkoopprijs werd naar beneden afgerond op 42,318.00. Ook dat was ongeldig. Een tweede terugvaloptie rondde nogmaals af, ditmaal naar 42,318.05. Die prijs was geldig, maar voor de verkoper minder agressief. De order kon niet langer tegen de gemodelleerde prijs worden verkocht. Dit codepad was voor een andere markt geschreven en zette een afwijzing ongemerkt om in een order met een aangepaste prijs.

Bij die ene order liepen twee verschillende vragen door elkaar. Ten eerste: welke prijs accepteert het handelsplatform? Ten tweede: hoe moet een strategie reageren wanneer de gewenste prijs niet op het rooster valt? De beurs beantwoordt de eerste vraag. De strategie of het uitvoeringsbeleid moet de tweede beantwoorden.

OrderintentieRoosterregelGebruikelijke afrondingsrichtingMogelijk gevolg
KooplimietPrijs moet een veelvoud van de tick zijnNaar beneden, zodat de prijs op of onder de limiet blijftKleinere kans op een fill
VerkooplimietPrijs moet een veelvoud van de tick zijnNaar boven, zodat de prijs op of boven de limiet blijftKleinere kans op een fill
Verhandelbare limietorderMoet ook binnen de prijsgrenzen vallenHangt af van de maximaal aanvaardbare prijsOf de order de spread kruist

Er bestaat geen afrondingsregel die altijd juist is. Een koopprijs naar beneden afronden houdt de prijs van de koper binnen de limiet, maar kan de kans op een fill verkleinen. Naar boven afronden kan de order verhandelbaar maken, waardoor de kosten en de impact veranderen. Voor onze passieve basisinstap was het stilzwijgend verplaatsen van de order verkeerd. De strategie had een doel gekozen; de adapter veranderde de economische uitkomst.

Waarom zag de backtest er nog steeds goed uit?

Onze historische ordersimulator behandelde limietprijzen als doorlopende waarden. Als het dieptepunt van de candle de koopprijs bereikte, of het hoogtepunt de verkoopprijs, telde hij de order als gevuld. Dat is al een ruime benadering voor een passieve order, want een transactie tegen de limiet zegt niets over je positie in de wachtrij. Maar door de tickupdate werd het probleem fundamenteler: die order had nooit tegen die prijs kunnen bestaan.

We speelden dezelfde beslissingen opnieuw af, met het nieuwe rooster vanaf het tijdstip waarop het van kracht werd. Verschillende fills verdwenen. Een paar orders werden afgerond naar prijzen die de spread kruisten en daardoor takerkosten opleverden in plaats van makerkosten. Het daaropvolgende positieverloop week af, waardoor ook latere hedges en uitstappen veranderden. Een regel die eruitzag als metadata had de volledige reeks transacties veranderd.

De update was bovendien geen verrassing die in een grafiek verborgen zat. Het platform had een wijziging van de instrumentregels gepubliceerd, met een tijdstip waarop die inging. We sloegen marktgegevens zorgvuldig op, maar instrumentmetadata stond in een cache die bij het opstarten werd vernieuwd. De backtest gebruikte voor elke historische datum de regels van vandaag; paper trading werkte met verouderde regels totdat het proces opnieuw werd gestart. Geen van beide omgevingen gaf weer wat het handelsplatform op elk moment toestond.

Hoe moet een backtest wijzigingen in tickgrootte modelleren?

Versiebeheer instrumentregels met geldigheidsintervallen, net als andere inputs die afhankelijk zijn van het tijdstip. Bewaar minimaal het tijdstip waarop de regels ingaan en de regelwaarden die nodig zijn om een order te valideren: tickgrootte, hoeveelheidsstap, minimumhoeveelheid en eventuele prijsbanden. De simulator moet de regelset laden die beschikbaar was op het gesimuleerde beslismoment.

Maak de orderafhandeling vervolgens expliciet. Als een doelprijs ongeldig is, wijs die dan af, rond hem af volgens een vastgelegd beleid of bereken de doelprijs opnieuw op het rooster. Leg vast welke optie is toegepast. Een backtest die elke order automatisch herstelt, kan nuttig zijn om een specifiek uitvoeringsbeleid te schatten, maar mag dat beleid niet verhullen als een fill op de beurs.

Bij passieve orders is een tickgeldige prijs slechts de eerste voorwaarde voor een fill. Je hebt ook een model nodig voor de vraag of de markt jouw prijs heeft gepasseerd, de orders die vóór die van jou in de wachtrij staan, annuleringen en de kostenklasse die je zou hebben gekregen.

We hebben twee controles toegevoegd. De eerste toetst elke gegenereerde order aan de instrumentregels die op dat moment golden en stopt met een duidelijke foutmelding bij ongeldige prijzen of aantallen. De tweede vergelijkt de uiteindelijke genormaliseerde order van de backtest en de paperadapter: zijde, prijs, hoeveelheid, time-in-force en kostenintentie. Als die verschillen, beschouwen we de runs niet als vergelijkbaar.

Daarna speelden we de wijziging van dinsdag opnieuw af. De backtest telde na de update van het rooster geen fills meer tegen 42,318.03. Paper trading en de simulatie namen voor elk ongeldig doel dezelfde beslissing, zelfs wanneer die beslissing was om de order over te slaan.

Het signaal was niet stuk. De aannames over wat het kon verhandelen waren verouderd. Een strategie kan een nieuwe tickgrootte overleven, maar alleen als het onderzoekssysteem de regels van het handelsplatform behandelt als onderdeel van de markt die het simuleert.

beursregelstickgrootteorderafrondingbacktestingpaper trading
← Alle artikelen