Pine Script® – nun mit dem Maps-Feature!

Aug 31, 2023

Wir möchten unseren Pine-Codern ein neues Tool vorstellen — Maps! Es handelt sich hierbei um Kollektionen, welche Daten in Schlüssel/Wert-Paaren aufbewahren. Sie ermöglichen Nutzern, verwandte Elemente unterschiedlicher Typen zu verknüpfen, um später im Script einen einfacheren Zugang zu ihnen zu erhalten. Im Gegensatz zu anderen Pine-Kollektionen erhalten Scripts einen schnelleren Zugang zu den Map-Werten mithilfe der Schlüssel in den Schlüssel/Wert-Paaren (anstelle eines internen Index).

Der Map Namensraum ist, wo sich alle Map-verbundene Funktionen befinden. Wenn Sie eine Map erstellen möchten, dann verwenden Sie die map.new<key_type, value_type>() Funktion. Zum Beispiel:

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

Die Schlüssel einer Map können einem beliebigen Fundamentaltyp angehören (int, float, bool, string oder color), und der Wert kann von einem beliebigen Typ sein, selbst einem benutzerdefinierten Typ.

Nachdem Sie eine Map erstellt haben, können Sie alle Funktionen in dem Map Namensraum verwenden. Zum Beispiel: Sie können Schlüssel/Wert-Paare mit map.put() einfügen und den verknüpften Wert mit einem einzigartigen Schlüssel abrufen, indem Sie einfach map.get() verwenden. Sie können auch ein Array von allen erfassten Schlüsseln oder Werten erstellen, indem Sie map.keys() oder map.values() verwenden. Für weitere Informationen über diese neue Kollektion und ihre verbundenen Funktionen sehen Sie sich bitte die Seite für Maps in unserem Benutzerhandbuch an.

In dem unten angeführten Beispiel haben wir ein Script erstellt, welches Maps verwendet, um den Charthintergrund bei Veränderungen der Handelssitzungspreise zu färben. Es verwendet eine Daten-Map, um die Schließungszeiten und Nettopreisveränderungen für jede tägliche Handelssitzung zu speichern, darauffolgend berechnet es ein Verhältnis zwischen der Preisveränderung in der aktuellen Sitzung und der durchschnittlichen Veränderung in einer bestimmten Anzahl an vergangenen Handelssitzungen. Es färbt dann den Charthintergrund basierend auf diesem Verhältnis, indem es die Inhalte der Colors-Map verwendet und die verbundenen Verhältniswerte in dem Datenfenster anzeigt:

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

Die folgenden Veröffentlichungen sind Beispiele für Scripts, welche Maps verwenden:

Volumen/Marktprofil von SamRecio

Volumenprofil von LuxAlgo

Historical Pattern Matcher von Trendoscope

Wenn Sie gerne auf dem Laufenden über die neuen Pine Script® Features bleiben möchten, dann behalten Sie bitte im Benutzerhandbuch die Versionshinweise im Auge. Die PineCoder veröffentlichen die Updates auch in ihrer Squawk Box auf Telegram, Twitter, und in ihrem Pine Script® Q&A Chat bei TradingView.

Wir hoffen, dass sich dieses oft angefragte Feature für Sie als nützlich erweisen wird, und senden Sie uns bitte auch weiterhin Ihr Feedback und Ihre Vorschläge. Auf diese Weise können wir unsere Plattform noch weiter verbessern. Wir entwickeln TradingView für Sie, und wir möchten immer Ihre Meinungen hören.

— Team TradingView

Look first Then leap

TradingView wurde für Sie entwickelt. Stellen Sie sicher, dass Sie unsere fantastischen Features optimal nutzen
Chart öffnen