这个pinescript语句是什么意思?

What is the meaning of this pinescript statement?

当pinescript只做:

var col = 1

col := col == -1 and VarA > VarB ? 1 : col == 1 and VarA < VarB ? -1 : col

自从初始化为 1 以来,“col == -1”如何为真?

您可以转换任何 ternary (?:) construction to an if-then-else on this website

你的例子

col == -1 and VarA > VarB ? 1 : col == 1 and VarA < VarB ? -1 : col

产生这个

if (col == -1 and VarA > VarB) {
    1
} else {
    if (col == 1 and VarA < VarB) {
        -1
    } else {
        col
    }
}

假设您在问题中指的是 var col = 1 而不是 var dir = 1
col 获得 -1 值的唯一方法是 VarA < VarB.

细分

在第一个柱上

var col = 1

这会将 col 初始化为值 1
此初始化不会在每个柱上重复。
由于 var 关键字,此初始化只进行一次。

摘自 Variable declaration 上的手册:
var 关键字是一个特殊的修饰符,它指示编译器只创建和初始化变量一次。 在变量的值必须在连续柱的脚本迭代中保持不变的情况下,此行为非常有用。

if (col == -1 and VarA > VarB)

and 语句的第一部分产生 false,因为 col1
因此,整个 and 语句产生 false.
代码继续到第一个 else.

if (col == 1 and VarA < VarB)

and 语句的第一部分产生 true,因为 col1
根据 VarA < VarBtrue 还是 falsecol 被分配 -1 或者它自己的当前 col 值。
为了论证,假设 VarA < VarB 产生 true.
然后,整个 and 语句产生 true,使得 if 语句 true.
-1 被分配给 col.

在第二个柱上

col 现在的值为 -1.

if (col == -1 and VarA > VarB)

and 语句的第一部分产生 true,因为 col-1
如果 VarA > VarBtruecol 被分配 1
整个语句就到这里了。

如果 VarA > VarBfalse,代码继续到第一个 else

if (col == 1 and VarA < VarB)

and 语句的第一部分产生 false,因为 col-1
因此,整个 and 语句产生 false.
col 的当前值被分配给 col
所以 col 变量保持在 -1.