Как построить стрелку, когда преобразование Фишера пересекается?

#pine-script

#сценарий пайна

Вопрос:

Я пытаюсь построить стрелку каждый раз, когда преобразование Фишера пересекается. До сих пор я мог рисовать стрелки, показывающие восходящий или нисходящий тренд, но я не могу понять, как сохранить предыдущее состояние, чтобы указывалось только переключение тренда.

Итак, когда вы создаете новое преобразование Фишера, вы можете видеть 2 переменные fish1 и fish2. Каждый раз, когда ранее fish1> fish2, а теперь fish1 < fish2, должна быть построена стрелка. Ниже приведен полный код с использованием plotshape().

 //@version=3
study(title="Fisher Transform", shorttitle="Fisher")
len = input(9, minval=1, title="Length")

high_ = highest(hl2, len)
low_ = lowest(hl2, len)

round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val

value = 0.0
value := round_(.66 * ((hl2 - low_) / max(high_ - low_, .001) - .5)   .67 * nz(value[1]))

fish1 = 0.0
fish1 := .5 * log((1   value) / max(1 - value, .001))   .5 * nz(fish1[1])

fish2 = fish1[1]

plotshape(fish1 > fish2, style=shape.arrowup, location=location.belowbar, color=green, size=size.small, text="Buy") 
plotshape(fish1 < fish2, style=shape.arrowdown, location=location.belowbar, color=red, size=size.small, text="Sell") 


hline(1.5, color=orange)
hline(0.75)
hline(0, color=orange)
hline(-0.75)
hline(-1.5, color=orange)
plot(fish1, color=blue, title="Fisher")
plot(fish2, color=orange, title="Trigger")
  

Есть ли функция, которая позволила бы мне отображать стрелку только тогда, когда условие «больше» меняется на «меньше»?

Большое спасибо!

Ответ №1:

crossover() и crossunder() это те функции, которые вы ищете.

кроссовер

x -series определяется как пересекший y -series, если значение x больше, чем значение y , а значение x было меньше значения y на панели, непосредственно предшествующей текущей панели.

crossunder

x -series определяется как пересекший нижний y ряд, если значение x меньше значения y , а значение x было больше значения y на панели, непосредственно предшествующей текущей панели.

 plotshape(crossover(fish1, fish2), style=shape.arrowup, location=location.belowbar, color=green, size=size.small, text="Buy") 
plotshape(crossunder(fish1, fish2), style=shape.arrowdown, location=location.belowbar, color=red, size=size.small, text="Sell")