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

Pine Script报“Loop takes too long to execute”错误,新手代码如何优化?

解决Pine Script v5循环超时问题

首先你代码里的核心问题是那段while循环是死循环——每次进入循环都会把count重置为1,循环条件bars_since只要不为0就会一直执行,永远跳不出循环,这才触发了“Loop takes too long to execute”报错。

如果你的需求是获取倒数第二次ta.cross(deliveryVolumePercentage, 95)触发的位置,完全不用循环,用Pine的var数组记录触发位置更高效:

//@version=5
indicator("Second Last Cross Tracker", overlay=true)

// 定义触发条件
condition = ta.cross(deliveryVolumePercentage, 95)

// 用var数组存储每次触发条件的K线索引(var保证数组不会随K线重置)
var int[] crossBars = array.new_int()

// 条件触发时,将当前K线索引存入数组
if condition
    array.push(crossBars, bar_index)

// 计算倒数第二次触发的间隔K线数
int secondToLast = na
if array.size(crossBars) >= 2
    // 取倒数第二个触发点的K线索引,计算与当前K线的差值
    lastCrossIndex = array.get(crossBars, array.size(crossBars)-2)
    secondToLast := bar_index - lastCrossIndex

// 绘制结果
plot(ta.barssince(condition), "Last Cross Bars", color=color.blue)
plot(secondToLast, "Second Last Cross Bars", color=color.red)

优化说明:

  • 用var声明数组,确保数组在脚本运行全程仅初始化一次,不会每根K线都重置
  • 每次条件触发时直接存入当前K线索引,避免循环遍历的无效开销
  • 通过数组的size和get方法直接定位倒数第二次触发位置,效率远高于循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:00:35