Оценка и производительность логических выражений - PullRequest
0 голосов
/ 09 мая 2020

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

См. Этот пример

//@version=4
study("PlayGround", overlay=true)

var int y = 0

f1() =>
    label.new(bar_index, high)
    true

if false and f1()
    y := y + 1

plot(y, title="y")

Оператор if false and f1() не должен оценивать результат функции f1(), чтобы знать, что результат всегда будет false.
Однако - как показывает тот факт, что на графике нанесены метки - функция f1() по-прежнему выполняется на каждом баре.
Итак, Pine Script, кажется, оценивает все выражение перед тем, как создать решение, которое не является необходимым.

Не знаю, задумано ли это, но я думаю, что это нужно исправить.

Контекстная информация
У меня есть сценарий, содержащий огромное количество последовательных операторов if, чтобы проверить, находится ли текущий столбец на определенную дату.
В пытаясь улучшить производительность, я добавил логическую переменную, которая будет оцениваться первой в каждом операторе if.
(пример можно увидеть в функции f_prediction_daily() в Построение пользовательских данных - ежедневно = нормально, еженедельно = не нормально )
Но по мере того, как мой список if операторов становился больше, я заметил снижение производительности.
Поэтому я создал этот небольшой тест и вопрос.

1 Ответ

1 голос
/ 09 мая 2020

Верно. Оценка логических выражений в настоящее время не выполняется в Pine, поэтому оцениваются все элементы в выражении.

...