Tradingview-come-creare-cicli-For

Tradingview: Come creare un ciclo For

Sommario

SCRIVIMI SU TELEGRAM

Per informazioni, suggerimenti, collaborazioni...

Se è la prima volta che atterri su DataTrading, BENVENUTO!

Lascia che mi presenti. Sono Gianluca, ingegnere, trekker e appassionato di coding, finanza e trading. Leggi la mia storia.

Ho creato DataTrading per aiutare le altre persone ad utilizzare nuovi approcci e nuovi strumenti, ed applicarli correttamente al mondo del trading.

DataTrading vuole essere un punto di ritrovo per scambiare esperienze, opinioni ed idee.

TUTORIAL

In questo articolo descriamo come creare un ciclo For con Tradingview tramite l’istruzione for loop di pine-script, come usarlo e vediamo alcuni esempi. Se sei un neofita della programmazione o di pine-script, l’articolo fornisce un’introduzione a questi concetti.

Il ciclo For

Prima di iniziare a  descrivere delle modalità di utilizzo di cicli For, dobbiamo introdurre i concetti base dei cicli For. I cicli iterativi sono presenti in quasi tutti i moderni linguaggi di programmazione e permettono di eseguire attività ripetitive senza dover ripetere le stesse righe di codice. In altre parole, eseguono iteramente le stesse righe di codice più e più volte. Questo approccio fa risparmiare tempo, rende il codice più facile da leggere e, allo stesso tempo, riduce le possibilità di commettere errori o bug.

Nonostante la sintassi e la terminologia dei loop potrebbero inizialmente sembrare un po’ intimidatorie. Sono abbastanza semplici da capire una volta superato il gergo tecnico.

La sintassi

Ora che abbiamo un’idea di cosa dovrebbe fare un ciclo For, il prossimo passo è dare un’occhiata alla sintassi, Come dobbiamo effettivamente scrivere un ciclo for? Diamo un’occhiata all’esempio ufficiale del Wiki di Tradingview  e analizziamolo riga per riga.

				
					
var_declarationX = for counter = from_num to to_num [by step_num]
    var_decl0
    var_decl1
    …
    continue
    …
    break
    …
    var_declN
    return_expression

				
			

L’esempio, sebbene molto semplice, è scritto in modo piuttosto tecnico. Certo, è facile da capire se si ha un background nella programmazione, ma per un neofita può essere difficile da capire. Quindi, senza ulteriori indugi, descriviamo gli aspetti più significativi.

var_declarationX =

Questa è la prima parte della prima riga. È una semplice variabile come qualsiasi altra con cui abbiamo già lavorato nei precedenti articoli. La cosa fondamentale è che  il ciclo restituisce un valore dopo che il ciclo è stato completato. In pine-script, un ciclo può restituire un valore alla fine proprio come una funzione (come descritto nell’articolo su come creare funzioni con pine-script) e il valore è memorizzato nella variabile var_declarationX.

for counter = from_num to to_num

È qui che avviene la logica principale. for= e to sono le istruzioni che dobbiamo ricordare. Il resto possiamo modificarlo. Ad esempio,  for i = 0 to 10 è una dichiarazione valida: in pratica vogliamo effettuare 10 cicli, dal numero 0 al numero 10. La variabile  counter contiene semplicimente il numero di loop che è in esecuzione. Quindi, ad esempio, in for i = 0 to 10, la variabile i è = 0 nel primo ciclo, 1 nel secondo ciclo, 2 nel terzo ciclo e così via. Questo è importante perchè i ci consente di accedere attraverso il codice a dati diversi per ciascun ciclo .

from_num e to_num possono essere variabili che abbiamo dichiarato prima del ciclo o numeri costanti come mostrato nell’esempio  for i = 0 to 10. Quindi, se abbiamo una variabile chiamata x che ha un valore 10, possiamo scrivere lo stesso ciclo come for i = 0 to x.

Esempio:

				
					
//@version=3
study("For Loop tutorial - Example 1")
 
y = 0
for i = 0 to 10
    y := y + i
    
plot(y)
				
			

L’esecuzione del codice precedente restituisce una linea retta sul grafico con un valore di 55. In particolare il codice esegue un ciclo che aggiunge il valore i a  y ad ogni esecuzione del loop. Come descritto in precedenza, il valore di i cambia ad ogni ciclo:
0 + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

Sul grafico:

Tradingview: Come creare un ciclo For - Esempio 1

[by step_num]

