如何修复Pine Script中for循环跳过exit条件的问题
问题原因
你的代码核心问题是正向遍历数组时直接删除元素,导致数组索引错乱。当删除第i个元素后,数组中后续元素的索引会自动前移一位,但循环的i仍会按原顺序递增,这就会跳过下一个元素的处理,使得本该在本次exit触发时被移除的线条,要等到下一次exit触发才会被处理,出现“跳过exit条件”的现象。
修复代码
var lines = array.new_line() entry = ta.crossover(ta.rsi(close, 5), 30) and array.size(lines) < 3 if entry array.push(lines, line.new(bar_index, close, bar_index, close)) exit = ta.crossunder(ta.rsi(close, 5), 90) // 反向遍历数组,避免删除元素导致的索引错乱 for i = array.size(lines) - 1 downto 0 line_item = array.get(lines, i) line.set_xy2(line_item, bar_index, close) if exit array.remove(lines, i)
修复说明
- 反向遍历数组:从最后一个元素(索引
array.size(lines)-1)遍历到第一个元素(索引0),这样即使删除当前元素,前面未遍历的元素索引不会受到影响,确保每个线条都能被正确检查和处理。 - 索引获取元素:用
array.get(lines, i)获取当前遍历的线条,替代原代码的解构遍历,更清晰且适配反向遍历逻辑。
内容的提问来源于stack exchange,提问作者bbnm
相关产品推荐
相关产品推荐

