Little
Bird Trading

Pine Script: barsluiting versus intrabar: repainting, meldingen en calc_on_every_tick

3 min leestijd · Bijgewerkt

Een Pine Script dat er op de historie schoon uitziet, kan live signalen afgeven die later verdwijnen. Bijna elk geval komt neer op één vraag: werkt het script op de gesloten balk of op de balk die nog wordt gevormd?

Deze gids behandelt elke instelling die dit bepaalt en wat ik gebruik voor niveaumeldingen.

Historische balken en de realtime balk

Op de historie voert Pine je script één keer per balk uit, bij de sluiting. Op de live balk draait het bij elke koersupdate opnieuw. Een voorwaarde als close > level kan om 10:01 waar zijn, om 10:03 onwaar en om 10:04 weer waar. De historie bewaart alleen het laatste antwoord. Dat verschil noemen traders repainting.

barstate.isconfirmed

barstate.isconfirmed is alleen waar bij de laatste update van een balk, wanneer die sluit. Als je het aan een voorwaarde toevoegt, gedraagt de live balk zich als de historie:

crossUp = ta.crossover(close, level) and barstate.isconfirmed
plotshape(crossUp, style=shape.triangleup, location=location.belowbar)
alertcondition(crossUp, "Close above level")

De prijs is snelheid. Je krijgt het signaal pas bij de balksluiting, op een traag tijdsbestek een hele balk later.

Meldingsfrequentie

Wanneer je een melding aanmaakt, vraagt TradingView hoe vaak die mag afgaan:

  • Once Per Bar Close: gaat alleen af wanneer de balk sluit terwijl de voorwaarde waar is. Dat komt overeen met de backtest.
  • Once Per Bar: gaat de eerste keer af dat de voorwaarde binnen de balk waar wordt, ook als de balk anders sluit.
  • Once Per Minute en Only Once: limieten op hoe vaak de melding afgaat.

Voor niveaumeldingen gebruik ik Once Per Bar Close op een grafiek van 1 of 5 minuten. Een lont door een niveau die weer binnen sluit, activeert niets, wat de meeste valse uitbraken eruit filtert.

Strategieën: calc_on_every_tick en process_orders_on_close

Een strategie draait standaard bij de balksluiting, zowel op de historie als op live balken. Twee instellingen veranderen dat:

  • calc_on_every_tick=true laat de strategie bij elke live update draaien. De historie kan dat niet, dus live trades gaan afwijken van de backtest.
  • process_orders_on_close=true vult orders bij de sluiting van de signaalbalk. Standaard worden ze bij de opening van de volgende balk gevuld. Het past bij een op sluiting gebaseerde uitstap, maar kan instappen mooier doen lijken.

Laat beide uit tot de strategie bij de balksluiting werkt. De gids indicator versus strategie behandelt de overige aannames van de Strategy Tester.

Bar Magnifier

Op de historie kent een strategie alleen de open, hoogste, laagste en slotkoers van elke balk. Als je stop en target allebei binnen één balk liggen, moet ze raden wat het eerst werd geraakt. use_bar_magnifier=true gebruikt data van een lager tijdsbestek om dat te beslechten, in betaalde TradingView-abonnementen. Zet het aan voordat je een strakke stop en target vertrouwt.

request.security en hogere tijdsbestekken

Een daghoogte in een grafiek van 5 minuten halen is een veelvoorkomende bron van repainting. Op de historie is de dagbalk al compleet, dus het script ziet de definitieve hoogte vanaf de eerste balk van de dag. Live blijft de hoogte bewegen. Vraag de vorige, afgeronde waarde op:

prevHigh = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)

De [1] met lookahead_on geeft de hoogte van gisteren op elke balk van vandaag, op de historie en live op dezelfde manier.

Een checklist

  • Signalen gebruiken barstate.isconfirmed of de melding staat op Once Per Bar Close.
  • Waarden van hogere tijdsbestekken gebruiken [1] met lookahead_on.
  • De strategie draait bij de balksluiting, met calc_on_every_tick uit.
  • Bar Magnifier staat aan wanneer stops en targets dicht bij elkaar liggen.
  • Je vergelijkt een week live meldingen met de backtest voordat je ermee handelt.

Niveaus die niet bewegen

De niveaus in mijn handelsplannen staan vóór de sessie vast en blijven de hele dag gelijk, dus een script dat ze tekent heeft niets om te repainten. De gids voor Pine Script-niveaus laat zien hoe je ze plot op TradingView.

FAQ

Wat is het verschil tussen barsluiting en intrabar in Pine Script?

Barsluiting betekent dat het script één keer handelt, wanneer de balk klaar is. Intrabar betekent dat het bij elke koersupdate binnen de balk handelt, waardoor een signaal kan verschijnen en weer verdwijnen vóór de sluiting.

Hoe voorkom ik dat een Pine Script-melding repaint?

Zet de melding op Once Per Bar Close, of voeg barstate.isconfirmed toe aan de voorwaarde. Gebruik voor data van een hoger tijdsbestek de waarde van de vorige balk met lookahead_on.

Gebruikt een strategiebacktest intrabar-koersen?

Alleen voor fills binnen een balk, en alleen met Bar Magnifier aan. Signalen op de historie worden berekend bij de sluiting van elke balk.

Bronnen

  • TradingView Pine Script User Manual: uitvoeringsmodel, repainting, meldingen
  • TradingView Help Center: Bar Magnifier

Alleen educatieve inhoud. Geen beleggingsadvies.