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