Little
Bird Trading

Pine Script: chiusura di barra o intrabar, repainting, avvisi e calc_on_every_tick

3 min di lettura · Aggiornato il

Uno script Pine Script che sembra pulito sullo storico può far partire segnali dal vivo che poi scompaiono. Quasi ogni caso si riduce a una domanda: lo script lavora sulla barra chiusa o sulla barra ancora in formazione?

Questa guida copre ogni impostazione che lo controlla e cosa uso io per gli avvisi sui livelli.

Barre storiche e barra in tempo reale

Sullo storico, Pine esegue il tuo script una volta per barra, alla sua chiusura. Sulla barra live lo esegue a ogni aggiornamento di prezzo. Una condizione come close > level può essere vera alle 10:01, falsa alle 10:03 e di nuovo vera alle 10:04. Lo storico conserva solo l'ultima risposta. Questo divario è ciò che i trader chiamano repainting.

barstate.isconfirmed

barstate.isconfirmed è vero solo all'ultimo aggiornamento di una barra, quando si chiude. Aggiungerlo a una condizione fa comportare la barra live come lo storico:

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

Il costo è la velocità. Ricevi il segnale alla chiusura della barra, una barra intera dopo su un timeframe lento.

Frequenza degli avvisi

Quando crei un avviso, TradingView chiede con quale frequenza può scattare:

  • Once Per Bar Close: scatta solo quando la barra si chiude con la condizione vera. Corrisponde al backtest.
  • Once Per Bar: scatta la prima volta che la condizione diventa vera dentro la barra, anche se la barra chiude nell'altro senso.
  • Once Per Minute e Only Once: limiti sul numero di volte in cui scatta.

Per gli avvisi sui livelli uso Once Per Bar Close su un grafico a 1 o 5 minuti. Un'ombra che attraversa un livello e richiude all'interno non fa scattare nulla, il che elimina la maggior parte delle false rotture.

Strategie: calc_on_every_tick e process_orders_on_close

Per impostazione predefinita una strategia viene eseguita alla chiusura di barra, sia sullo storico sia sulle barre live. Due impostazioni cambiano questo comportamento:

  • calc_on_every_tick=true esegue la strategia a ogni aggiornamento live. Lo storico non può farlo, quindi i trade reali iniziano a differire dal backtest.
  • process_orders_on_close=true esegue gli ordini alla chiusura della barra del segnale. Per impostazione predefinita vengono eseguiti all'apertura della barra successiva. Va bene per un'uscita basata sulla chiusura, ma può abbellire gli ingressi.

Lasciali entrambi disattivati finché la strategia non funziona alla chiusura di barra. La guida indicatore o strategia copre il resto delle ipotesi dello Strategy Tester.

Bar Magnifier

Sullo storico, una strategia conosce solo apertura, massimo, minimo e chiusura di ciascuna barra. Se stop e target stanno entrambi dentro la stessa barra, deve indovinare quale sia stato colpito per primo. use_bar_magnifier=true usa dati di un timeframe inferiore per stabilirlo, sui piani a pagamento di TradingView. Attivalo prima di fidarti di uno stop e un target ravvicinati.

request.security e timeframe superiori

Portare il massimo giornaliero su un grafico a 5 minuti è una fonte comune di repainting. Sullo storico la barra giornaliera è già completa, quindi lo script vede il massimo finale fin dalla prima barra del giorno. Dal vivo il massimo continua a muoversi. Chiedi il valore precedente, già concluso:

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

Il [1] con lookahead_on dà il massimo di ieri su ogni barra di oggi, sia sullo storico sia dal vivo.

Una checklist

  • I segnali usano barstate.isconfirmed oppure l'avviso è su Once Per Bar Close.
  • I valori di timeframe superiore usano [1] con lookahead_on.
  • La strategia viene eseguita alla chiusura di barra, con calc_on_every_tick disattivato.
  • Bar Magnifier è attivo quando stop e target sono vicini.
  • Confronti una settimana di avvisi live con il backtest prima di operarci.

Livelli che non si muovono

I livelli dei miei Piani di trading sono fissati prima della sessione e restano fermi tutto il giorno, quindi uno script che li disegna non ha nulla da ridisegnare. La guida ai livelli Pine Script mostra come tracciarli su TradingView.

FAQ

Qual è la differenza tra chiusura di barra e intrabar in Pine Script?

Chiusura di barra significa che lo script agisce una sola volta, quando la barra è finita. Intrabar significa che agisce a ogni aggiornamento di prezzo dentro la barra, quindi un segnale può comparire e sparire prima della chiusura.

Come evito il repainting di un avviso Pine Script?

Imposta l'avviso su Once Per Bar Close, oppure aggiungi barstate.isconfirmed alla condizione. Per i dati di un timeframe superiore, usa il valore della barra precedente con lookahead_on.

Un backtest di una strategia usa i prezzi intrabar?

Solo per le esecuzioni dentro una barra, e solo con Bar Magnifier attivo. I segnali sullo storico vengono calcolati alla chiusura di ogni barra.

Fonti

  • Manuale utente Pine Script TradingView: modello di esecuzione, repainting, avvisi
  • Centro assistenza TradingView: Bar Magnifier

Solo contenuti educativi. Non è consulenza finanziaria.