line wrapping con Tradingview

Line Wrapping con Tradingview

In questo articolo descriviamo come usare line wrapping con Tradingview in pine script per il trading algoritmico. Nel precedente articolo abbiamo descritto come creare le funzioni con pine script, dove abbiamo notato che una riga può contenere una lunga sequenza di istruzioni o funzioni, e quindi può essere difficile da leggere. La documentazione ufficiale non è male, ma se non la leggiamo attentamente possiamo avere problemi con il compilatore di pine script.

Line wrapping con Tradingview

Il line wrapping con Tradingview ci consente di suddividere una riga di codice molto lunga e distribuirla su più righe. Questo ci aiuta a rendere il codice più leggibile e ad essere meglio organizzato. In altre parole il line-wrapping avviene quando il codice che potrebbe occupare regolarmente una singola riga è diviso in più righe. Non è assolutamente necessario, ma vale la pena capirlo in modo da non essere colti alla sprovvista quando si esamina il codice di qualcun altro.

Sul wiki di Tradingview ci sono tre esempi di casi dove può essere usato il line-wrapping per alcune righe di codice. Questi sono:

  • Lunghe istruzioni  su una singola riga: i candidati per il wrapping includono calcoli lunghi e complessi calcoli e gli operatori condizionali ternari.
  • Chiamate alle funzione: alcune funzioni accettano molti argomenti e parole chiave, che trasforma la chiamata alla funzione in una riga molto lunga. Pine script ci permette di suddividere la chiamata su più righe.
  • Dichiarare le funzioni:  il line wrapping di una funzione auto-creata co permette di segmentare il codice in blocchi correlati. Inoltre possiamo  racchiudere anche lunghe istruzioni a riga singola all’interno di una funzione! Abbiamo descritto brevemente il ritorno a capo della dichiarazione di  una funzione nell’articolo per la creazione delle funzioni.

Di seguito esaminiamo i 3 esempi descritti nel wiki di tradingview in modo un po’ più dettagliato. In particolare descriviamo i casi che funzionano, alcuni  casi che non funzionano e alcuni validi stili di wrapping alternativi.

Lunghe dichiarazioni  di funzioni

Consideriamo la spiegazione  riportata dal wiki di Tradingview:

In Pine script qualsiasi istruzione troppo lunga può essere  divisa in  più righe. Dal punto di vista sintattico,  un’istruzione deve iniziare all’inizio della riga. Se si va a capo alla riga successiva, la continuazione dell’istruzione deve iniziare con uno o più spazi (diversi da multipli di 4). 

Per i principianti, questa spiegazione potrebbe essere un po’ confusa, quindi cerchiamo di analizzarla in dettaglio:

  • Sintatticamente, un’istruzione deve iniziare all’inizio della riga: in altre parole, quando scriviamo una riga di codice dobbiamo iniziare a scriverla all’inizio della riga. (Senza rientri o spazi bianchi)
  • Se si va a capo alla riga successiva, la continuazione dell’istruzione deve iniziare con uno o più spazi (diversi da multipli di 4): questo significa che per suddividere una riga, la successiva riga che scriviamo (che è una continuazione dell’istruzione) deve iniziare con uno o più spazi vuoti o spazi bianchi. Questo è il modo in cui il compilatore del codice riconosce che la nuova riga fa parte della stessa istruzione della riga precedente e non si tratta di una nuova istruzione. La parte importante da non  dimenticare è “diverso da multiplo di 4“, cioè non possiamo iniziare la nuova riga con 4 spazi (o multipli di 4) perchè questi livelli di rientri è riservato alle funzioni e quindi causa errori in fase di compilazione.

Nell’editori di pine script si può facilmente vedere quando stiamo usando un multiplo di 4 spazi nell’editor di pine script. Si traccia una piccola linea  verticale come contrassegno. A proposito, se premiamo il tasto “tab”  della tastiera, questo è considerato come 4 spazi!

Tradingview-4-Space-Indentation-Levels

Esempi

Per prima cosa, approfondiamo l’esempio ufficiale di un semplice indicatore per il line wrapping con Tradingview.

				
					//@version=3
study("My Script")
 
// Long line
a = open +
      high +
          low +
             close
 
//Plot
plot(a)
				
			

Questo non è l’unico modo per effettuare un line-wrapping. Di seguito sono mostrati alcuni modi alternativi per scrivere la stessa riga con diversi livelli di rientri

Personalmente, l’esempio più strano che possiamo avere è una riga che termina con un operatore  =, probabilmente perchè un background Python. Il rientro è la chiave per la continuazione della riga.

