giugno 25, 2019

Ecco Pine Script v4!

Ti presentiamo la nuova versione (v4) del nostro linguaggio di programmazione, Pine Script. Comprende una serie di miglioramenti su tanti aspetti e la correzione di alcuni bug. Tuttavia, l’aggiornamento più importante e atteso è il supporto agli strumenti di disegno.

In questo articolo faremo una panoramica di ciò che è cambiato, ma sappi che è presente la documentazione completa e il manuale di riferimento nel caso in cui tu volessi approfondire i dettagli (puoi anche recarti direttamente alla sezione degli strumenti di disegno).

Etichette

La funzione label.new ti permette di applicare etichette al grafico, anche contenenti del testo variabile. Ecco un esempio di uno script che disegna un’etichetta contenente il prezzo di chiusura della candela:

//@version=4
study("Last Bar Price", overlay=true)

l = label.new(bar_index, na, 'last price is '+tostring(close), 
  color=close >= open ? color.green : color.red, 
  textcolor=color.white,
  style=label.style_labeldown, yloc=yloc.abovebar)

label.delete(l[1])


Puoi modificare e/o rimuovere l’etichetta dopo averla create con la famiglia di funzioni label.*. Ecco un esempio più complesso di uno script che utilizza la funzione di creazione etichette: Pivot Points High/Low.

Linee

La funzione line.new ti permette di tracciare delle linee sul grafico. Ecco un esempio di uno script che disegna una linea tra il massimo della barra corrente e il minimo della decima barra storica (la numero 11 a partire da destra verso sinistra – nel grafico giornaliero, è la barra di 11 giorni fa):  

//@version=4
study("Line", overlay=true)
l = line.new(bar_index, high, bar_index[10], low[10], width = 4)
line.delete(l[1])

Le linee possono essere modificate e/o rimosse usando le apposite funzioni della famiglia line.*. Ecco un esempio di uno script più complesso realizzato tracciando delle line sul grafico: Zig Zag.

N.B.: Attualmente su di un grafico è possibile mostrare 50-55 disegni per singola tipologia e per singolo script (50-55 etichette, ad esempio). Si tratta di una limitazione voluta allo scopo di non sovraccaricare i server.

Gli strumenti di disegno menzionati migliorano moltissimo le capacità di Pine Script, permettendoti di integrare delle logiche complesse all’interno degli script. Ecco alcuni esempi nella nostra documentazione.

Serie di stringhe

Tra i dati che supportiamo, ora ci sono le serie di stringhe (variabili di testo). Ecco un esempio di come si possono usare le stringhe in associazione con le etichette:

//@version=4
study("Series string", overlay = true)
draw_label(title) =>
    label.new(bar_index, high, text=title)
t = close >= open ? "green" : "red"
draw_label(t)

 

Keyword var

Una variabile dichiarata nel metodo classico viene re-inizializzata ad ogni calcolo dello script. Questo richiedeva che il codice propagasse di volta in volta il valore precedente della variabile in modo esplicito. La parola chiave var dichiara una variabile e la inizializza solo una volta, permettendo al valore della stessa variabile di essere automaticamente salvato dal momento dell’inizializzazione. Ad esempio, qui c’è uno script di esempio che conta il numero di barre verdi sul grafico:

//@version=4
study("My Script")
var s = 0.0
if close >= open
    s := s + 1
plot(s)

Ogni volta che la condizione close >= open viene soddisfatta, il valore della variabile s sarà incrementato di uno. Il valore di inizializzazione può essere una qualsiasi espressione aritmetica.

La sintassi per dichiarare le variabili con la parola chiave var evita l’uso del seguente codice: s := nz(s[1], s). Definire una variabile con il termine var è molto utile quando si lavora con gli strumenti di disegno.

Funzioni, variabili e costanti con nuovi nomi

Su Pine Script v4 abbiamo rinominato le seguenti costanti, funzioni e variabili:

  1. Le costanti di colore (es. red) ora rientrano nella nomenclatura color.* (es. color.red).
  2. La funzione color è stata rinominata in color.new.
  3. Le costanti per il tipo di input (es. integer) ora rientrano nella nomenclatura input.* (es. input.integer).
  4. Le costanti per lo stile di raffigurazione (es. stile histogram) ora appartengono alla famiglia plot.style_* (es. plot.style_histogram).
  5. Le costanti per lo stile della funzione hline (es. stile dotted) ora rientrano nella famiglia hline.style_* (es. hline.style_dotted).
  6. Le costanti per i giorni della settimana (es. sunday) ora rientrano nella nomenclatura dayofweek.* (es.  dayofweek.sunday).
  7. Le variabili per il timeframe del grafico (es. periodisintraday) fanno ora parte della famiglia timeframe.* (es. timeframe.period, timeframe.isintraday).
  8. La variabile interval diventa multiplier.
  9. Le variabili tickertickerid sono state rinominate rispettivamente in syminfo.ticker e syminfo.tickerid.
  10. La variabile n che contiene il valore indice della barra è stata rinominata in bar_index.

Abbiamo effettuato tali cambiamenti per rendere il codice più semplice da scrivere e più intuitivo da leggere. I nuovi nomi sono raggruppati, a seconda del loro scopo, sotto prefissi comuni. Ad esempio, vedrai una lista di tutti i colori disponibili se digiti ‘color’ nell’editor e premi Ctrl + barra spaziatrice.

Dichiarazione esplicita del tipo di variabile

Su Pine Script v4 non è più possibile creare variabili senza dichiarare prima la loro classe di appartenenza (vedi valore na). Questo è stato fatto per evitare tutta una serie di complicanze che possono emergere con il cambio di classe dopo l’inizializzazione. D’ora in poi, devi dichiare esplicitamente il tipo di variabile utilizzando le parole chiave o le apposite funzioni (ad esempio, float) quando inizializzi una variabile con valore na:

//@version=4
study("NA", overlay=true)
float a = na
a := if close >= open
    high
else
    low
plot(a)

Prova subito la nuova versione di Pine Script! Alcuni utenti hanno già avuto modo di testarlo ed hanno sviluppato tanti script interessanti con l’ausilio delle nuove funzionalità.

Ad esempio, Ricardo Santos ha scritto questi indicatori:

Joris Duyck ha creato lo script Trendlines, per illustrare le nuove possibilità offerte dall’utilizzo delle trendline.

Speriamo che questi esempi ti possano ispirare. Nella nostra chat (inglese) puoi porre domande, esporre problematiche, discutere di idee e condividere opinioni. Ci teniamo a ringraziare tutti i membri della nostra community, i Pinescripters, che hanno speso del tempo come beta tester e ci hanno aiutato a creare un prodotto migliore. Se hai domande specifiche sul linguaggio di programmazione, puoi anche utilizzare la pagina Stack Overflow.