Order Fill simulatie: Limietorders vs Marktorders in backtests
Stel je voor: je hebt een prachtige Python-strategie gebouwd, getest met Backtrader of Lean, en de resultaten zien er fantastisch uit.
Maar als je de bot live zet bij Interactive Brokers of DEGIRO, loopt de uitvoering totaal anders. Dat gat tussen theorie en praktijk? Dat zit hem vaak in hoe je order fills simuleert. Limietorders en marktorders gedragen zich compleet anders in een backtest, en dat verschil bepaalt of je winst maakt of verliest. We gaan het nu eerlijk hebben over wat echt werkt.
Hoe marktorders zich gedragen in een backtest
Een marktorder is de eenvoudigste manier om in te stappen. Je script stuurt een order naar de broker API, en je krijgt direct de volgende beschikbare prijs. In een backtest betekent dit meestal: je krijgt de exacte slotkoers van die candle.
Simpel, snel, en geen discussie. Voor een momentum-strategie op de S&P 500 (via een ETF zoals SPY) voelt dit vaak heel realistisch.
Maar er zit een addertje onder het gras. In de echte markt betaal je de spread.
Bij een broker als Interactive Brokers is die spread bij liquiditeit soms maar €0,01, maar bij minder populaire aandelen of crypto-paren loopt die op tot €0,50 of meer. In een backtest met marktorders wordt die spread vaak genegeerd, tenzij je het expliciet toevoegt. Je resultaten zien er dan te rooskleurig uit.
Ook de volgorde van uitvoering is een valkuil. Als je een script schrijft dat op 10:00:01 een marktorder plaatst, neemt een backtest vaak aan dat die order exact op de slotprijs van die seconde wordt gevuld.
Marktorders zijn makkelijk om te testen, maar geven een te optimistisch beeld van de werkelijkheid.
In werkelijkheid is er vertraging door de API, netwerklatency, en de tijd die de broker nodig heeft. Die paar milliseconden kunnen het verschil maken tussen winst en verlies, vooral bij high-frequency strategieën. Een ander groot voordeel van marktorders is dat ze altijd gevuld worden. Je zit nooit vast aan een openstaande order die niet wordt uitgevoerd.
Dit is vooral handig bij break-out strategieën, waar je snel in moet stappen. Als de koers door een weerstand breekt, wil je niet dat je limietorder op een halve meter afstand blijft hangen.
Limietorders: nauwkeurig maar onzeker
Limietorders geven je controle. Je bepaalt exact de maximale prijs die je wilt betalen (bij een aankoop) of de minimale prijs die je wilt ontvangen (bij een verkoop).
In een backtest met Python libraries zoals Backtrader of VectorBT kun je dit heel gedetailleerd instellen. Je kunt een limietorder plaatsen op €50,20 en wachten tot de markt dat niveau raakt.
De realiteit is echter dat een limietorder niet altijd wordt uitgevoerd. Als de koers nooit tot op jouw limietprijs komt, blijft de order open en mis je de trade. In een backtest moet je dit goed modelleren: niet elke order wordt gevuld. Sommige backtesting engines doen dit automatisch, andere gaan ervan uit dat een limietorder altijd wordt uitgevoerd zodra de prijs wordt aangeraakt.
Dat is een gevaarlijke aanname. Een ander voordeel van limietorders is dat ze geen spread betalen.
Je betaalt geen extra kosten bovenop je limietprijs. Bij een broker als DEGIRO of Lynx kan dit flink schelen, vooral bij grotere volumes. In een backtest zie je dit terug in een betere entry-prijs, soms wel €0,10 tot €0,30 beter dan een marktorder op dezelfde candle.
Maar er zit een keerzijde aan. Limietorders kunnen leiden tot "slippage" in de verkeerde richting.
Stel je plaatst een limietorder op €50,20, maar de markt schiet door naar €50,50 zonder ooit €50,20 te raken.
Je mist de trade volledig. Bij een momentum-strategie kan dit betekenen dat je de grootste moves mist, terwijl je alleen de kleine correcties meepakt.
Vergelijking op 5 concrete criteria
Laten we beide opties eerlijk naast elkaar leggen. We kijken naar prijs, capaciteit, gebruiksgemak, kosten op termijn en risicobeheer.
1. Prijsnauwkeurigheid: Limietorders winnen hier. Je krijgt exact de prijs die je wilt, zonder spread.
Markorders betalen de spread, wat bij 100 trades per jaar al snel €50 tot €200 extra kost, afhankelijk van de broker en het instrument. 2.
Capaciteit en liquiditeit: Markorders zijn beter voor grote volumes. Als je 1.000 aandelen wilt kopen, wordt een limietorder misschien maar gedeeltelijk gevuld.
Een marktorder zorgt ervoor dat je volledig instapt, hoewel je wel slippage kunt krijgen bij illiquide markten. 3. Gebruiksgemak: Marktorders zijn eenvoudiger. Je script is korter: "koop tegen marktprijs".
Limietorders vereisen extra code voor het beheren van openstaande orders, annuleringen en herplaatsingen. Voor beginners is dit een drempel.
4. Kosten op termijn: Limietorders zijn vaak goedkoper omdat je geen spread betaalt. Maar als je te veel openstaande orders houdt, loop je risico op onverwachte uitvoeringen.
Markorders zijn voorspelbaarder in kosten, maar de spread telt op. 5.
Risicobeheer: Limietorders geven meer controle over het exacte instappunt, wat helpt bij risicomanagement. Markorders kunnen leiden tot ongewenste slippage, vooral tijdens nieuwsgebeurtenissen. Een mix van beide is soms het beste.
Praktische voorbeelden met Python en brokers
Stel je gebruikt Backtrader voor een mean-reversion strategie op de AEX-index. Voordat je start met backtesting, koop je een limietorder op €50,20 als de koers onder de Bollinger Band daalt.
In de backtest wordt die order alleen gevuld als de koers echt tot €50,20 komt. In de praktijk bij een broker zoals ABN AMRO of Robeco kan dit betekenen dat je soms dagen wacht, of nooit wordt gevuld. Begrijp waarom resultaten bij je broker afwijken van je eigen code. Een ander voorbeeld: een momentum-strategie op crypto via Binance.
Je gebruikt een marktorder zodra de RSI boven 70 komt. In de backtest met Python (gebruikmakend van de Binance API) zie je directe uitvoering.
In de praktijk betaal je een spread van 0,1% tot 0,2%, en tijdens pieken loopt die op tot 0,5%. Dat is €50 op een €10.000 trade. Voor risicomanagement is het slim om in je script limieten in te bouwen.
Bijvoorbeeld: als een limietorder na 5 candles niet is gevuld, annuleer en plaats een marktorder. Dit voorkomt dat je te lang wacht en mist wat de markt doet.
Libraries zoals Backtrader ondersteunen dit met "bracket orders" of OCO (One Cancels Other) orders.
Denk ook aan de broker API. Interactive Brokers heeft een strakke API voor Python, maar je moet rekening houden met minimum ordergrootte en tick sizes. Een limietorder op €50,20 werkt alleen als de tick size bijvoorbeeld €0,01 is. Bij DEGIRO zijn de mogelijkheden beperkter; je moet soms handmatig orders aanpassen.
Keuzehulp: welke order kies je?
Kies een marktorder als je snelheid en zekerheid nodig hebt. Bij break-out strategieën, nieuwsgebeurtenissen, of als je in illiquide markten handelt, is een marktorder vaak beter.
Je betaalt de spread, maar je bent er zeker van dat je instapt.
Dit is vooral handig voor beginnende algoritmische traders die de complexiteit van limietorders willen vermijden. Kies een limietorder als je prijsnauwkeurigheid en kostenbeheersing belangrijk vindt. Bij mean-reversion of range-handel, waar je een specifiek instappunt wilt, werken limietorders uitstekend.
Ook bij grote volumes of minder liquide aandelen bespaar je op de spread. Zorg wel dat je script openstaande orders beheert en annuleert na een timeout.
Een middenweg is het gebruik van een "limit-maker" of "pegged" order. Sommige brokers, zoals Interactive Brokers, bieden orders aan die automatisch aanpassen aan de markt, maar wel binnen een limiet blijven. Of je kunt een hybride aanpak gebruiken: plaats een limietorder, en als die na X minuten niet is gevuld, schakel over op een marktorder. Dit combineert het beste van beide werelden.
Onthoud dat geen enkele backtest perfect is. Test altijd met realistische spreads, slippage simuleren, en transactiekosten.
Gebruik historische data van je broker, niet alleen gratis datasets. En loop je strategie eerst paper trading voordat je echt geld inzet. Zo bouw je vertrouwen op en voorkom je vervelende verrassingen.
Uiteindelijk komt het aan op je doelen en risicoprofiel. Als je rustig wilt opbouwen, begin met limietorders in een veilige omgeving.
Als je snelle resultaten wilt en de markt actief volgt, zijn marktorders een logische start. Experimenteer, leer, en pas je aan. De markt is een marathon, geen sprint.
