Vedo l'errore 'Pine cannot determine the referencing length of a series. Try using max_bars_back'

Quando uno script Pine viene elaborato, sono creati dei buffer di valori storici per ogni variabile presente nel codice. Questi contengono informazioni relative ai valori passati delle variabili/funzioni e sono usati quando vi si fa riferimento con l'operatore storico []. Di conseguenza, la dimensione dei buffer indica quando indietro nel tempo si può arrivare con ogni valore.

Pine determina automaticamente la dimensione del buffer di ogni variabile/funzione analizzando i riferimenti al passato che si verificano nel calcolo dello script per le prime 244 barre. Se non ce ne sono, viene assegnata una dimensione standard, che per le variabili è di 300 barre, mentre per le funzioni è di 1 barra.

C'è un errore che si verifica spesso all'interno dei periodi ipotetici (if, iff o ?), nel caso in cui i riferimenti al passato per una variabile o una funzione all'interno di una condizione ipotetica vengano eseguiti oltre la 244esima barra. In queste situazioni, Pine non è in grado di assegnare una dimensione adeguata al buffer e viene usata quella standard. Dai un'occhiata al codice qui sotto, che restituisce l'errore menzionato nel titolo perché:

  • Il valore della variabile var1 non è noto al momento dell'elaborazione
  • La variabile test non fa alcun riferimento al passato nelle prime 244 barre del grafico

Per questi motivi, alla variabile test viene assegnata la dimensione standard di 300 barre, e quando lo script richiede il valore della 301esima, si verifica l'errore.

//@version=4
study("max_bars_back var",overlay=true)
var1 = input(301)
test = 0.0
//max_bars_back(test, 301)
if bar_index > 244
test := test[var1]
plot(test)

Per ovviare a tale problematica, esistono il parametro max_bars_back e la funzione max_bars_back(), che permettono di specificare la dimensione corretta per il buffer di una variabile o una funzione, laddove il valore standard non sia sufficiente. Togliendo il // posto davanti a tale funzione nel codice qui sopra, porta ad assegnare un buffer di 301 alla variabile test, così da rendere il calcolo funzionante.

Ecco un esempio di una funzione a cui viene assegnato il valore di default di 1 barra per la mancata invocazione all'interno delle prime 244 barre. Anche se non ci sono riferimenti espliciti ai valori passati con l'operatore [], la funzione richiede gli ultimi 20 valori per essere calcolata. Pertanto, lo script restituirà il messaggio di errore:

//@version=4
study("Requires max_bars_back")
test = 0.0
if bar_index > 1000
test := vwma(close, 20)
plot(test)

La funzione max_bars_back() non può essere usata per assegnare una dimensione precisa al buffer di una funzione. Quando devi farlo, o quando vuoi impostare il valore di default per tutte le variabili e le funzioni di uno script, aggiungi il parametro max_bars_back alla dichiarazione di study o strategy dello script. Considera che l'utilizzo di tale parametro aumenterà l'utilizzo di risorse dello script, quindi dovrebbe essere usato solo se necessario:

//@version=4
study("Requires max_bars_back", max_bars_back=20)
test = 0.0
if bar_index > 1000
test := vwma(close, 20)
plot(test)

Potresti anche risolvere l'errore estraendo l'espressione problematica dal periodo condizionale. In tal caso, il parametro max_bars_back non è richiesto:

//@version=4
study("Requires max_bars_back")
test = 0.0
vwma20 = vwma(close, 20)
if bar_index > 1000
test := vwma20
plot(test)


Puoi saperne di più su max_bars_back e l'errore relativo nel nostro Manuale utente.

Home Screener azioni Screener forex Screener cripto Calendario economico Come funziona Caratteristiche Grafico Costi Invita un amico Regolamento Centro di supporto Soluzioni per broker & siti web Widget Librerie grafiche Libreria grafica leggera Blog & Novità Twitter
Profilo Impostazioni profilo Account e fatturazione Amici invitati Coin I miei ticket di supporto Centro di supporto Idee pubblicate Follower Seguiti Messaggi Privati Chat Esci