Twaalf winsttrades en acht verliestrades: op het eerste gezicht ziet een test met twintig signalen op historische indexprijzen er goed uit. De winrate is 60%. Voor een CFD-rekening is daarmee nog niet berekend hoeveel geld er na uitvoering en contractkosten overblijft.
Een grafieksignaal is geen rekeningafschrift. De grafiek kan middenkoersen gebruiken, terwijl je een CFD koopt tegen de laatprijs en verkoopt tegen de biedprijs. Je stop kan slechter worden uitgevoerd dan de modelprijs. Houd je een positie overnight of over het weekend vast, dan kan er bovendien een financieringsboeking bijkomen die de grafiek niet toont.
We rekenen één verzonnen backtest na om duidelijk te maken welke controles nodig zijn. De getallen zijn geen echte brokerquotes; er zijn geen transacties of handelstesten uitgevoerd.
Backtesten houdt in dat je vooraf bepaalde regels toepast op oude marktgegevens. 'Kopen als de markt sterk oogt' is niet nauwkeurig genoeg. Je moet objectief definiëren welk signaal tot een order leidt, hoeveel blootstelling je kiest, welke prijs je verwacht, wanneer een stop of limiet geldig wordt en hoe de positie sluit.
Denk aan een systeem dat een index-CFD opent zodra een volledig afgesloten vijftienminutencandle boven een vooraf gekozen niveau sluit. Een later vastgelegd exitsignaal sluit de trade. Contractgrootte en het geplande maximale risico per transactie zijn vooraf bepaald. Al die voorwaarden moeten bekend zijn voordat het signaal verschijnt.
Die timing is belangrijk. Als je voor een aankoop om 10.15 uur de slotkoers gebruikt van de candle die pas om 10.30 uur eindigt, gebruik je informatie die toen nog niet beschikbaar was. Dit heet look-ahead bias. Het model kan daardoor instappen suggereren die op het vermelde moment niet bereikbaar waren.
Bij Handelsstrategieën staat de algemene werkwijze. Hier rekenen we uit hoe uitvoering en CFD-contractkosten het resultaat van dezelfde regels beïnvloeden.
Het voorbeeld omvat twintig afgesloten posities in één verzonnen testperiode, allemaal met dezelfde hypothetische puntwaarde. De bedragen zijn opzettelijk eenvoudig zodat iedere post na te rekenen is.
| Bruto handelsuitkomst | Aantal trades | Totaal |
|---|---|---|
| Winsttrades van € 12 | 12 | +€ 144 |
| Verliestrades van € 10 | 8 | −€ 80 |
| Brutosom vóór CFD-kosten | 20 | +€ 64 |
De bruto winrate is 60%: twaalf van de twintig trades winnen. Iedere bruto winnaar levert € 12 op, iedere verliezer kost € 10. Opgeteld staat er € 64 winst vóór CFD-kosten.
Een bruto koersuitkomst is echter niet hetzelfde als het bedrag dat op een CFD-rekening achterblijft. In de tabel zitten nog geen bied-laatkosten, verschillen tussen aangevraagde en uitgevoerde prijs, financiering, valutawisseling of marginbeperkingen.
Bovendien gaat het om een verzonnen reeks van twintig posities. Zij zegt niets over een bestaande strategie, de juistheid van historische gegevens of de kans op toekomstige winst.
Grafieken kunnen referentiewaarden of middenkoersen tonen. Een CFD-aanbieder toont doorgaans een afzonderlijke bied- en laatprijs. Kopen op de laatkant en later verkopen op de biedkant veroorzaakt prijsfrictie.
We nemen in dit model € 2 totale spreadkosten per afgesloten positie aan, voor zowel de opening als de sluiting. Het is een verzonnen all-in spreadbedrag voor een heen-en-terugtrade, geen echte offerte. Bij twintig trades is de berekening:
20 × € 2 = € 40.
Van de € 64 bruto blijft dan € 24 over. Trek niet nog eens € 2 af bij de exit: het gekozen bedrag geldt al voor de beide handelszijden.
Bij CFD-kosten staat de algemene uitleg. Controleer voor deze backtest wat de dataset werkelijk bevat: biedprijzen, laatprijzen, middenkoersen of een indexreferentie. Vraag daarna of de gemodelleerde spread destijds gold en of de CFD-aanbieder toen uitvoerbaar quoteerde. Een huidig marketingcijfer voor de 'gemiddelde spread' vult die historische gegevens niet in.
Stel dat tien van de twintig verzonnen trades voor één euro per positie slechter worden uitgevoerd dan de modelprijs. Zo'n verschil kan ontstaan doordat de prijs tussen orderactivering en uitvoering beweegt, bijvoorbeeld rond nieuws of in dunne handel.
We boeken voor deze tien gevallen een veronderstelde ongunstige slippage van € 1 per trade:
10 × € 1 = € 10.
Het bedrag van € 24 daalt naar € 14. In de praktijk kan slippage nul zijn of onder bepaalde omstandigheden juist gunstig. Hier veronderstellen we bewust nadelige uitvoering om een te optimistische test bloot te leggen. Het getal is geen gemeten slippageverdeling van een broker.
De bestaande uitleg van stop-loss en take-profit beschrijft de basale ordertypen. In een backtest mag je het raken van het stopniveau niet automatisch als een fill op exact die prijs tellen. Een gewone stop garandeert geen uitvoeringskoers. Een gegarandeerde stop kan onder aparte voorwaarden en mogelijk tegen een premie bestaan, maar je mag niet veronderstellen dat zo'n functie historisch beschikbaar was.
Een gesimuleerde order kan ook onmogelijk uitvoerbaar zijn geweest wanneer de markt gesloten was, de CFD-aanbieder niet quoteerde, de rekening te weinig vrije marge had of het instrument tijdelijk stillag. Een CSV met alleen theoretische instap en uitstap kan niet bewijzen dat aan die voorwaarden werd voldaan.
Bij sommige cash-CFD's kan een positie die voorbij het dagelijkse afkapmoment van de aanbieder wordt aangehouden een financieringspost opleveren. Die wordt soms als losse cashtransactie geboekt, en niet als koersverschil op de open positie.
Veronderstel dat vier van de twintig verzonnen trades elk € 4 aan financiering kosten. Ook deze bedragen zijn fictief en niet verbonden aan een markt of tarief:
4 × € 4 = € 16 financieringskosten.
Na die financieringspost zakt het tussentotaal van € 14 naar −€ 2. De reeks heeft nog steeds twaalf bruto winsttrades; het percentage wordt dus niet ineens '40%'. De bruto winrate en de totale netto-uitkomst meten iets anders. Onder deze aannames eindigt de rekeningberekening in verlies.
| Uitkomst van het fictieve handelslog | Bedrag |
|---|---|
| Brutoresultaat van 20 trades | +€ 64 |
| Totale spreadfrictie | −€ 40 |
| Nadelige slippage op 10 trades | −€ 10 |
| Financiering op 4 trades | −€ 16 |
| Netto volgens het vastgelegde model | −€ 2 |
Commissies, valutaomrekening, andere mogelijke contractcorrecties en belasting vallen buiten dit model. Het totaal is dus geen complete prognose van een rekening. De werkelijk geldende financieringsformules en boekingsdagen kunnen per instrument en rekening ook verschillen.
De volgende tabel bevat alle twintig regels van een volledig verzonnen transactielog. Het is een didactische boekhoudcasus, geen backtest van historische markten en geen bewijs voor toekomstige prestaties. We nemen € 1 per punt aan; de brutokolom komt uit verzonnen middenkoersbewegingen van € 100 naar € 112 of € 90. In deze fictieve casus bestaan geen werkelijke bied- en laattijdstempels of echte orders.
| ID | Bruto | Totale spread | Extra slippage | Overnight | Netto |
|---|---|---|---|---|---|
| T01 | +12 | -2 | 0 | 0 | +10 |
| T02 | -10 | -2 | -1 | 0 | -13 |
| T03 | +12 | -2 | 0 | -4 | +6 |
| T04 | +12 | -2 | -1 | 0 | +9 |
| T05 | -10 | -2 | -1 | 0 | -13 |
| T06 | +12 | -2 | 0 | -4 | +6 |
| T07 | -10 | -2 | -1 | 0 | -13 |
| T08 | +12 | -2 | 0 | 0 | +10 |
| T09 | +12 | -2 | -1 | 0 | +9 |
| T10 | -10 | -2 | 0 | 0 | -12 |
| T11 | +12 | -2 | 0 | 0 | +10 |
| T12 | +12 | -2 | -1 | -4 | +5 |
| T13 | -10 | -2 | 0 | 0 | -12 |
| T14 | +12 | -2 | 0 | 0 | +10 |
| T15 | -10 | -2 | -1 | 0 | -13 |
| T16 | +12 | -2 | -1 | 0 | +9 |
| T17 | -10 | -2 | 0 | 0 | -12 |
| T18 | +12 | -2 | -1 | 0 | +9 |
| T19 | -10 | -2 | 0 | -4 | -16 |
| T20 | +12 | -2 | -1 | 0 | +9 |
Zo kun je de tabel narekenen. Twaalf keer € 12 bruto winst en acht keer € 10 bruto verlies leveren samen € 64 op. Twintig heen-en-terugspreads van € 2 kosten € 40. Tien ongunstige fills van € 1 kosten € 10 en vier overnightboekingen van € 4 samen € 16. Netto € 64 − € 40 − € 10 − € 16 = −€ 2. Eenzelfde fictieve trade mag zowel slippage als financiering hebben: dat zijn aparte posten. De spread bevat de opening én de sluiting. De middenkoersinstap en -uitstap zijn alleen gebruikt voor het brutoresultaat; er zijn geen uitvoerbare CFD-bied- en laatquotes waargenomen.
Gebruik je deze tabel als sjabloon, leg dan vóór de simulatie de kostendefinities vast en controleer of sommige kosten al verwerkt zijn in de historische quotes. Bereken je het resultaat al op werkelijke bied- en laatprijzen, trek dezelfde spread dan niet nog eens afzonderlijk af. Houd daarom aparte kolommen aan voor bruto, spread, slippage, overnight, netto en de herkomst van de gegevens. Een echte backtest heeft ook werkelijke contracteenheid, tijdstempels, quote-beschikbaarheid, ordertype, rekeningmarge en corporate actions nodig. Die ontbreken bewust. De twintig verzonnen regels vormen ook geen doorlopend rekeningverloop: er is geen startkapitaal, model voor overlappende posities, drawdown of margin-close-outsequentie.
Ook een rekenkundig kloppende backtest kan een vertekend beeld geven. Let vooral op deze drie fouten:
Overfitting. Parameters herhaaldelijk veranderen totdat ze oude gegevens passen kan toevalsruis in plaats van een herhaalbaar patroon vastleggen.
Look-ahead bias. Gebruik van informatie die bij de historische trade nog niet bekend was, zoals een later candle-einde, toekomstige indicatorwaarde of bijgewerkte dataset.
Survivorship bias. Alleen instrumenten testen die nog bestaan en mislukte, geschrapte of beëindigde producten uit de steekproef laten.
Deel de data in een ontwikkelperiode en een strikt apart gehouden, onaangeroerde testperiode (out of sample). Kies de regels met de eerste periode en beoordeel daarna de vaststaande regels op de tweede. Pas je de strategie alsnog aan nadat je de tweede periode hebt gezien, dan is het geen echte onafhankelijke controle meer.
Neem ook scenario's op met bredere spreads, gaps, illiquide handelsmomenten en grote verliezen. Een strategie die alleen in kalme markten is getest, zegt weinig over de prijs waarop je tijdens stress echt had kunnen sluiten.
De bestaande uitleg over CFD-marge beschrijft het rekeningmechanisme. Een contract is niet slechts een lijn op een grafiek. Bij CFD-handel met hefboom kan een ongunstige beweging het beschikbare rekeninggeld aantasten. Onder het toepasselijke retail-CFD-regime bestaat een margin-close-outmechanisme, maar dat verhindert niet dat beschikbaar geld verloren gaat.
In een echte rekening kan een positie daarom al worden gesloten voordat het berekende koersdoel of het in de historische simulatie veronderstelde herstel wordt bereikt. Een backtest die een verliespositie onbeperkt laat staan wanneer het onderpand onvoldoende zou zijn geweest, test geen uitvoerbaar rekeningpad.
Je moet dus naast de eindresultaten ook de tussentijdse blootstelling, geldstromen, vereiste marge en mogelijke stop-outmomenten modelleren. Die parameters hangen af van het instrument, de aanbieder, de rekening en de klantclassificatie.
Gebruik de illustratie niet om een handelsstrategie te kiezen. Twintig verzonnen transacties zijn te weinig en te kunstmatig om een statistisch voordeel te bewijzen. Ze laten vooral zien waarom vier bewijslagen nodig zijn.
Leg voor een historische test de koersdatabron, de momenten waarop signalen bekend werden, de veronderstelde uitvoerbare bied- en laatprijzen en de rekeningtransacties vast. Bewaar de oorspronkelijke regels, zodat je kunt reconstrueren wat vóór aanvang van de test al vaststond.
Onderzoek wat er gebeurt wanneer spreads stijgen, perfecte stopfills worden losgelaten, een realistisch financieringsschema wordt toegevoegd en een onaangeroerde historische periode voor validatie wordt gebruikt. De bestaande uitleg over paper trading behandelt de verschillen tussen demo en live. Een latere demotest kan uitvoering onder actuele omstandigheden tonen, maar vervangt historische validatie niet en garandeert evenmin echte livefills.
Deze twintig verzonnen trades zeggen niets over het structurele rendement van CFD-strategieën. Wel tonen ze waarom een aantrekkelijke bruto-uitkomst geen bewijs is van netto winst op een CFD-rekening. Je kunt het resultaat pas beoordelen wanneer de koersdata, de uitvoeringsaannames, alle relevante contractkosten en het margerisico op dezelfde basis zijn doorgerekend.
Alle getallen en trades in dit artikel zijn verzonnen. Er is geen bestaande strategie getest en er zijn geen echte transacties uitgevoerd. CFD's zijn complexe hefboomproducten. Historische of gesimuleerde resultaten garanderen geen toekomstige uitkomsten.