如何条件化OHLCV类型的request.security调用?语法报错求解
如何用三元运算符条件化处理OHLCV类型的request.security调用?
已知可以用?运算符对单个值的request.security调用做条件化处理,示例代码:
C = 1 > 0 ? request.security(syminfo.tickerid, "D", close) : 0
但尝试对OHLCV数组格式的调用做条件化处理时,触发了Syntax error at input '[''语法错误,出错代码如下:
[O, H, L, C, V] = 1 > 0 ? request.security(syminfo.tickerid, "D", [open, high, low, close, volume]) : [0, 0, 0, 0, 0]
解决方案
Pine Script的语法不支持直接在三元运算符的分支中返回数组并立即解构赋值,你可以通过以下两种方式实现需求:
方式一:先获取数组,再逐个变量赋值
先执行request.security拿到完整的OHLCV数组,再用三元运算符给每个变量单独赋值:
ohlcv = request.security(syminfo.tickerid, "D", [open, high, low, close, volume]) O = 1 > 0 ? ohlcv[0] : 0 H = 1 > 0 ? ohlcv[1] : 0 L = 1 > 0 ? ohlcv[2] : 0 C = 1 > 0 ? ohlcv[3] : 0 V = 1 > 0 ? ohlcv[4] : 0
方式二:用if条件语句替代三元运算符
通过if-else块分别处理两种情况的解构赋值与变量初始化:
// 提前声明变量避免未定义错误 var float O = na var float H = na var float L = na var float C = na var float V = na if 1 > 0 [O, H, L, C, V] = request.security(syminfo.tickerid, "D", [open, high, low, close, volume]) else O := 0 H := 0 L := 0 C := 0 V := 0
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

