You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:45:34