Little Bird Trading

Pine Script FAQ: backtests en alerts

4 min leestijd · Bijgewerkt

Dit is een FAQ in gewone taal over de twee Pine-vragen waar bijna iedereen op TradingView over struikelt: waarom de backtest van een strategie er beter uitziet dan live handelen aanvoelt, en waarom een alert soms op een ander moment of tegen een andere prijs afgaat dan je verwachtte. Beide komen voort uit dezelfde oorzaak: een mismatch tussen welke data echt beschikbaar was toen een beslissing werd genomen en wat je ogen zien nadat de bars zijn gesloten.

Wat is het verschil tussen een indicator, een strategy en een alert?

Een indicator (indicator()) tekent en berekent alleen: hij plot lijnen, kleuren en labels. Een strategy (strategy()) simuleert orders: hij roept strategy.entry/strategy.exit aan, vult ze tegen historische bars en levert het Strategy Tester-rapport met nettowinst, drawdown en winstpercentage. Een alert is een aparte notificatielaag die TradingView afvuurt als een voorwaarde waar is; hij handelt zelf niets. De verwarring begint als mensen een backtest als een belofte lezen of verwachten dat een alert een fill is: het zijn drie verschillende taken. Voor de diepere scheiding, zie de gids over indicator versus strategy.

Waarom ziet mijn backtest er geweldig uit maar komen de live resultaten niet overeen?

Vier dingen blazen een backtest op ten opzichte van de werkelijkheid, en alle vier zijn te verhelpen:

  • Aannames over bar-close versus intrabar. Standaard evalueert de Strategy Tester logica op de bar-close. Als je voorwaarde de hoogste of laagste koers of de close van de huidige bar gebruikt op een manier die pas bekend zou zijn nadat de bar is afgerond, gebruikt de historische fill informatie die de live trade niet had kunnen hebben.
  • Standaardfills tegen onrealistische prijzen. Een marktorder in de tester vult tegen de open van de volgende bar; bij een snelle opening kan die prijs live meerdere ticks of punten verderop liggen.
  • Geen commissie of slippage gemodelleerd. Als je commission_value en slippage in strategy() op nul laat, is elke gesimuleerde trade wrijvingsloos. Voeg realistische waarden toe: zelfs een fractie van een tick slippage maakt veel "winstgevende" scalpingsystemen negatief. (Commissie wordt ingesteld via commission_type en commission_value.)
  • Minieme steekproeven. Twaalf trades die allemaal werkten is te weinig om een edge te noemen. Zie hoe je overfit handelssystemen herkent voordat je een curve vertrouwt.

Rekenvoorbeeld: een systeem dat +US$ 4200 laat zien over 40 trades van ES zonder kosten ziet er heel anders uit zodra je een round-turn-commissie van US$ 2,50 en één tick slippage aan elke kant toevoegt, bij instap en uitstap. Eén tick op ES is 0.25 punt = US$ 12,50, dus twee ticks is US$ 25,00; tel de commissie van US$ 2,50 erbij en je krijgt US$ 27,50 aan wrijving per trade. Over 40 trades is dat ongeveer US$ 1100, waardoor een kopcijfer van +US$ 4200 ongeveer +US$ 3100 wordt, en erger als instappen zich opeenhopen bij volatiele openingen waar echte slippage breder uitvalt dan één tick.

Wat is repainting, en betekent het dat het script kapot is?

Niet per se. "Repainting" is een verzamelterm voor een script dat op historische bars andere waarden toont dan het in realtime produceerde. De eerlijke test is eenvoudig: had de beslissing met dezelfde informatie, op hetzelfde moment, live kunnen worden genomen? Een signaal dat pas bevestigt nadat de bar sluit, doet zijn werk: het wacht op de close voordat het bevestigt. Problemen komen van scripts die een signaal op de zich vormende bar plotten en het verschuiven zodra de bar klaar is, of die data van een hoger tijdframe ophalen met lookahead ingeschakeld. Wil je een signaal waarop je kunt handelen, evalueer het dan op barstate.isconfirmed (bar-close), dat alleen op de afgeronde bar reageert.

Waarom ging mijn alert te laat af, tegen een andere prijs, of twee keer?

  • "Once Per Bar Close" versus "Once Per Bar." Een alert die op de zich vormende bar afgaat, kan afgaan op het moment dat een voorwaarde intrabar even waar flikkert, waarna de bar elders sluit en het er "fout" uitziet. Afgaan bij de bar-close is later, maar het komt overeen met het moment waarop een bevestigde strategie daadwerkelijk zijn beslissing neemt (de strategie handelt dan bij de open van de volgende bar).
  • De alertprijs is een momentopname op het moment dat de alert afging. Je broker vult je tegen de live marktprijs, die in de milliseconden tussen de alert en je order beweegt.
  • Dubbele alerts betekenen meestal dat de voorwaarde over meerdere ticks waar bleef en de alert was ingesteld om bij elke tick af te gaan terwijl hij eenmaal per bar zou moeten afgaan.

Hoe sluit dit aan op de methode van Handelsplannen?

Handelsplannen omzeilt het hele probleem van "heeft mijn signaal gerepaint?" door je vaste, vooraf geplande niveaus te geven. De dagelijkse niveaus, getekend op ES, SPY, NQ en QQQ voor de opening, worden na de vorige slotkoers berekend en verschuiven niet tijdens de sessie, dus er valt niets te repainten: elk niveau staat voor 9:30 ET vast en blijft staan. MyLinedChart tekent alleen die niveaus; het simuleert nooit orders en kent dus geen van de aannames over backtestfills hierboven. Als een gepubliceerd niveau het oneens is met je eigen alert of strategie, behandel dat dan als informatie, en vaak is het antwoord wachten. Voor de terminologie, zie de woordenlijst van Handelsplannen.

Praktische checklist voordat je een Pine-resultaat vertrouwt

  • Bevestig de logica op barstate.isconfirmed zodat backtest en live hetzelfde beslismoment delen.
  • Stel realistische commissie en slippage in, commission_type, commission_value en slippage in strategy(), voor het instrument dat je echt handelt.
  • Kies de alertfrequentie bewust: bar-close voor bevestiging, eenmaal per bar om dubbele alerts te vermijden.
  • Beoordeel resultaten op genoeg trades om ertoe te doen.
  • Houd contextuele overlays (zoals gepubliceerde niveaus) gescheiden van de uitvoeringsbevoegdheid: de chart informeert de beslissing, jouw geschreven regels nemen haar.

Verder lezen

Bronnen

Alleen educatieve inhoud. Geen beleggingsadvies.

Alleen educatieve inhoud. Geen beleggingsadvies.