Creare le funzioni con Tradingview

Creare le funzioni con Tradingview

In questo articolo descriviamo come creare le funzioni con Tradingview e vediamo brevemente quando è opportuno usarle per il trading algoritmico. L’articolo è rivolto ai principianti quindi approfondiamo l’anatomia di una funzione. Se hai un background di programmazione, questo articolo potrebbe non essere adatto a te! Sentiti libero di saltarlo.

Cos’è una funzione e quando dobbiamo usarla

Una funzione è una sezione di codice di pinescript raggruppato insieme che può essere facilmente riutilizzata in altre parti del codice senza dover riscrivere la stessa parte di nuovo. Questo perché quando riutilizziamo il codice, dobbiamo solo richiamare la funzione. Immaginiamo di avere 20 righe di codice necessarie per eseguire un calcolo complesso. Se vogliamo ripetere il calcolo in un secondo momento, invece di copiare e incollare 20 righe di codice, possiamo farlo con 1 riga trasformando il codice in una funzione e semplicemente richiamandolo.

Finora abbiamo utilizzato molte funzioni in tutti i tutorial. Forse non te ne sei reso conto. Pinescript ha molte funzioni integrate che gli sviluppatori di Tradingview hanno creato per semplificarci la vita. Diamo un’occhiata ad alcuni esempi:

  • plot(): Terminiamo tutti i gli script degli indicatori richiamando la  funzione plot(). Questa funzione prende i valori finali e li posiziona sul grafico.
  • rsi(): Una comoda funzione usata nell’articolo del primo script. Avere la possibilità di richiamare questa funzione piuttosto che dover cercare  la formula dell’rsi su Wikipedia  e quindi implementare noi stessi il codice ha reso il primo script un gioco da ragazzi.
  • input(): Se desideriamo aggiungere parametri modificabili in uno script, dobbiamo usare la funzione input() integrata.

La terminologia di una funzione

Se sei un principiante della programmazione, ci sono alcuni concetti e termini che devono essere compresi per semplificarti un po’ la vita durante la lettura della documentazione.

Tradingview-Function-Call
  • Argomenti : Un argomento è un input di una funzione. Possiamo utilizzare gli argomenti per fornire alla funzione qualcosa da elaborare o per apportare modifiche al calcolo senza dover creare un’altra funzione. In altre parole, possiamo usare lo stesso codice per scopi leggermente diversi. Immaginiamo di avere un macchinario in grado di produrre blocchi quadrati da un pezzo di legno, può essere più utile ed economico riutilizzare lo stesso macchinario anche per produrre blocchi rettangolari? Probabilmente è sufficiente apportare piccole e semplice modifiche al macchinario per realizzare blocchi rettangolari. Ad esempio aggiungere una bottone per scegliere se produrre un blocco quadrato o rettangolare. Gli argomenti sono i nostri bottoni che rendono le nostre funzioni più flessibili e riutilizzabili.
  • Argomento con parola chiave: un argomento  con parola chiave è praticamente uguale a un argomento. La differenza è la possibilità di specificare alla funzione a cosa serve l’argomento. Tornando all’analogia precedente, immaginiamo che il macchinario abbia 4 leve e abbiamo le istruzioni cartacee su come impostare queste leve. Ad esempio  troviamo la seguente istruzione “regolare le leve a 5,7,2 e 10“. Possiamo decidere di regolare le leve da sinistra a destra nello stesso ordine riportato nelle istruzioni. Questo corrisponde alla modalità di assegnazione degli argomenti a una funzione. Sono forniti in ordine da sinistra a destra. Le stesse istruzioni per gli argomenti con le parole chiave si possono leggere come “regola le leve in modo che la  leva marrone=10, la leva rossa=7, la leva rosa=5 e la leva nera=2“. In questo modo si riduce l’ambiguità e non è necessario seguire un ordine prestabilito. Questi sono  gli argomenti con le parole chiave.
  • Output: quando chiamiamo una funzione, di solito vogliamo che restituisca qualcosa, ad esempio il risultato di un calcolo o qualcos’altro. Quando parliamo di output, significa che la funzione restituisce un numero, una stringa (testo), una lista o qualsiasi altro tipo di dato gestito dal linguaggio di programmazione e memorizzato in una variabile. Ad esempio con x = sma(close,7) si restituisce il valore della media mobile calcolato da funzione SMA e memorizzato all’interno della variabile x.

Creare le funzioni con Tradingview

