有条件地将系列或 na 分配给变量

Conditionally assign a series or na to a variable

我正在尝试切换 On/Off 一个安全调用,该调用返回分配给一个元组的三个系列。

根据输入的布尔值,元组 [h_01、l_01、c_01] 被分配给来自安全调用的序列或 [na, na, na]由用户。代码如下:

sy_01 = input(defval = "BINANCE:BTCUSDT", title = "Symbol 01", type = input.symbol)
bl_01 = input(defval = true, title = "On/Off", type = input.bool)

[h_01, l_01, c_01] = bl_01 ? security(sy_01, resolution = "", expression = [high, low, close]) : [na, na, na]

我收到一个错误。

我也试过使用下面的格式:

bl_01 ? [h_01, l_01, c_01] = security(sy_01, resolution = "", expression = [high, low, close]) : [h_01, l_01, c_01] = [na, na, na]

我也试过 iff(condition, then, _else),还有一个 if else block。我还尝试分配给 [0, 0, 0] 或 [1, 1, 1] 而不是 [na, na, na]。我也试着把条件写成bl_01 == true。没有任何效果。

非常感谢任何帮助。

f_boolTuple(_high, _low, _close, _on) =>
    _h = _on ? _high : na
    _l = _on ? _low : na
    _c = _on ? _close : na
    [_h, _l, _c]

[h_01, l_01, c_01] = security(sy_01, resolution = "", expression = f_boolTuple(high, low, close, bl_01))

元组只能从函数中return编辑,不能直接赋值,例如这在 Pine 中是无效的:

[h, l] = [high, low]

或者在你的情况下,如果 bl_01 为 false

,你的三元组的这一部分无效
[h_01, l_01, c_01] = [na, na, na]

security() 是一个可以 return 元组的内置函数。但是因为您不能直接将 [na, na, na] 分配给您的元组,所以您必须在不同的上下文中执行您的逻辑。

通过在函数内执行逻辑检查(return [na, na, na] 元组),然后我们可以将此函数用作 security() 调用中的表达式。