Il parametro by step_num è utile quando desideriamo usare solo determinati valori di un intervallo. Ad esempio, se desideriamo ottenere il valore di chiusura solamente ogni 2 barre, possiamo usare uno step_num pari a due.

Aggiungiamo un numero di step all’esempio precedente e vediamo cosa succede.

				
					
//@version=3
study("For Loop tutorial - Example 2")
 
y = 0
for i = 0 to 10 by 2
    y := y + i
    
plot(y)
				
			

L’esecuzione del nuovo esempio  si traduce graficamente in una linea retta con valore 30 perché il risultato del ciclo è il seguente:

0 + 2 + 4 + 6 + 8 + 10 = 30

Possiamo vedere che il ciclo sta ora assegnando i valori in step di 2.

Rientri e Tabulazioni

Dopo avere descritto la prima riga dell’istruzione del ciclo for, vediamo che la seconda riga è rientrata rispetto alla precedente. Il rientro è il numero di spazi bianchi tra l’inizio della riga e il testo. Notiamo che le righe che seguono la prima riga sono tutte rientrate di 4 spazi. Questo è previsto da molti linguaggi di programmazione. Il rientro di 4 spazi informa l’interprete di pine-script che la riga fa parte del ciclo e non fa parte dello script principale. Pertanto, qualsiasi logica che fa parte del ciclo DEVE essere rientrata di 4 spazi.

È importante sottolineare nuovamente l’importanza dei 4 spazi (o multipli di 4 es. 8, 12,16) perché qualsiasi altro numero restiuisce un errore dall’interprete. Questo perché altri livelli di indentazione (ad es. 2 spazi bianchi) sono riservati per il ritorno a capo/continuazione della  stessa istruzione su più righe, come descritto nell’articolo Tradingview: Line Wrapping.

L’esecuzione del codice precedente con 2 spazi bianchi provoca il seguente errore:

'Add to Chart operation failed, reason: line 5: mismatched input 'y' expecting 'end of line without line continuation'

Purtroppo questo non è un messaggio di errore  molto descrittivo ed intuitivo!

var_decl0 e var_decl1

Questo fa parte dell’esempio presente nella documentazione ufficiale e mostra come è possibile dichiarare variabili all’interno del ciclo. Dobbiamo sottolineare che queste variabili devono essere restituite se si desidera utilizzarle fuori del ciclo.

Ad esempio, eseguendo il seguente codice:

				
					//@version=3
study("For Loop tutorial - Example 3")
 
y = 0
for i = 0 to 10 by 2
    z = 10
    y := y + i
    
plot(y)
plot(z, color=green)
				
			

Otteniamo il seguente errore:

Add to Chart operation failed, reason: line 10: Undeclared identifier z

Quindi è necessario restituire la variabile z alla fine del ciclo, in modo da poter accedervi come segue

				
					//@version=3
study("For Loop tutorial - Example 3")

y = 0
z = for i = 0 to 10 by 2
    z = 10
    y := y + i
    z

plot(y)
plot(z, color=green)
				
			

Continue

La parola chiave continue può essere  usata per saltare parti del codice all’interno del ciclo for se sono soddisfatte determinate condizioni. Quando la condizione è soddisfatta, tutto il codice dopo la parola chiave continue NON è eseguito. Nell’esempio seguente, abbiamo aggiunto un controllo per vedere se z è uguale a 10. Questo significa che il resto del ciclo è saltato ogni volta.

				
					
//@version=3
study("For Loop tutorial - Example 4")
 
y = 0
z = for i = 0 to 10 by 2
    z = 10
    if z == 10
        continue
    y := y + i
    z
    
plot(y)
plot(z, color=green)


				
			

Tracciandolo sul grafico vediamo che y ha sempre il valore di 0z ha il valore na perché z non viene mai restituito.

Un esempio più pratico dei casi quando continue può essere utile, è sommare il volume solo nei giorni di  ribasso. Se c’è un giorno positivo, la somma è saltata (continue).

				
					
//@version=3
study("For Loop tutorial - Example 5")
 
total_volume = volume - volume
 
for i = 0 to 10
    if close[i] >= open[i]
        continue
    total_volume := total_volume + volume[i]
    
plot(total_volume, style=columns, color=red)
				
			

Otteniamo un grafico simile a questo:

Tradingview: Come creare un ciclo For - Esempio 5

break

La parola chiave break è un’altra parola chiave esclusiva per i loop di pine-script. Interrompe il ciclo quando viene soddisfatta una condizione. Quindi, invece di saltare le righe del ciclo, usando break usciamo dal ciclo.

