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

如何将自定义数据写入数组并直接寻址读取?解决读取值使用异常问题

正确读取支撑阻力位并绘制水平线的解决方案

问题根源

你生成红色竖线的核心原因是**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)

关键修正点说明

  1. 避免重复操作:用barstate.islast限制数组push和线的创建逻辑只在最后一根K线执行,防止每根K线都重复插入数组元素或创建新线,导致资源浪费。
  2. 正确画线参数:将line.new()的y1和y2都设为SupRes1,x1设为历史K线索引(如bar_index - 200,可根据需要调整区间长度),x2设为当前K线索引,这样就能画出水平的支撑/阻力线。
  3. 数值变量的使用:SupRes1已经是普通浮点型变量,你可以直接用它做任何数值操作,比如:
    // 示例:判断当前价格是否突破阻力位
    isBreakout = close > SupRes1
    plotshape(isBreakout, title="突破", location=location.belowbar, color=color.green, style=shape.triangleup)
    

内容的提问来源于stack exchange,提问作者Vendrel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:56:09