Проблема с добавлением суммы для накопительной диаграммы

#pine-script

#сценарий pine

Вопрос:

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

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

Есть идеи?

 //@version=4
study("My Script", overlay=false)

Xopen = security(syminfo.tickerid, 'D', open, lookahead=barmerge.lookahead_on)
Xclose = security(syminfo.tickerid, 'D', close, lookahead=barmerge.lookahead_on)
Xsum = Xopen-Xclose[1]

var float Xzero = 0
var float Yzero = 0

//var float Xsum = 5

if barstate.isnew
    Xzero := Yzero Xsum
    Yzero := Xzero
    
plot(Xzero)
 

Ответ №1:

Проблема здесь:

 Xsum = Xopen-Xclose[1]
 

На самом первом баре нет исторических данных, поэтому Xclose[1] вернутся NaN .
Любое вычисление с помощью a NaN также приведет к NaN .
Поэтому все ваши переменные будут NaN .

Вы должны заменить NaN значение на с 0 помощью функции nz(), например:

 Xsum = Xopen-nz(Xclose[1])
 

Это будет работать:

 //@version=4 
study("My Script", overlay=false)

Xopen = security(syminfo.tickerid, 'D', open, lookahead=barmerge.lookahead_on)
Xclose = security(syminfo.tickerid, 'D', close, lookahead=barmerge.lookahead_on)
Xsum = Xopen - nz(Xclose[1])

var float Xzero = 0
var float Yzero = 0

if barstate.isnew
    Xzero := Yzero Xsum
    Yzero := Xzero

plot(Xzero)