¡Pine Script® ahora incluye Mapas!

Aug 31, 2023

Presentamos una nueva herramienta para los programadores de Pine: los mapas, colecciones que contienen datos en pares clave-valor. Permiten a los usuarios enlazar elementos relacionados de diferentes tipos para acceder a ellos posteriormente en un script. A diferencia de otras colecciones de Pine, los scripts acceden rápidamente a los valores de un mapa utilizando las claves de sus pares clave-valor en lugar de un índice interno.

El espacio de nombres map alberga todas nuestras funciones relacionadas con los mapas. Para crear un mapa, utilice la función map.new<key_type, value_type>(). Por ejemplo:

//@variable A map containing `int` keys and  `line` values.

m = map.new<int, line>()

Las claves de un mapa pueden ser de cualquier tipo fundamental (int, float, bool, string o color), y sus valores pueden ser de cualquier tipo, incluso de un tipo definido por el usuario.

 

Una vez creado un mapa, puede utilizar con él cualquiera de las funciones del espacio de nombres de map. Por ejemplo, puede introducir en él pares clave-valor utilizando map.put() y recuperar el valor vinculado a una clave única utilizando map.get(). También puede generar una matriz a partir de todas las claves o valores asignados mediante map.keys() o map.values(). Para obtener más información sobre el uso de estas nuevas colecciones y sus funciones relacionadas, consulte la página nuestro Manual del usuario sobre Mapas.

 

En el ejemplo siguiente, hemos creado un script que utiliza mapas para colorear el fondo del gráfico en función de los cambios de precio de la sesión. Este utiliza un mapa de data para almacenar la información sobre la hora de cierre y la variación neta del precio de cada sesión del día y, a continuación, calcula una relación entre la variación del precio de la sesión actual y la variación media de un número determinado de sesiones históricas. Colorea el fondo del gráfico en función de esta relación utilizando el contenido del mapa de colors y muestra el valor de la relación en la ventana de datos:

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

Las siguientes publicaciones son ejemplos de guiones que utilizan mapas:

Volume/Market Profile por SamRecio

Volume Profile por LuxAlgo

Historical Pattern Matcher por Trendoscope

Para estar al día de las nuevas funciones de Pine Script®, no pierda de vista las notas de la versión del Manual del usuario. La cuenta de PineCoders también difunde actualizaciones desde su Squawk Box en Telegram, su cuenta de Twitter y desde el chat público Pine Script® Q&A en TradingView.

Esperamos que esta característica tan solicitada le resulte tan útil como creemos que será, y por favor, siga enviándonos sus comentarios y sugerencias para que podamos hacer que la plataforma sea lo mejor posible. Creamos TradingView para usted, y siempre estamos dispuestos a escuchar sus opiniones.

– Equipo TradingView

Look first Then leap

TradingView está hecho para usted, asegúrese de aprovechar al máximo nuestras increíbles funciones
Abrir gráfico