Per creare le funzioni con Tradingview dobbiamo fare quanto segue

  • Dargli un nome: può essere qualsiasi cosa desideriamo, ma si consiglia di utilizzare qualcosa che descriva cosa fa la funzione.
  • Dichiarare gli argomenti: si effettua nello stesso modo in cui inviamo  gli argomenti e gli argomenti con parole chiave quando richiamiamo una funzione. Scriviamo semplicemente i nomi degli argomenti tra parentesi. Quindi, nel codice seguente, decidiamo come gestire i dati forniti a quella variabile.
    • Nota: al momento della scrittura, la dichiarazione degli argomenti con parole chiave in una funzione non è supportata in pinescript. (per quanto posso dire)
  • Aggiungere la sintassi della funzione di pinescript => alla fine della riga: Questo fa sapere all’interprete che stiamo dichiarando una funzione.
  • Allineare il codice della funzione:  tutto il codice per la funzione deve ora essere allineato con un rientro in modo che l’interprete sappia che fa parte della funzione e possa individuare dove finisce la funzione. Per rientrare puoi premere il tasto Tab sulla tastiera o premere la barra spaziatrice 4 volte.
  • Restituire qualcosa: questo è l’output della funzione. Cioè il risultato del calcolo (supponendo che stiamo facendo un calcolo). Una funzione pinescript può restituire una variabile o una lista di variabili scrivendole nell’ultima riga.

Esempio pratico

Niente cementa la teoria come un esempio pratico. In questo esempio, creiamo una semplice funzione che restituisce le seguenti variabili incorporate: Openhigh, lowclose in base a una stringa che le viene passata. Questo è utile quando si crea un indicatore o una strategia e desideriamo poter modificare i dati sui prezzi utilizzati dall’indicatore/strategia. È particolarmente utile se abbiamo più input nello script perchè vogliamo usare più volte la stessa funzione.

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

Commento

Nel codice precedente, stiamo semplicemente passando una stringa alla funzione e utilizzando un operatore condizionale ternario per assegnare un valore alla variabile x a seconda che l’argomento str corrisponda alle stringhe nella funzione. Alla fine, restituiamo la variabile X.

Da notare che questo esempio divide la riga in più linee usando la continuazione della linea, a causa della lunga istruzione necessaria. Possiamo anche scrivere l’istruzione come una lunga riga. Per ulteriori informazioni si può consultare la seguente documentazione:

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

Il ritorno a capo può essere un po’ complicato da gestire correttamente con le funzioni e può essere un buon candidato per un futuro approfondimento su questo sito.

Creare un indicatore HMA

Come esempio per creare funzioni personalizzate con Tradingview, il seguente codice mostra come combinare la funzione sopra con gli input e usarli per creare un doppio indicatore HMA (Hull Moving Average).

				
					
//@version=3
study("Dual HULL Indicator", overlay=true)
 
h1=input(title="Fast MA Period",type=integer,defval=9)
h1_src= input(title='Fast MA Source', type=string, defval='Close', options=['Open', 'High','Low','Close','HL2'])
h2=input(title="Slow MA Period",type=integer,defval=18)
h2_src=input(title='Slow MA Source', type=string, defval='Close', options=['Open', 'High','Low','Close','HL2'])
 
get_src(str) =>
    x = str == 'Open' ?
      open:
     str == 'High' ? 
      high: 
     str == 'Low' ? 
      low: 
     str == 'Close' ? 
      close: 
     str == 'HL2' ? 
      hl2: 
     close
    x
 
hull_ind(_src, _length)=>
    //HMA = WMA(2*WMA(n/2) − WMA(n)),sqrt(n))
    _return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
 
x1= hull_ind(get_src(h1_src), h1)
y1 = hull_ind(get_src(h2_src), h2)
 
 
ma=plot(x1, title='Fast MA')
ma2=plot(y1, title='Slow MA')
				
			

L’esecuzione del codice sopra permette di aggiungere due HMA a un grafico e selezionare la sorgente di input per il calcolo. Da notare che il calcolo HMA è stato trasformato in una funzione.

Nota:  Tradingview a volte può generare un errore quando il codice viene copiato e incollato. Se si presenta un errore simile a  expecting 'end of line without line continuation' dobbiamo riformattare tutte le righe con il corretta rientro TAB

Codice completo

In questo articolo abbiamo descritto come creare le funzioni con Tradingview 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

Scroll to Top