Скрипт Pine стирает старую строку изнутри оператора if?

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

r = close > close[1] and close[1] > close[2]
selleverything = if r
l1 := line.new(bar_index[1], price1, bar_index, price1, color=color.red, style=line.style_solid, 
width=1, extend=dS1 ? extend.right : extend.both)

Вышеприведенное рисует линии нормально, но если я добавлю

line.delete(l1[1])

внутри оператора if я получаю пустое выражение, которое не может быть присвоено переменной

если я помещу line.delete(l1[1]) вне оператора if, строки не будут нарисованы.

Любая помощь приветствуется.


person Aaron Spesard    schedule 21.12.2020    source источник


Ответы (1)


Оператор if в этом примере находится в области объявления переменных.

selleverything = if r

Вместо этого переместите его в глобальную область, как в примере ниже:

//@version=4
study("My Script")
r = close > close[1] and close[1] > close[2]

var line l1 = na
price1 = close
dS1 = true

if r
    l1 := line.new(bar_index[1], price1, bar_index, price1, color=color.red, style=line.style_solid, width=1, extend=dS1 ? extend.right : extend.both)
    line.delete(l1[1])
  1. Объявлены переменные price1 и dS1, так как они отсутствовали (соответственно назначьте вашему коду)
  2. Предварительно объявленная переменная строки l1.
  3. Оператор if перемещен в глобальную область.
person e2e4    schedule 21.12.2020