Mapy w Pine Script® już są!

Aug 31, 2023

Prezentujemy nowe narzędzie dla kodujących w Pine – Mapy, kolekcje przechowujące dane w parach klucz-wartość. Pozwalają one użytkownikom łączyć ze sobą powiązane elementy różnych typów w celu późniejszego dostępu w skrypcie. W przeciwieństwie do innych kolekcji w Pine, skrypty szybko uzyskują dostęp do wartości mapy, używając kluczy z jej par klucz-wartość, zamiast wewnętrznego indeksu.

Przestrzeń naszw map zawiera wszystkie nasze funkcje związane z mapami. Aby utworzyć mapę, użyj funkcj map.new<key_type, value_type>() .Na przykład:

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

Klucze mapy mogą być dowolnego fundamentalnego typu (int, float, bool, string, or color),  a wartości mogą być dowolnego typu, nawet zdefiniowanego przez użytkownika.

Po utworzeniu mapy możesz używać z nią dowolnych funkcji z przestrzeni nazw map. Na przykład, możesz dodawać pary klucz-wartość do mapy za pomocą funkcji map.put() i pobierać wartość powiązaną z unikalnym kluczem za pomocą funkcji map.get(). Możesz również generować tablicę z wszystkimi kluczami lub wartościami z mapy za pomocą funkcji map.keys() lub map.values(). Aby uzyskać więcej informacji na temat korzystania z tych nowych kolekcji i ich funkcji, zobacz stronę dotyczącą Map w Podręczniku Użytkownika.

W poniższym przykładzie stworzyliśmy skrypt, który wykorzystuje mapy do kolorowania tła wykresu na podstawie zmian cen w sesjach. Wykorzystuje on mapę data do przechowywania informacji o godzinie zakończenia sesji i zmianie netto ceny dla każdej sesji danego dnia, a następnie oblicza stosunek zmiany ceny bieżącej sesji do średniej zmiany w określonej liczbie sesji historycznych. Koloruje tło wykresu na podstawie tego stosunku, korzystając z zawartości mapy colors i wyświetla wartość tego stosunku w Oknie Danych:

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

Następujące publikacje są przykładami skryptów wykorzystujących mapy:

Volume/Market Profile od SamRecio

Volume Profile od LuxAlgo

Historical Pattern Matcher od Trendoscope

Aby być na bieżąco z nowymi funkcjami Pine Script®, śledź notatki o wydaniu w Podręczniku Użytkownika. Konto PineCoders również publikuje aktualizacje za pomocą Squawk Box’a na Telegramie, ze swojego konta na Twitterze i publicznego czatu Pine Script® Q&A na TradingView.

Mamy nadzieję, że uważacie tę bardzo oczekiwaną funkcję za równie przydatną, jak my sądzimy, że będzie, i prosimy o dalsze przesyłanie nam swoich opinii i sugestii, abyśmy mogli uczynić platformę jak najlepszą. Tworzymy TradingView dla was i zawsze z ogromnym zainteresowaniem słuchamy waszych myśli.

 

— Zespół TradingView

Look first Then leap

TradingView jest stworzony dla Ciebie. Upewnij się, że w pełni wykorzystujesz nasze niesamowite funkcje
Otwórz wykres