Pine Script® propose désormais Pine Script® Maps!

Aug 31, 2023

Nous présentons un nouvel outil pour les codeurs Pine: les Pine Script® Maps (cartes), des collections qui contiennent des données sous forme de paires clé-valeur. Elles permettent aux utilisateurs de lier des éléments connexes de différents types afin d’y accéder plus tard dans un script. Contrairement aux autres collections de Pine, les scripts accèdent rapidement aux valeurs d’une carte en utilisant les clés de ses paires clé-valeur au lieu d’un index interne.

L’espace de noms map abrite toutes les fonctions liées aux cartes. Pour créer une carte, utilisez la fonction map.new<key_type, value_type>(). Par exemple:

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

Les clés d’une carte peuvent être de n’importe quel type fondamental (int, float, bool, string, ou color), et ses valeurs peuvent être de n’importe quel type, même un type défini par l’utilisateur.

Après avoir créé une carte, vous pouvez utiliser n’importe quelle fonction de l’espace de noms map. Par exemple, vous pouvez y placer des paires clé-valeur à l’aide de map.put() et récupérer la valeur liée à une clé unique à l’aide de map.get(). Vous pouvez également générer un tableau à partir de toutes les clés ou valeurs mappées en utilisant map.keys() ou map.values(). Pour plus d’informations sur l’utilisation de ces nouvelles collections et de leurs fonctions connexes, consultez la page de notre manuel d’utilisation consacrée aux cartes.

Dans l’exemple ci-dessous, nous avons créé un script qui utilise des cartes pour colorer l’arrière-plan du graphique en fonction des variations de prix de la séance. Il utilise une carte de data pour stocker les informations relatives à l’heure de clôture et à la variation nette du prix pour chaque séance du jour, puis calcule un ratio entre la variation du prix de la séance en cours et la variation moyenne sur un nombre spécifié de séances historiques. Il colore l’arrière-plan du graphique sur la base de ce ratio en utilisant le contenu de la carte des colors et affiche la valeur du ratio dans la fenêtre de données:

//@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)

Les publications suivantes sont des exemples de scripts utilisant des cartes:

Volume/Market Profile by SamRecio

Volume Profile by LuxAlgo

Historical Pattern Matcher by Trendoscope

Pour rester au courant des nouvelles fonctionnalités de Pine Script®, gardez un œil sur les notes de publication du Manuel de l’utilisateur. Le compte PineCoders diffuse également des mises à jour depuis sa Squawk Box sur Telegram, son compte Twitter, et sur Pine Script® Q&A.

Nous espérons que vous trouverez cette fonctionnalité très demandée aussi utile que nous le pensons, et continuez à nous envoyer vos commentaires et suggestions afin que nous puissions rendre la plateforme la meilleure possible. Nous construisons TradingView pour vous, et nous sommes toujours ravis d’entendre vos commentaires.

– L’équipe TradingView

Look first Then leap

TradingView est conçu pour vous, assurez-vous donc de profiter au maximum de nos fonctionnalités exceptionnelles
Ouvrir le graphique