Как получить доступ к последним значениям индикатора

У меня есть индикатор, который показывает точки разворота:

//@version=4
study("Trend", overlay=false)
leftBars  = input(3)
rightBars = input(3)

ph = pivothigh(high, leftBars, rightBars)
pl = pivotlow(low, leftBars, rightBars)

Как я могу проверить, был ли последний ph выше предыдущего? (Я хотел бы проверить восходящий или нисходящий тренд)


person cody    schedule 14.01.2020    source источник


Ответы (1)


Вы можете попробовать следующий код (включая ваш оригинальный, как вы видите):

//@version=4
study("Trend", overlay=false)
leftBars  = input(3)
rightBars = input(3)

ph = pivothigh(high, leftBars, rightBars)
pl = pivotlow(low, leftBars, rightBars)

//INIT VARIABLES
var int ph_uptrend_flag = 0
var float ph_valid = 0
var float ph_valid_old = 1e99 // use any very high non meaningful number here for initialization only

ph_non_na = nz(ph,0) // stores 0's instead of na's for non-pivot-pointed bars

// re-calculate uptrend flag every time a new pivot comes in, otherwise keep last known value for uptrend flag
if ph_non_na != 0
    ph_valid := ph_non_na
    ph_uptrend_flag := ph_valid > ph_valid_old ? 1 : 0
    ph_valid_old := ph_valid
else
    ph_valid := ph_valid
    ph_valid_old := ph_valid_old

//plot uptrend flag and mark background accordingly
plot(ph_uptrend_flag,title="ph uptrend indication",linewidth=4,color=color.white)

//plot(ph,title="ph value",color=color.lime,style=8) //plot ph values (better used with overlay=true)
person Glauco Esturilio    schedule 14.01.2020
comment
Ох, спасибо!! Я не ожидал, что это будет так сложно... мне нужно писать все это и для pl? Я тоже хочу определять нисходящие тренды... - person cody; 15.01.2020
comment
Для pl можно повторить точно так же, но нужно создать новые переменные с префиксом pl_, где вы читали ph_ в ответе выше, и заменить оператор сравнения › на ‹ для проверки PL. Это становится немного сложным, потому что функции pivothigh() и pivotlow() возвращают значения 'na' там, где нет точки разворота, и мы должны сохранить местозаполнитель в памяти для последней допустимой точки разворота, чтобы провести сравнение. Как обычно в программировании, возможно, есть более простой способ - я предпочел скорость оптимальному коду, чтобы дать вам ответ как можно скорее :) - person Glauco Esturilio; 15.01.2020
comment
PS: я сделал это для ph только потому, что исходный вопрос гласит: «Как я могу проверить, был ли последний ph выше, чем предыдущий ph?», и мы должны здесь отвечать только на сам вопрос, а не на предполагаемые/неявные вопросы :) Плохо, я мог бы быть менее конкретным здесь - person Glauco Esturilio; 15.01.2020