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).