Инициализация Pinescript - PullRequest
       6

Инициализация Pinescript

0 голосов
/ 31 августа 2018

Я пытаюсь понять следующий код индикатора pinescript - https://www.tradingview.com/script/XzcIRUHv-JMA-RSX-Clone-LazyBear/

Я не уверен, какие значения имеют переменные типа f90, f88. Это предопределенные ярлыки для чего-то еще? Они кажутся массивами, потому что они используются с индексом. E.g.:

f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1

1 Ответ

0 голосов
/ 17 сентября 2018

Они не являются встроенными переменными.

pine-script версии 1 и 2 позволяют вам обращаться к переменным с помощью [] в сочетании с nz(), даже если переменная еще не объявлена. Таким образом, в версии 1 и версии 2 действует следующее:

f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1

Если вы попробуете это в //@version=3, вы получите Необъявленный идентификатор Ошибка.

Сократим код до следующего:

//@version=2
study(title="JMA RSX Clone [LazyBear]", shorttitle="RSXC_LB", overlay=false)
length=input(14)

f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0 
plot(f90_, title="f90", color=orange, linewidth=4)
plot(f88, title="f88", color=red, linewidth=4)

Давайте посмотрим, что происходит с f90_ и f88 для самого первого бара .

f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1

Условие здесь (nz(f90_[1]) == 0.0). f90_[1] в основном запрашивает значение одного предыдущего бара, но это первый бар (помните?), Поэтому предыдущего значения нет. Итак, ответ: NaN (не число).

Теперь, если вы введете это в nz(), он вернет ноль . Поскольку nz() заменяет NaN значения на нули .

Таким образом, условие будет истинным для первого бара, и f90_ будет присвоено 1.0 .

Давайте теперь посмотрим на f88, опять же для самого первого бара .

f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0 

Первое условие здесь (nz(f90_[1]) == 0.0). Это должно вернуть true, по той же причине, что и выше.

Второе условие (length-1 >= 5). Это также должно вернуть true для ввода по умолчанию (14).

Итак, f88 будет присвоено 14-1 = 13 для первого бара.

Я думаю, что вы можете продолжить с этого момента. Попробуйте запустить короткий код, который я предоставил, и посмотрите таблицу.

...