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


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