April 9, 2021
Co nowego w Pine?

Nie wszystkie aktualizacje Pine zasługują na osobny wpis na blogu, ale nawet niewielkie zmiany i innowacje mogą czasami poprawić jakość Twojego skryptu. W tym wpisie przedstawimy niektóre z ostatnich ulepszeń, które mogły umknąć Twojej uwadze.

Słowo kluczowe varip przydaje się wtedy, gdy chcesz śledzić pewne dane i ich zmiany wewnątrz słupka czasu rzeczywistego. Wszystkie zwykłe zmienne w Pine podlegają tak zwanemu cofaniu, gdzie przy każdym nowym ticku danych, stan zmiennej jest resetowany do wartości z poprzedniego słupka przed oceną nowych danych. Słowo kluczowe varip pozwala tego uniknąć i porównać aktualną wartość zmiennej z jej wartością w poprzednim tiku (a nie na poprzednim słupku), co otwiera zupełnie nowe możliwości. Spójrz na wykres tickowy utworzony przez jednego z naszych czarodziejów Pine – LonesomeTheBlue:

https://www.tradingview.com/script/ygNO2G1V-Tick-Chart/

Aby dowiedzieć się więcej, przeczytaj szczegółowy tutorial na temat varip przygotowany przez PineCoders

https://www.tradingview.com/script/ppQxBISk-Using-varip-variables-PineCoders/

Dla tych z Was, którzy chcieli więcej matematyki w Pine, mamy teraz cały zestaw nowych funkcji i stałych związanych z matematyką:

  • Nowe stałe math.pi, math.phi, math.rphi and math.e
  • Nowa funkcjonalność round() — funkcja pozwala teraz określić dokładność zaokrąglania zamiast zawsze zaokrąglać do najbliższej liczby całkowitej
  • median()
  • mode()
  • range()
  • todegrees()
  • toradians()
  • random()

Coś dla miłośników przypadku: oto przykład strategii, która generuje zlecenia wejścia / wyjścia losowo na podstawie wartości procentowych wprowadzonych przez użytkownika w sekcji Argumenty. Wszystko dzięki nowej funkcji random():

//@version=4
strategy("I’m feeling lucky", overlay=true)
seed = input(1, "Seed, increase to recalculate the strategy", minval=1)
entryPerc = input(20.0, "Entry chance, %", minval=0.0, maxval=100.0)
exitPerc = input(10.0, "Exit chance, %", minval=0.0, maxval=100.0) 
roll = random(0, 100, seed)
positionSize = floor(random(1, (strategy.equity / close), seed))
if roll < entryPerc
    strategy.entry("My Long Entry Id", strategy.long, qty=positionSize)
if roll < exitPerc
    strategy.close_all()

W kolejnej zmianie operator przypisania := został połączony z operatorami arytmetycznymi, tworząc nowe operatory przypisania +=, -=, *=, /= oraz %=. Pozwalają one na uporządkowanie i skrócenie skryptów: zamiast używać a := a + 1 możesz po prostu napisać a += 1. Małe, ale całkiem wygodne ulepszenie.

Jeśli kiedykolwiek będziesz chciał dokonać konwersji ciągu znaków na liczbę, nowa funkcja tonumber() pozwoli Ci to zrobić. Na przykład w skrypcie poniżej, tonumber() w połączeniu z innymi funkcjami związanymi z ciągami znaków, takimi jak str.split() oraz str.replace_all(), pozwala pojedynczemu polu wejściowemu ciągu na zwrócenie wielu wartości całkowitych, które są następnie używane jako długości do obliczeń SMA. Nie ma żadnego ważnego powodu, aby robić to w ten sposób, zamiast używać poprawnej i wygodnej metody oddzielnego pola wejściowego dla każdej SMA. Jeśli jednak nagle chcesz obrać bardziej krętą ścieżkę, możesz to zrobić w następujący sposób:

//@version=4
study("My SMAs", overlay=true)
sma_lengths = input("5, 10, 20, 30, 50", title = "SMA Lengths (separated by comma)")
sma_lengths_array = str.split(str.replace_all(sma_lengths, " ", ""), ",")
sma_len(index) =>
    index > array.size(sma_lengths_array) - 1 ? 10 :
     int(tonumber(array.get(sma_lengths_array, index)))
sma0 = sma(close, sma_len(0))
sma1 = sma(close, sma_len(1))
sma2 = sma(close, sma_len(2))
sma3 = sma(close, sma_len(3))
sma4 = sma(close, sma_len(4))
plot(sma0, color=color.blue)
plot(sma1, color=color.red)
plot(sma2, color=color.green)
plot(sma3, color=color.orange)
plot(sma4, color=color.purple)

Dodaliśmy zmienną time_tradingday, która zwraca czas UNIX początku dnia handlowego. Będzie to przydatne podczas analizy symboli, które są handlowane w nocy, jak np. EURUSD, gdzie handel rozpoczyna się w niedzielę, podczas gdy technicznie rzecz biorąc, dzień handlowy to tak naprawdę poniedziałek.

Nowa funkcja time_close() pozwala na uzyskanie czasu zamknięcia słupka z określonego interwału i sesji (w przeciwieństwie do istniejącej wcześniej zmiennej time_close , która działa tylko z interwałem/sesją wykresu). Jest to szczególnie przydatne w przypadku narzędzi do rysowania, umożliwiając bardziej precyzyjne rysowanie linii i etykiet w przyszłości. Aby zobaczyć to w akcji, sprawdź jak JayRogers używa tej funkcji we wskaźniku Pivot Points:

https://www.tradingview.com/script/7EwXUkBE-Pivotal-Multi-Pivot-Selector/

Dzięki nowemu parametrowi format.percent w funkcji study(), dane wyjściowe Twojego skryptu mogą być teraz automatycznie formatowane jako procenty. Zobacz jak to działa w naszym wbudowanym wskaźniku Aroon:

//@version=4
study(title="Aroon", shorttitle="Aroon", overlay=false, format=format.percent, precision=2, resolution="")
length = input(14, minval=1)
upper = 100 * (highestbars(high, length+1) + length)/length
lower = 100 * (lowestbars(low, length+1) + length)/length
plot(upper, "Aroon Up", color=#FF6A00)
plot(lower, "Aroon Down", color=#0094FF)

Trzy nowe zmienne session.ismarket, session.ispremarket, oraz session.ispostmarket, pozwalają na sprawdzenie części sesji intraday, do której odnosi się bieżący słupek. Należy pamiętać, że rozszerzone godziny handlu wyświetlane są tylko na wykresach intraday i tylko wtedy, gdy opcja ta jest wyraźnie włączona w ustawieniach.

Jeśli chcesz wiedzieć o aktualizacjach Pine, gdy tylko się pojawią, sprawdzaj sekcję Informacje o Wersji w naszej Instrukcji Obsługi Pine. Konto PineCoders przekazuje również wiadomości o aktualizacjach w swoim kanale Squawk Box Telegram, na Twitterze i na publicznym czacie Pine Script na TradingView.

Mamy nadzieję, że nowe funkcje okażą się dla Ciebie przydatne. Jak zwykle czekamy na Twoje opinie i sugestie dotyczące kolejnych usprawnień. Tworzymy TradingView dla Ciebie i cieszymy się, gdy do nas piszesz.

Najszybszy sposób na śledzenie rynków

Otwórz wykres