Pine Script: Bar Close mot Intrabar, repainting, larm och calc_on_every_tick
3 min läsning · Uppdaterad
Ett Pine Script som ser rent ut i historiken kan skicka signaler live som senare försvinner. Nästan alla fall handlar om en fråga: arbetar skriptet på den stängda staplen eller på staplen som fortfarande bildas?
Den här guiden går igenom varje inställning som styr det och vad jag använder för nivålarm.
Historiska staplar och realtidsstapeln
I historiken kör Pine ditt skript en gång per stapel, vid stängningen. På den levande staplen körs det igen vid varje prisuppdatering. Ett villkor som close > level kan vara sant klockan 10:01, falskt klockan 10:03 och sant igen klockan 10:04. Historiken sparar bara det sista svaret. Den skillnaden kallar traders repainting.
barstate.isconfirmed
barstate.isconfirmed är sant bara vid en stapels sista uppdatering, när den stängs. Lägger du till det i ett villkor beter sig den levande staplen som historiken:
crossUp = ta.crossover(close, level) and barstate.isconfirmed
plotshape(crossUp, style=shape.triangleup, location=location.belowbar)
alertcondition(crossUp, "Close above level")
Priset är hastighet. Du får signalen vid stapelstängningen, en hel stapel senare på en långsam tidsram.
Larmfrekvens
När du skapar ett larm frågar TradingView hur ofta det får utlösas:
- Once Per Bar Close: utlöses bara när staplen stänger med villkoret uppfyllt. Det stämmer med backtestet.
- Once Per Bar: utlöses första gången villkoret blir sant inne i staplen, även om staplen stänger åt andra hållet.
- Once Per Minute och Only Once: gränser för hur många gånger det utlöses.
För nivålarm använder jag Once Per Bar Close på ett diagram med 1 eller 5 minuter. En veke genom en nivå som stänger tillbaka innanför utlöser inte, vilket tar bort de flesta falska brott.
Strategier: calc_on_every_tick och process_orders_on_close
En strategi körs som standard vid stapelstängning, både på historiska och levande staplar. Två inställningar ändrar det:
calc_on_every_tick=truekör strategin vid varje levande uppdatering. Det kan historiken inte, så affärer live börjar skilja sig från backtestet.process_orders_on_close=truefyller ordrar vid signalstapelns stängning. Som standard fylls de vid nästa stapels öppning. Det passar en stängningsbaserad exit, men kan få inträden att se bättre ut än de är.
Låt båda vara av tills strategin fungerar vid stapelstängning. Guiden om indikator mot strategi tar upp resten av Strategy Testers antaganden.
Bar Magnifier
I historiken känner en strategi bara till varje stapels open, high, low och close. Om både ditt stopp och ditt mål ligger inne i en stapel måste den gissa vilket som träffades först. use_bar_magnifier=true avgör det med data från lägre tidsram, på betalda TradingView-planer. Slå på det innan du litar på ett tätt stopp och mål.
request.security och högre tidsramar
Att hämta ett dagshögsta in i ett diagram på 5 minuter är en vanlig källa till repainting. I historiken är dagsstapeln redan färdig, så skriptet ser det slutliga högsta från dagens första stapel. Live fortsätter högsta att röra sig. Be om det föregående, färdiga värdet:
prevHigh = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
[1] med lookahead_on ger gårdagens högsta på varje stapel idag, i historiken och live på samma sätt.
En checklista
- Signaler använder
barstate.isconfirmedeller så är larmet Once Per Bar Close. - Värden från högre tidsram använder
[1]medlookahead_on. - Strategin körs vid stapelstängning, med
calc_on_every_tickav. - Bar Magnifier är på när stopp och mål ligger nära varandra.
- Du jämför en veckas live-larm med backtestet innan du handlar på det.
Nivåer som inte rör sig
Mina nivåer i Handelsplaner sätts före sessionen och ligger fast hela dagen, så ett skript som ritar dem har inget att repainta. Guiden om Pine Script-nivåer visar hur du ritar ut dem i TradingView.
Vanliga frågor
Vad är skillnaden mellan bar close och intrabar i Pine Script?
Bar close betyder att skriptet agerar en gång, när staplen är klar. Intrabar betyder att det agerar vid varje prisuppdatering inne i staplen, så en signal kan dyka upp och försvinna före stängningen.
Hur hindrar jag ett Pine Script-larm från att repainta?
Ställ in larmet på Once Per Bar Close, eller lägg till barstate.isconfirmed i villkoret. För data från högre tidsram använder du föregående stapels värde med lookahead_on.
Använder ett strategibacktest priser inne i staplarna?
Bara för fyllningar inne i en stapel, och bara med Bar Magnifier på. Signaler i historiken räknas ut vid varje stapels stängning.
Källor
- TradingView Pine Script User Manual: Execution model, Repainting, Alerts
- TradingView Help Center: Bar Magnifier
Endast utbildningsinnehåll. Ingen investeringsrådgivning.