如何将自定义数据写入数组并直接寻址读取?解决读取值使用异常问题
正确读取支撑阻力位并绘制水平线的解决方案
问题根源
你生成红色竖线的核心原因是**line.new()的x坐标参数设置错误**:你传入了两个相同的bar_index值(x1和x2相等),此时无论y值是什么,都会画出垂直于时间轴的竖线,而非水平的支撑/阻力线。
你对数组的读取逻辑是完全正确的:array.get(SupportResistance, 1)已经成功把数组中第二个元素(1.29100)赋值给了SupRes1,这个变量就是普通的数值变量,可以直接用于任何数值运算。
修正后的代码
// 初始化支撑阻力数组(仅脚本启动时执行一次) var SupportResistance = array.new_float() // 仅在最后一根K线时添加支撑阻力值(避免重复插入) if barstate.islast array.push(SupportResistance, 1.29000) array.push(SupportResistance, 1.29100) // 读取数组中索引为1的阻力位数值(数组为0索引,对应第二个插入的值) float SupRes1 = array.get(SupportResistance, 1) // 绘制水平阻力线:x1取历史K线位置,x2取当前K线,向右延伸 var line resistanceLine = na if barstate.islast resistanceLine := line.new(bar_index - 200, SupRes1, bar_index, SupRes1, color=color.red, width=2, extend=extend.right)
关键修正点说明
- 避免重复操作:用
barstate.islast限制数组push和线的创建逻辑只在最后一根K线执行,防止每根K线都重复插入数组元素或创建新线,导致资源浪费。 - 正确画线参数:将
line.new()的y1和y2都设为SupRes1,x1设为历史K线索引(如bar_index - 200,可根据需要调整区间长度),x2设为当前K线索引,这样就能画出水平的支撑/阻力线。 - 数值变量的使用:
SupRes1已经是普通浮点型变量,你可以直接用它做任何数值操作,比如:// 示例:判断当前价格是否突破阻力位 isBreakout = close > SupRes1 plotshape(isBreakout, title="突破", location=location.belowbar, color=color.green, style=shape.triangleup)
内容的提问来源于stack exchange,提问作者Vendrel
相关产品推荐
相关产品推荐

