Nuove funzioni su Pine Script: str.format() e array.from()

May 21, 2021

Questo aggiornamento porta su Pine Script nuove funzioni per la gestione di stringhe ed array.

La funzione str.format() vi permette di convertire gli argomenti in una stringa nel formato specificato:

str.format(formatString, arg0, arg1, ...) -> string

Il parametro formatString include un pedice N tra parentesi “{}” per rimpiazzare gli argomenti corrispondenti (arg0, arg1..argN, i quali sono stringhe o numeri) e mettere in pratica alcuni dei pattern descritti sotto.

Per gestire le stringhe non c’è più bisogno di usare la funzione str.replace_all() come indicato nell’esempio seguente:

txt := "Time to {0} some {1}!"

txt := str.replace_all(txt, "{0}", close > open ? "buy" : "sell")

txt := str.replace_all(txt, "{1}", syminfo.ticker)

ma si può invece trarre vantaggio dalla nuova funzione, più breve e conveniente:

txt = str.format("Time to {0} some {1}!", close > open ? "buy" : "sell", syminfo.ticker)

I pedici {0} e {1} vengono sostituiti dai corrispondenti argomenti in ordine cronologico: {0} – il risultato dell’operatore ternario, con la stringa “buy” o “sell” a seconda del confronto tra apertura e chiusura, {1} – syminfo.ticker, ovvero il simbolo corrente nel grafico:

Passando al formato number, il numero convertito in una stringa può cambiare rappresentazione, ad esempio limitando il numero di cifre decimali:

str.format("{0,number,#.#}", 1.34) // restituisce: 1.3

O rimuovendo del tutto le cifre dopo la virgola:

str.format("{0,number,integer}", 1.34) // restituisce: 1

O convertendolo in valuta per i dati fondamentali:

str.format("The cash turnover amounted to {0,number,currency}", 1340000) 

// “The cash turnover amounted to $1,340,000.00”.

O in valore percentuale:

str.format("Expected return is {0,number,percent} - {1,number,percent}", 0.1, 0.2)  

// restituisce: Expected return is 10% - 20%. 

La funzione str.format() supporta anche il formato date per la gestione di data/tempo.

Questo script mostra il numero di mesi, settimane e giorni trascorsi dall’inizio dell’anno:

//@version=4
study("str_format_date")

//formatting string with date pattern
txt = str.format("Current bar date: {0,date, Y-MM-d'.' \n M 'months \n' F 'weeks \n' D 'days \n from the beginning of the year' }", timenow)

//printing label
var l1 = label.new(na, na, color = #FFFFFF00)
label.set_x(l1, bar_index)
label.set_yloc(l1, yloc.belowbar)
label.set_text(l1, txt)

plot(close)

Alla funzione str.format() viene passata solo una variabile, timenow, che contiene la rappresentazione del tempo in formato UNIX: data, ora e fusorario della borsa di riferimento per il simbolo nel grafico. La stringa è poi formattata usando i caratteri Y, M, D, F (Year per anno, Month per mese, Day per giorno, F per la settimana del mese), il carattere speciale \n per mandare la linea a capo, e le virgolette per inserire del testo tra i caratteri.

Questo script restituisce le stringhe delle etichette con i risultati corrispondenti di vari caratteri:

//@version=4
study("str_format_date_time")

// creating date-time variable: 2021.05.04. 14:30:59
t = timestamp("GMT+0", 2021, 05, 04, 14, 30, 59)

// function for left side of the label
f_print_left(_text)  => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_right, color.green, size.large, text.align_right), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

// function for right side of the label
f_print_right(_text) => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_left, color.red, size.large, text.align_left), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

var string format = 
  "{0,date,y.MM.dd hh:mm:ss}\n" +
  "{1,date,short}\n" +
  "{2,date,medium}\n" +
  "{3,date,long}\n" +
  "{4,date,full}\n" +
  "{5,date,h a z (zzzz)}\n" +
  "{6,time,short}\n" +
  "{7,time,medium}\n" +
  "{8,time,long}\n" +
  "{9,time,full}\n" + 
  "{10,time,hh:mm:ss}\n" +
  "{11,time,HH:mm:ss}\n"

// printing format string 
f_print_left(format)
//printing formatted string
f_print_right(str.format(format, t, t, t, t, t, t, t, t, t, t, t, t))

La colonna di sinistra contiene la dicitura tra parentesi {}, mentre quella di destra il risultato effettivo della funzione str.format:

La variabile t è passata alla funzione str.format() e contiene il tempo in formato UNIX: data, ora e fusorario.

L’altra funzione che introduciamo con questo articolo è array.from(), la quale prende un numero variabile di argomenti di input appartenenti ad una delle seguenti tipologie: float, int, bool, string, label, line, color e restituisce un array di tipologia corrispondente. La funzione permette di inizializzare un array, assegnargli un valore iniziale ed il risultato di qualsivoglia variabile in un’unica linea di codice.

In passato, per creare un array e riempirla di valori iniziali, era necessario usare la funzione array.new() insieme ad array.push() o array.set():

color[] plotColors = array.new_color(size=0)
array.push(plotColors, color.red)
array.push(plotColors, color.green)
array.push(plotColors, #0000FF)

Ora è possibile creare un array contenente i colori del grafico in una sola linea:

plotColors = array.from(color.red, color.green, #0000FF)

La funzione renderà l’array plotColors in tipologia color[]  sulla base degli argomenti ricevuti:

//@version=4
study(title="array_from")

f_arr (series1, series2, color1, color2) =>
    [ array.from(series1, series2), array.from(color1, color2) ]

[lines, colors] = f_arr(close, open, color.red, color.green)    

plot ( array.get(lines, 0), color = array.get(colors, 0))
plot ( array.get(lines, 1), color = array.get(colors, 1))

Tutte le informazioni sulle funzioni str.format() e array.from() sono sempre disponibili nel manuale di riferimento.

Per chi è interessato, vi ricordiamo che tutti gli aggiornamenti di Pine Script sono sempre inclusi nella sezione delle Note di rilascio del Manuale utente. Altrimenti, l’account PineCoders condivide assiduamente le novità tramite canale Telegram (Squawk Box), Twitter e la chat pubblica Pine Script su TradingView.

Continuate ad inviarci consigli e suggerimenti. Siamo sempre felici di costruire insieme a voi il TradingView del futuro.

Look first Then leap

TradingView è realizzato per te. Assicurati di sfruttare al massimo tutte le sue funzionalità
Apri grafico