В Pine-скрипте, как назначить значение предыдущего бара текущему бару на основе состояния текущего бара в пользовательском индикаторе? - PullRequest
1 голос
/ 04 июня 2019

В Pine-скрипте мне нужно присвоить значение предыдущего бара текущему бару на основе состояния текущего бара в пользовательском индикаторе.

Я пробовал различные методы кодирования, которые приводили либо к внутренней ошибке сервера, либо к ошибкам компиляции.

Псевдо-код:

If currentbar >= upperthreshold
   indicatorvalue = value1
Elseif currentbar <= lowerthreshold
   indicatorvalue = value2
Else
   indicatorvalue = indicatorvalue[currentbar-1]

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

1 Ответ

1 голос
/ 04 июня 2019

Если вы хотите сослаться на предыдущие значения, вы можете использовать Оператор ссылки на историю [].

Тогда все, что вам нужно сделать, это проверить ваши условия и использовать [] с оператором :=, если вы хотите переназначить значение ранее определенной переменной.

Вот небольшой пример, основанный на вашем псевдокоде. Цвет фона меняется в зависимости от ваших условий. Я также построил две горизонтальные линии, чтобы увидеть верхний / нижний пороги. Таким образом, вы можете видеть, что цвет фона остается тем же, когда цена находится между верхним и нижним порогом.

//@version=3
study("My Script", overlay=true)

upper_threshold = input(title="Upper Threshold", type=integer, defval=7000)
lower_threshold = input(title="Lower Threshold", type=integer, defval=6000)

color_value = gray

if (close >= upper_threshold)
    color_value := green
else 
    if (close <= lower_threshold)
        color_value := red
    else
        color_value := nz(color_value[1])

bgcolor(color=color_value, transp=70)

hline(price=upper_threshold, title="Upper Line", color=olive, linestyle=dashed, linewidth=2)
hline(price=lower_threshold, title="Lower Line", color=orange, linestyle=dashed, linewidth=2)

enter image description here

...