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

Pine Script向ta.lowest等函数传递数组动态值无输出及报错问题

问题原因分析
  • 报错Invalid value of the 'length' argument (0.0) in the "lowest" function. It must be > 0.的直接原因:你的for循环从i=0开始遍历,i=0对应当前bar的MACD hist值,当该值满足hist[i]>0条件时,0会被存入lengths数组,调用ta.lowest时传入0就触发了参数校验错误。此外如果数组中没有符合条件的元素,array.get会返回na,也会导致函数计算异常,label因为包含na值无法正常渲染。
  • 动态取值无效、修改label后无输出的原因:没有对取到的length参数做合法性兜底,早期历史bar上数组还未填充有效数值时,返回的na会导致ta.lowest计算结果为na,对应plot和label都不会显示内容。
解决方法

只需增加参数合法性校验逻辑即可,修改后的可运行代码如下:

//@version=5
indicator("Dynamic INT array length", overlay = false, max_bars_back = 5000)

[a, b, hist] = ta.macd(close, 26, 12, 9)

int[] lengths = array.new_int()
int[] nlengths = array.new_int()

for i = 0 to 10
    if hist[i] > 0
        array.unshift(lengths, i)
    else    
        array.unshift(nlengths,i)

// 新增合法性校验逻辑
var int default_len = 1
int dyn_len = default_len
if array.size(lengths) > 0
    // 方案1:如果你的业务逻辑是取偏移量到当前bar的总周期数,对取到的偏移量+1,自然规避0值
    dyn_len = math.max(array.get(lengths, 0) + 1, 1)
    // 方案2:如果确实要把偏移量直接作为length,就直接兜底最小为1即可
    // dyn_len = math.max(array.get(lengths, 0), 1)

lowest = ta.lowest(hist, dyn_len)

plot(lowest)
plot(hist, color = color.red)

// 确保调试文本无na值,避免label无法显示
debug_text = str.tostring(lowest) + "   " + str.tostring(lengths) + "   " + str.tostring(dyn_len)
debug = label.new(x = bar_index, y = 0, style = label.style_label_left, text = debug_text)
label.delete(debug[1])

核心调整点:

  1. 先判断数组长度,避免空数组取值返回na
  2. 用math.max做参数兜底,保证传入ta.lowest的length参数始终≥1
  3. 调试文本做兼容处理,确保label可以正常渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:36:02