Ad esempio, possiamo scorrere le ultime 10 barre di dati ma fermarci non appena troviamo un determinato valore. Quindi, per continuare con l’esempio precedente, possiamo contare il numero di giorni consecutivi in ​​rialzo e poi fare il break del ciclo non appena troviamo un giorno in ribasso.

				
					

//@version=3
study("For Loop tutorial - Example 6")
 
y = 0
for i = 0 to 10
    if close[i] <= open[i]
        break    
    y := y + 1
    
plot(y, style=line, color=green, linewidth=3)
				
			

Otteniamo un grafico simile a questo:

Tradingview: Come creare un ciclo For - Esempio 6

Altri punti da sottolineare

Prima di concludere questa parte e passare ad un esempio di codice completo, ci sono un altro paio di punti da sottolineare che potrebbero far sorgere confusione.

Il primo, che potrebbe non essere ovvio, è che 0 è un loop. Quindi, se vogliamo fare venti loop, dobbiamo prevedere l’intervallo da 0 to 19 o da 1 to 20 e no da 0 to 20.

Il secondo riguarda le variabili. Negli esempi precedenti, quando aggiungiamo un valore a y, y è già stato dichiarato. Perciò,. quando dobbiamo assegnare un nuovo valore, dobbiamo usare := invece di =.

Esempio di codice completo

Ora che comprendiamo le diverse parti di un Ciclo For, passiamo ad un esempio pratico. Nel codice seguente usiamo un ciclo for per effettuare alcune analisi tecniche di base. Iteriamo (loop over) i dati di apertura e chiusura per calcolare la percentuale di quante barre sono state chiuse in rialzo o in ribasso in un determinato periodo di ricerca. Usiamo le percentuali per ottenere un quadro continuo del sentimento.

				
					
//@version=3
study("For Loop Example - Up / Down Bars Counter", precision=2)
 
lbp = input(defval=20, title="Lookback Period", minval=1)
 
// Dichiarazione delle variabili upcount, downcount e no change
up = 0
dn = 0
nc = 0
 
// Ciclo sui dati storici
for i = 0 to lbp -1
    if open[i] < close[i]
        up := up + 1
    if open[i] > close[i]
        dn := dn + 1
    if open[i] == close[i]
        nc := nc + 1
 
// Conversioni dei conteggi sulle percentuali
up_perc = (up / lbp) * 100
dn_perc = (dn / lbp) * 100
nc_perc = (nc / lbp) * 100
 
// Grafici
plot(up_perc, title="% Up Bars", color=green, linewidth=3)
plot(dn_perc, title="% Down Bars", color=red, linewidth=3)
plot(nc_perc, title="% No Change Bars", color=black, linewidth=3)

// Linee orizontali di Fibonacci
h1 = hline(0, linestyle=solid, linewidth=2)
h2 = hline(23.6, linestyle=dashed, linewidth=2)
h3 = hline(38.2, linestyle=dashed, linewidth=2)
h4 = hline(50, linestyle=dashed, linewidth=2)
h5 = hline(61.8, linestyle=dashed, linewidth=2)
h6 = hline(100, linestyle=solid, linewidth=2)

// Riempimenti per pulire la visualizzazione
fill(h1,h2, color=red, transp=90)
fill(h5,h6, color=green, transp=90)
				
			

Otteniamo un grafico simile a questo:

Tradingview: Come creare un ciclo For - Codice Completo

Idee per estendere il codice:

Dopo aver acquisito dimestichezza con questo esempio di codice, è possibile estenderlo per  effettuare ulteriori  analisi sui dati. Ad esempio,  potremmo analizzare

  • Di quanto è cambiato il prezzo in totale durante il periodo di ricerca. Abbiamo avuto periodi in cui oltre il 50% delle candele erano verdi ma il prezzo è effettivamente sceso?
  • Quale percentuale del volume totale è stata assegnata ai giorni di rialzo rispetto ai giorni di ribasso? Ci sono stati casi in cui abbiamo avuto più volume nei giorni di ribasso ma il prezzo è salito durante il periodo di  richiesta?

Queste sono solo due idee per stimolare l’immaginazione. L’estensione del codice con una domanda chiara in mente aiuta davvero a cementare le idee e i concetti di questo articolo.

Codice completo

Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/TradingView

Gli altri articoli di questa serie

Scroll to Top
Scroll to Top