Я думаю, что в способе вычисления логических выражений 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
операторов становился больше, я заметил снижение производительности.
Поэтому я создал этот небольшой тест и вопрос.