In questo articolo descriviamo i lookahead dei dati realtime e dei dati storici in Tradingview. Per quanto la documentazione di pine-script sia ben fatta, ci sono ancora parti non spiegate sufficientemente bene, oppure è rivolta ad un target di pubblico con competenze molto avanzate. Ho quindi deciso di scrivere questo articolo dopo aver speso un po’ di tempo a studiare le differenze tra i dati “in tempo reale” e i dati storici e come l’utilizzo di un tipo o dell’altro possa modificare i calcoli prodotti da un indicatore. Questo è particolarmente vero quando si inizia ad utilizzare la keyword lookahead. Ne parleremo più avanti …
Nota: se hai appena iniziato ad utilizzare pine-script, ho scritto un’introduzione nell’articolo “Trading View: il primo Script”
Dati Storici vs Dati Real-time
I dati “real-time” di Tradingview non devono essere confusi con i dati in tempo reale forniti dalle borse e dagli exchange. In pine-script i dati in tempo reale sono tutti i dati acquisiti durante la creazione di una candela (anche se i dati stessi sono in ritardo). Al contrario, i dati storici si riferiscono a qualsiasi candela chiusa prima di aggiungere qualsiasi indicatore sul grafico. Sembra logico vero? E’ necessario però fare attenzione a un paio di cose:- I calcoli effettuati su dati in tempo reale quasi sempre hanno risultati diversi rispetto a quelli effettuati sui dati storici. Questo può sembrare ovvio, ma negli esempi seguenti si evidenzia come questo può provocare effetti indesiderati.
- I dati in tempo reale non diventano dati storici una volta completata la candela. In altre parole, tali dati non sono elaborati nello stesso modo in cui sono elaborati i dati storici quando si aggiunge l’indicatore per la prima volta. Anche in questo caso, i seguenti esempi evidenziano queste criticità.
L’indicatore
L’indicatore che si vuol utilizzare è un semplice indicatore che sovrappone i valori giornalieri di High e Low su un grafico infragiornaliero. Questo potrebbe essere utile quando si cercano breakout sopra / sotto il massimo / minimo del giorno precedente.Esempio 1 – Livelli Base
Il seguente codice è l’esempio più semplice di questo articolo. L’indicatore raccoglie semplicemente valori high e low per lo stesso strumento usando un timeframe giornaliero. Quindi traccia questi valori nel timeframe corrente.
//@version=3
study("Barmerge Tests", overlay=true)
daily_high = security(tickerid, "D", high)
daily_low = security(tickerid, "D", low)
plot(daily_high, style=cross, color=green)
plot(daily_low, style=cross, color=red)
Come al solito, puoi copiare ed incollare il codice precedente direttamente nell’editor di pine-script di Tradingview ed aggiungire l’indicatore al tuo grafico.
Risultati dell’esempio 1
Nell’immagine precedente si può notare come i dati storici sono calcolati e tracciati come previsto. Si ha una bella linea retta dall’inizio alla fine di ogni giorno. Tuttavia, guarda cosa succede quando arrivano i dati in tempo reale. Le barre si spostano verso l’alto nel bel mezzo della giornata!
Dopo aver esaminato più da vicino le linee generate dopo l’aggiunta dell’indicatore (dati in tempo reale), si può notare come le linee hanno iniziato a far riferimento ai valori High / Low del giorno corrente.
Lookahead dei dati realtime e dei dati storici
Il lookahead dei dati realtime e dei dati storici permette di includere i dati futuri nei calcoli di un indicatore. Se si dichiara “lookahead_on”, l’indicatore guarderà avanti per trovare alti e bassi per il resto della giornata. Li userà quindi per tracciare ogni barra infragiornaliera quel giorno, indipendentemente dal fatto che siamo prima o dopo il massimo o il minimo di quel giorno. L’esempio seguente mostra questo in modo più dettagliato.
Example 2 – lookahead attivo
Nell’esempio seguente si utilizza attivamente la funzionalità di lookahead. Se non si fornisce un argomento per la keyword “lookahead”, il valore di default è OFF (barmerge.lookahead_off).
//@version=3
study("Barmerge Tests", overlay=true)
daily_high = security(tickerid, "D", high, lookahead=barmerge.lookahead_on)
daily_low = security(tickerid, "D", low, lookahead=barmerge.lookahead_on)
plot(daily_high, style=cross, color=green)
plot(daily_low, style=cross, color=red)
Risultati dell’esempio 2
Nella figura precedente si mostra l’indicatore appena stato aggiunto al grafico. Per i dati storici, il massimo e il minimo della giornata sono tracciati prima che questi avvengano effettivamente durante la giornata!
Non utilizzare mai questo tipo di indicatore per il backtest. Ad esempio, è possibile overfittare i risultati aprendo una posizione short all’inizio della giornata e chiudendola prima della fine della stessa giornata. Si avrebbero ottime prestazioni ma non sarebbero applicabili nel mondo reale.
Per i dati in tempo reale, il calcolo restituisce valori diversi all’interno della stessa giornata, quando il prezzo si sposta oltre il massimo o il minimo corrente. Questo è ovvio perché non possiamo conoscere in anticipo il valore delle candele che si devono ancora formare e che potrebbero avere high più alti e low più bassi.
Di seguito è riportato il grafico dell’indicatore che utilizza i dati in tempo reale dove il prezzo si sposta oltre i dati storici High e Low già noti.
Esempio 3 – Lookahead on e l’index.
In questo caso si può vedere che le linee High e Low rappresentano i valori relativi ai giorni precedenti. Inoltre, i dati in tempo reale forniscono lo stesso valore.
//@version=3
study("Barmerge Tests", overlay=true)
daily_high = security(tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
daily_low = security(tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
plot(daily_high, style=cross, color=green)
plot(daily_low, style=cross, color=red)
Risultati dell’esempio 3
Codice completo
In questo articolo abbiamo descritto i lookahead dei dati realtime e dei dati storici in Tradingview. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/TradingView