Pinescript中array.get()无法访问数组数据的问题求助
Pine Script数组访问报错原因及解决办法
问题根源
你遇到的核心问题是:array.get(myArray, 0)会在数组为空时执行,而array.push()仅在close > myEma的K线才触发元素添加。前几根不满足条件的K线中数组是空的,此时直接访问索引0就会抛出"数组为空"的错误。
标签能显示数组有元素是因为只有当数组被填充后,标签内容才会正常展示,但plot函数是每根K线都会运行——哪怕数组为空时也会执行array.get,这时候就会触发报错。
解决办法
访问数组元素前必须先判断数组大小,确保有元素再执行访问操作,以下是两种可行写法:
写法1:条件判断后执行plot
myEma = ema(close,14) var myArray = array.new_float(0) if close > myEma array.push(myArray,close) lb1 = label.new(bar_index, high, text=tostring(myArray) + " Array size: " + tostring(array.size(myArray)), textcolor=color.black) label.delete(lb1[1]) // 数组有元素时才绘制,空数组时绘制空值 if array.size(myArray) > 0 plot(array.get(myArray,0)) else plot(na)
写法2:三元运算符简化判断
myEma = ema(close,14) var myArray = array.new_float(0) if close > myEma array.push(myArray,close) lb1 = label.new(bar_index, high, text=tostring(myArray) + " Array size: " + tostring(array.size(myArray)), textcolor=color.black) label.delete(lb1[1]) // 用三元运算符直接返回有效元素或空值 plot(array.size(myArray) > 0 ? array.get(myArray,0) : na)
补充说明
当array.push()放在IF语句外时,每根K线都会向数组添加元素,数组永远不会为空,因此array.get不会报错。但放在IF内时,只有满足条件的K线才会填充数组,未满足条件的K线中数组是空的,直接访问索引必然触发错误。
内容的提问来源于stack exchange,提问作者mrservatius
相关产品推荐
相关产品推荐