Infine, è utile mostrare i casi di errori o codici che non funzionano. Nell’esempio seguente di line wrapping con Tradingview vediamo che le righe open e low iniziano su un multiplo di 4 spazi vuoti, e quindi il compilatore pine script causa il seguente errore.

Add to Chart operation failed, reason: line 5: syntax error at input 'end of line without line continuation'

Tradingview-wrapping-long-lines-Invalid

Chiamate alle funzioni

Estendiamo l’esempio precedente ed eseguiamo un ritorno a capo all’interno della chiamata alla funzione plot. In questa sezione, descriviamo un solo esempio poiché le alternative sono le stesse viste nell’esempio precedente.

				
					//@version=3
study("My Script")
 
// Long line
a = open +
  high +
  low +
  close
 
//Plot
plot(a,
  title = 'My Line Wrapping',
  color=red,
  linewidth=2,
  style=line)
				
			

Personalmente preferisco il line wrapping allo stesso livello di rientro per tutte le righe, ma sono preferenze del tutto personali. Si può usare quello che si ritiene più facile da leggere.

Punti di attenzione

Quando eseguiamo il line wrapping con Tradingview di una chiamata  alla funzione, dobbiamo fare particolare attenzione a ricordare di includere la virgola, tra gli argomenti. È facile dimenticarsene quando si esegue il wrapping delle righe e si traduce nel seguente errore in fase di compilazione:

Add to Chart operation failed, reason: line 11: mismatched input 'color' expecting ')'

Non è il più utile degli errori e potrebbe essere difficile da capire!

Dichiarazione delle funzioni

L’ultimo esempio del line wrapping con Tradingview riguarda la dichiarazione/creazione di funzioni. Ancora una volta, la metodologia è la stessa, ma possiamo usare un numero di diversi livelli di rientri per suddividere una funzione di grandi dimensioni in blocchi più piccoli. La documentazione ufficiale descriver proprio questo caso:

				
					
updown(s) =>  
  isEqual = s == s[1]
  isGrowing = s > s[1]    
  ud = isEqual ?
      0 :
      isGrowing ?
          (nz(ud[1]) <= 0 ?
              1 :
             nz(ud[1])+1) :
          (nz(ud[1]) >= 0 ?
             -1 :
             nz(ud[1])-1)
				
			

Documentazione completa: https://www.tradingview.com/wiki/Lines_Wrapping

Da notare che la funzione usata in questo esempio è abbastanza complessa e quindi di difficile comprensione per i principianti. Inoltre non ci sono motivazioni per cui l’autore ha deciso di utilizzare i livelli di  rientri selezionati. L’esempio seguente è tratto dall’articolo Tradingview: Creare le funzioni.

				
					
get_src(str) =>
    x = str == 'Open' ?
      open:
     str == 'High' ? 
      high: 
     str == 'Low' ? 
      low: 
     str == 'Close' ? 
      close: 
     str == 'HL2' ? 
      hl2: 
     close
    x
				
			

La funzione è usata per restituire un’origine dati (Open, High, Low, Close ecc.) a seconda della stringa (str) specificata nell’argomento della funzione. E’ usata in combinazione con la funzione integrata  input() per consentire a un utente di modificare l’origine dei dati di un indicatore. Spero che questo esempio sia un po’ più facile da capire. Ci sono un paio di cose a cui prestare attenzione:

  • La prima riga x = str == 'Open' ? non è a capo. È la prima riga della funzione. Pertanto, DEVE essere rientrata di 4 spazi bianchi (o una tabulazione).
  • Il finale x è il valore restituito dalla funzione e non fa parte della riga a capo. È rientrato a 4 spazi bianchi.
  • I livelli di rientro selezionati per l’operatore condizionale ternario passano da un livello all’altro. Ad esempio è possibile avere un livello per eseguire il test (cioè la stringa è uguale a “high”?). Quindi un secondo livello di rientro per il risultato se il test restituisce true. E’ abbastanza facile da leggere.

Problemi con i commenti

Il wiki di Tradingview evidenzia un problema con i commenti su una riga a capo. In sostanza, il line wrapping con Tradingview non prevede la possibilità di inserire commenti nelle righe di un line-wrapping (per ora). Se inseriamo un commento alla fine di una riga a capo, riceviamo un errore. Si spera che questo sia risolto  nelle versioni future. Tuttavia, nel breve termine,  dobbiamo evitare i commenti sulle righe a capo.

Codice completo

In questo articolo abbiamo descritto come usare il line wrapping con Tradingview in pine script per il trading algoritmico. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/TradingView

Torna in alto
Scroll to Top