Problem z alertami dotyczącymi wskaźników wykorzystujących przesunięcia
Jeśli alert jest tworzony na wskaźniku, który wykorzystuje wykresy z przesunięciami, to porównując sygnał alertu z sygnałem na wykresie, może się wydawać, że alert jest wyzwalany z opóźnieniem.
Przyjrzyjmy się przykładowi: alert wyzwalany po wykryciu pivotHigh.
pivotHigh to szczyt, którego wartość jest większa niż określona liczba poprzednich i kolejnych wartości szczytowych. (W tym przykładzie jest więcej niż dwa poprzednie i kolejne szczyty.)
Możesz znaleźć słupek, na którym spełniony jest powyższy warunek, używając tego skryptu Pine:
//@version=6
indicator("PivotHigh", overlay=false)
plot(high)
plot(high, linewidth=2, style = plot.style_circles)
phDetected =
high[2] > high[0]
and high[2] > high[1]
and high[2] > high[3]
and high[2] > high[4]
plotshape(phDetected?high[2]:na, style=shape.labeldown, location=location.absolute, text="pivotHigh", textcolor=color.white, color=color.green, offset=0)
alertcondition(phDetected)
Po dodaniu skryptu do wykresu widzimy etykietę wyświetlaną na słupku z 16:30, chociaż pivotHigh znajduje się 2 słupki w lewo.

Jeśli utworzysz alert na podstawie alertcondition w skrypcie, zostanie on również wyzwolony na słupku z 16:30, ponieważ warunek wykrywania pivotHigh jest na nim spełniony.
Możemy dodać przesunięcie do funkcji plotshape, aby etykieta była wyświetlana na słupku pivotHigh.
plotshape(phDetected?high[2]:na, style=shape.labeldown, location=location.absolute, text="pivotHigh", textcolor=color.white, color=color.green, offset=-2)

Takie przesunięcie jest stosowane wyłącznie dla wygody (często używane w wskaźnikach dywergencji) i nie wpływa na działanie alertu, tj. alert nadal zostanie wyzwolony poprawnie na słupku z 16:30. Może się jednak wydawać, że powinien zostać wyzwolony wcześniej (czyli na słupku z 14:30).