L’ultima novitá Pine Script®: mappe di valori!

Aug 31, 2023

Presentiamo un nuovo strumento per gli sviluppatori Pine: le Mappe, collezioni che contengono dati in formato key-value. Esse consentono agli utenti di collegare tra loro elementi correlati di tipo diverso per accedervi successivamente all’interno di uno script. Grazie all’indicizzazione tramite key-value, i valori vengono recuperati più facilmente rispetto agli altri oggetti Pine.

La nomenclatura map sottende tutte le funzioni ad essa relative. Per create una mappa, la sintassi corretta è dunque map.new<key_type, value_type>(). Ad esempio:

//@variable A map containing `int` keys and  `line` values.
m = map.new<int, line>()

Le chiavi di una mappa possono essere di qualsiasi tipo (int, float, bool, string o color), e i suoi valori possono essere anch’essi di qualsiasi tipo, anche di un tipo definito dall’utente.

Dopo aver creato una mappa, è possibile utilizzare qualsiasi funzione sotto map. Ad esempio, si possono inserire coppie key-value con map.put() e recuperare il valore collegato a una chiave unica con map.get(). È anche possibile generare un array con tutte le chiavi o i valori mappati, usando map.keys() o map.values(). Per ulteriori informazioni sull’uso di queste nuove collezioni e delle relative funzioni, si veda la relativa pagina del nostro Manuale utente.

Nell’esempio che segue, abbiamo creato uno script che utilizza le mappe per colorare lo sfondo del grafico al variare del prezzo della sessione. Utilizza la mappa data per memorizzare l’orario di chiusura e le informazioni sulla variazione netta del prezzo per ogni sessione giornaliera, quindi calcola un rapporto tra la variazione del prezzo della sessione corrente e la variazione media su un numero specifico di sessioni storiche. Colora lo sfondo del grafico in base a questo rapporto, utilizzando la mappa colors, e visualizza il valore del rapporto nella Finestra dei dati:

//@version=5
indicator("Session change highlighter", overlay = true)

// Inputs
sessionInput = input.session("0800-1700", "Session")
timezone     = input.string("America/New_York", "Timezone")
length       = input.int(10, "Sessions to compare")

//@variable A map of `int` closing time keys and `float` price change values.
var data = map.new<int, float>()
//@variable A map of `string` keys and `color` values for calculating the `highlightColor`.
var colors = map.new<string, color>()

var float sessionOpen    = na
float     relativeChange = na
int       closeTime      = time_close("D", sessionInput, timezone)

// Put (`string`, `color`) pairs into the `colors` map on the first bar.
if barstate.isfirst
    colors.put("Purple", color.new(color.purple, 50))
    colors.put("Orange", color.new(color.orange, 50))
    colors.put("Yellow", color.new(color.yellow, 50))

if not na(closeTime)
    // Update the session's opening price.
    if na(closeTime[1])
        sessionOpen := open

    // Assign a new value to the `closeTime` key in the `data` map.
    data.put(closeTime, math.abs(close - sessionOpen) / sessionOpen)

    //@variable An `array` of price changes from each session in the `data` map.
    sessionHistory = data.values()
    //@variable The number of sessions included in the `data` map.
    dataSize = data.size()

    if dataSize >= length
        //@variable The average price change over `length` sessions.
        avgSessionChange = sessionHistory.slice(dataSize - length, dataSize).avg()
        relativeChange := data.get(closeTime) / avgSessionChange

//@variable Returns a color gradient based on the `relativeChange` using the values in the `colors` map.
highlightColor = switch
    relativeChange <= 1 => color.from_gradient(relativeChange, 0, 1, colors.get("Purple"), colors.get("Orange"))
    =>                     color.from_gradient(relativeChange, 1, 2, colors.get("Orange"), colors.get("Yellow"))

bgcolor(highlightColor, title = "Background highlight")
plot(relativeChange, "Relative Change Ratio", highlightColor, display = display.data_window)

Le seguenti pubblicazioni sono esempi di script che utilizzano le mappe:

Volume/Market Profile by SamRecio

Volume Profile by LuxAlgo

Historical Pattern Matcher by Trendoscope

Per rimanere informati sulle nuove funzionalità di Pine Script®, tenete d’occhio le Note di rilascio del Manuale utente. Anche l’account PineCoders trasmette gli aggiornamenti dalla sua Squawk Box su Telegram, dal suo account su Twitter e dalla chat pubblica Pine Script® Q&A.

Riteniamo che queste funzioni, molto richieste, vi siano utili e vi invitiamo a continuare a inviarci feedback e suggerimenti, in modo da poter rendere la piattaforma la migliore possibile. Costruiamo TradingView per voi e siamo sempre desiderosi di ascoltare le vostre opinioni.

Team TradingView

Look first Then leap

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