首页 > 解决方案 > 布尔表达式评估和性能

问题描述

我认为 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语句上进行评估。
(可以在Plotting custom data - daily = ok, week = not okf_prediction_daily()中的函数中看到一个示例) 但是随着我的语句列表越来越大,我注意到性能下降了。 因此,我创建了这个小测试和问题。
if

标签: pine-script

解决方案


正确的。布尔表达式的求值目前在 Pine 中没有短路,因此表达式中的所有元素都被求值。


推荐阅读