Pine script 条件安全()调用

Pine script 条件安全()调用,pine-script,Pine Script,我正试图通过security()调用(启用lookahead\u)来获取每日高/低/收盘时间。 那些每日hlc值对于同一天内的每个日内条形图保持不变。 因此,我尝试每天只调用一次安全性函数(当日期更改时)。 但是,我不断收到错误无法读取未定义的属性“isTuple” 我不明白为什么,似乎无法修复它。 有什么想法吗 这是我的示例代码 //@version=4 study("My Script") f_sec() => security(syminfo.ticker, &

我正试图通过
security()
调用(启用
lookahead\u
)来获取每日
高/低/收盘时间。
那些每日
hlc
值对于同一天内的每个日内条形图保持不变。
因此,我尝试每天只调用一次
安全性
函数(当日期更改时)。
但是,我不断收到错误
无法读取未定义的属性“isTuple”

我不明白为什么,似乎无法修复它。
有什么想法吗

这是我的示例代码

//@version=4
study("My Script")

f_sec() => security(syminfo.ticker, "D", [high,low,close], lookahead = barmerge.lookahead_on)

bar_date_ts = timestamp(year(time),month(time),dayofmonth(time),0,0,0)
is_new_date = change(bar_date_ts)

var float h = na
var float l = na
var float c = na

if (is_new_date)
    [x,y,z] = f_sec()
    h := x
    l := y
    c := z
    
plot(h)
plot(l)
plot(c)

应该在全局范围内调用安全函数

如果要删除元组,将收到正确的编译器错误:
不能在“if”或“for”中调用“security”或“financial”

if (is_new_date)
    x := security(syminfo.ticker, "D", high, lookahead = barmerge.lookahead_on)
    y := security(syminfo.ticker, "D", low, lookahead = barmerge.lookahead_on)
    z := security(syminfo.ticker, "D", close, lookahead = barmerge.lookahead_on)
    h := x
    l := y
    c := z
因此,将f_sec函数移到if语句之外,但是该函数将在每个条上调用,而不是每天调用一次

解决方案是使用条件运算符
?:,它不适用于元组,因此您必须进行3次安全调用。另外,我也不确定这样是否可以节省计算能力,因为编译器可以同时对这两种方法进行计算

var float x = na
var float y = na
var float z = na

x := is_new_date ? security(syminfo.ticker, "D", high,  lookahead = barmerge.lookahead_on) : nz(x[1])
y := is_new_date ? security(syminfo.ticker, "D", low,   lookahead = barmerge.lookahead_on) : nz(y[1])
z := is_new_date ? security(syminfo.ticker, "D", close, lookahead = barmerge.lookahead_on) : nz(z[1])

plot(x)
plot(y)
plot(z)

请注意,不使用
历史引用操作符而使用
lookahead
将导致脚本在当前安全解决方案参数期间重新绘制。

Update:此错误已通过内部更新Pine脚本解决。原始脚本现在运行良好,没有抛出错误。此错误已通过内部更新Pine脚本解决。原始脚本现在运行良好,没有抛出错误。谢谢你的解决办法。在此期间,我一直在使用这种变通方法。