A volte può essere utile tenere traccia dei movimenti dei prezzi o di un indicatore durante un o specifico intervallo di tempo. Un classico esempio è il monitoraggio del high
o low
all’interno di una sessione (come la sessione asiatica nel Forex) e quindi usare questi livelli per impostare un breakout. In questo articolo, descriviamo come calcolare il massimo e il minimo di una sessione custom con Tradingview. In particolare vediamo un esempio alternativo, calcolando il high
/low
di un EMA (media mobile esponenziale) invece di concentrarci esclusivamente sui dati OHLC
. Dato che in questo articolo non descriviamo una strategia, vediamo direttamente il codice.
Calcolare il massimo e il minimo di una sessione
//@version=3
study("Session EMA High Low", overlay=true)
my_session = input("1200-1300", type=session, title='Custom Session')
ma_len = input(7, minval=1, title='EMA Length')
// Calcolo l'EMA
ema1 = ema(close, ma_len)
// Determinare se siamo una sessione
// ----------------------------------
in_session = time(period, my_session)
is_new_session(res, sess) =>
t = time(res, sess)
na(t[1]) and not na(t) or t[1] < t
new_session = is_new_session("1440", my_session)
// Calcolo dei High/Low della EMA per la sessione
ema_high = na
ema_low = na
ema_high := new_session ? ema1 : in_session ? max(ema1, ema_high[1]) : ema_high[1]
ema_low := new_session ? ema1 : in_session ? min(ema1,ema_low[1]) : ema_low[1]
plot(ema1, linewidth=2, color=orange, title='EMA')
plot(ema_high, color=green, style=circles, title='EMA High')
plot(ema_low, color=red, style=circles, title='EMA Low')
Commento al codice
Per prima cosa, creiamo un paio di input per impostare il periodo della ema1
e la durata della sessione custom. Nel codice il parametro di default prevede una finestra tra le 12 e 13. Successivamente, tracciamo quando entriamo e siamo all’interno della sessione. Il wiki di Tradingview fornisce alcuni buoni esempi su queste modalità e il codice è tratto da questo wiki consultabile in questo link. Dobbiamo sapere quando inizia la sessione per poter impostare il valore iniziale. All’inizio della sessione gli high
e low
della ema1
sono uguali quindi impostiamo i valori di ema_high
e ema_low
pari a ema1
. Successivamente, verifichiamo se siamo ancora all’interno della sessione. In caso affermativo memorizziamo il valore maggiore tra high
e l’ultimo ema_high
il valore minore tra il low
e l’ultimo ema_low
. Infine, se non siamo all’interno della sessione continuiamo ad usare lo stesso valore della barra precedente. Impostiamo tutti questi valori su ema_high
e ema_low
tramite un operatore condizionale ternario.
Approfondiamo ora la funzione che abbiamo implementato per rilevare una nuova sessione, che può sembrare complessa:
is_new_session(res, sess) =>
t = time(res, sess)
na(t[1]) and not na(t) or t[1] < t
In questa funzione usiamo il metodo time()
per verificare se siamo all’interno di una sessione e quindi eseguire un semplice controllo. Se la barra precedente non era all’interno della sessione ma la nuova barra è in una sessione, allora abbiamo una nuova sessione! In effetti, l’intera funzione potrebbe essere riscritta per usare semplicemente la variabile in_session
.
new_session = in_session and not in_session[1]
Funziona allo stesso modo ed è molto più intuitivo. Tuttavia, la funzione del wiki è stata lasciata nel codice di esempio per poterla descrivere e spiegarla.
Il grafico
Una volta caricato il codice, otteniamo un grafico simile al seguente:
Analizzando il grafico vediamo il massimo e il minimo che si adattano al movimento dell’EMA all’interno della sessione. Dopo la fine della sessione, le linee rimangono fisse fino al giorno successivo. Ora è il momento di essere creativi. Possiamo iniziare a calcolare e tracciare alcuni valori a cui normalmente non pensiamo. Inoltre, lo stesso approccio potrebbe essere usata per tenere traccia dei segnali di ingresso o l’ultimo swing di massimo o qualsiasi altra cosa ci venga in mente!
Codice completo
In questo articolo abbiamo descritto come calcolare il massimo e il minimo di una sessione custom con Tradingview. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/TradingView