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])
核心调整点:
- 先判断数组长度,避免空数组取值返回na
- 用math.max做参数兜底,保证传入ta.lowest的length参数始终≥1
- 调试文本做兼容处理,确保label可以正常渲染
内容的提问来源于stack exchange,提问作者TeddyPinder
相关产品推荐
相关产品推荐

