Het eerlijkste slippage-model is vaak bewust onjuist. Een backtest die op basis van grove historische data één precieze uitvoeringskost rapporteert, doet een bewering die de data niet kan onderbouwen.
Dat klinkt als een pleidooi voor grove aannames. Het tegendeel is waar: gebruik een eenvoudig model dat je kunt uitleggen en laat het vervolgens met zichzelf in tegenspraak zijn. Als een strategie alleen werkt met één toevallig gunstige fill-schatting, hoort die onzekerheid bij het resultaat.
Waarom kan een precieze slippage-schatting misleidend zijn?
Stel dat je OHLCV-bars van 1 minuut hebt en een market order voor 2,000 aandelen verstuurt. De bar toont de bandbreedte en het totale volume gedurende een minuut. Hij vertelt je niet wat de bid en ask waren toen je order binnenkwam, hoeveel orders er voor je in de wachtrij stonden, hoe het volume over die minuut was verdeeld of welk deel ervan je order zou hebben verbruikt.
Je kunt nog steeds een getal aan slippage toekennen. Je kunt bijvoorbeeld vullen tegen de opening van de volgende bar plus een vaste kost in basispunten, of de kost schalen op basis van de ordergrootte gedeeld door het barvolume. Dat zijn nuttige benaderingen. Het zijn geen waarnemingen. Als je het resultaat rapporteert als “slippage: 3.2 basispunten”, laat je een modelkeuze op een meting lijken.
Neem als uitgewerkt voorbeeld een strategie die per order voor $20,000 handelt in een aandeel waarvan het volume in de volgende bar $400,000 is. De participatiegraad is 5%. Een model dat 2 basispunten rekent, kost $4 per order; bij een model dat 10 basispunten rekent, is dat $20. Over 500 roundtrips loopt het verschil op tot $16,000, vóór commissies. Als de bruto backtestwinst van de strategie $18,000 bedraagt, heeft de uitvoeringsaanname bijna evenveel invloed als het signaal.
Stel een bandbreedte op die weergeeft wat je data kan laten zien
Begin met een basisaanname die past bij het ordertype van de strategie en de resolutie van de data. Voor een market order heb je de spread en impact nodig. Voor een limit order heb je een regel nodig die bepaalt of de order überhaupt wordt uitgevoerd; aannemen dat elke aangeraakte prijs tot een fill leidt, is een andere uitvoeringsfout.
Voer dezelfde backtest vervolgens uit met een kleine reeks expliciete scenario’s. Houd het signaal, de position sizing en de tijdstempels gelijk, zodat je veranderingen aan de uitvoering kunt toeschrijven:
| Scenario | Uitvoeringsaanname | Wat dit toetst |
|---|---|---|
| Gunstig | Basis-spread en lage impact | Hoe afhankelijk is de strategie van gunstige handelsomstandigheden? |
| Basis | Gebruikelijke spread en impact, geschaald op basis van participatie | Wat volgt er uit de gekozen werkhypothese? |
| Ongunstig | Bredere spread, hogere impact en vertraagde fill | Blijft de edge bestaan in een aannemelijk lastige markt? |
Dit zijn geen betrouwbaarheidsintervallen, tenzij je ze statistisch hebt gekalibreerd. Het zijn scenariotests. Vermeld in het rapport wat ze betekenen en neem er niet het gemiddelde van om zonder bewijs voor de waarschijnlijkheden een fictieve “verwachte slippage” te maken.
Laat het model reageren op de order
Een vaste toeslag in basispunten kan een redelijke eerste benadering zijn voor kleine orders. Naarmate de participatie toeneemt, wordt dat een minder goede beschrijving. Leg op zijn minst de ordernotional, het beschikbare barvolume en de participatiegraad vast. Noteer bij futures ook de contractwaarde en de relevante volume-eenheden; vermeld bij spotcrypto duidelijk de quotevaluta en de handelsplaats.
Een eenvoudige impactcurve kan capaciteitsdruk zichtbaar maken zonder te doen alsof die een orderboek nabootst. Je kunt de kost bijvoorbeeld definiëren als een basisspreadtoeslag plus een impactterm die toeneemt met de vierkantswortel van de participatie. Pas de parameters alleen aan als je over geschikte uitvoeringsdata beschikt. Zo niet, varieer de parameters en laat zien hoe snel het resultaat verslechtert.
Zorg ook dat het fill-model de strategie niet ongemerkt redt. Een longsignaal dat na een scherpe stijging binnenkomt, hoort niet de laagste prijs van de bar te krijgen alleen omdat die binnen de candle valt. Gebruik een causale fill-conventie, maak de prijs vervolgens ongunstiger en voeg vertraging toe. Als een vertraagde order de beweging mist, is dat een uitvoeringsresultaat en geen ongemak dat je moet wegmiddelen.
Een nuttige vraag: bij welke spread, impact, vertraging of participatiegraad wordt de nettoprestatie nul? Dat break-evenpunt is vaak bruikbaarder dan één Sharpe-ratio uit een backtest.
Gebruik paper trading om de bandbreedte te verkleinen
Paper trading laat niet zien welke fill je in een live matching engine zou hebben gekregen. Het kan wel uitwijzen of de orderstroom in de backtest overeenkomt met de beslissingen die het systeem werkelijk neemt: wanneer orders worden gegenereerd, hoe groot ze zijn en hoe lang ze uitvoerbaar blijven.
Vergelijk de gesimuleerde orderprijs met gelijktijdige quotes of met de marktdata die je paper-tradingsysteem registreert. Houd het verschil bij per instrument, tijdstip van de dag, ordergrootte en ordertype. Die waarnemingen kunnen de aannames voor die specifieke opzet aanscherpen. Ze zijn niet automatisch toepasbaar op een andere handelsplaats, marktomgeving of grotere order.
Critici hebben gelijk dat ongunstige scenario’s arbitrair kunnen zijn. Een bewust streng model kan een levensvatbare strategie afwijzen, net zoals een gunstig model een zwakke strategie mooier kan laten lijken. Bestempel het strengste scenario dus niet als de waarheid. Publiceer de aannames, toon de gevoeligheid en verzamel de data waarmee je giswerk kunt vervangen door gekalibreerde schattingen.
Een backtest kan zijn historische plek in de wachtrij niet afleiden uit een candle. Hij kan wel laten zien of het idee logisch blijft wanneer de uitvoering slechter uitpakt op manieren die je data niet kan uitsluiten. Dat is een nuttiger antwoord dan een extra decimaal.
← Alle artikelen


