Pine Script中while循环陷入死循环问题排查及需求咨询
死循环原因及修复方案
死循环根源
你这段代码用了while循环,但Pine Script是逐K线执行的——每根K线只会运行一次代码逻辑。当stochRsiCross被设为true后,只要当前K线里cciCrossover没触发,while就会无限循环卡住,因为它不会等下一根K线的CCI信号,只会在当前K线里反复执行,直接导致死循环。
修复后的代码逻辑
不用while,改用状态变量跟踪等待状态,利用Pine Script逐K线执行的特性,每根K线检查一次条件:
// 初始化等待CCI信号的状态变量 var bool waitingForCCI = false // 第一步:StochRSI在20以下且出现向上交叉时,标记进入等待状态 if under20 and stochRsiCrossover waitingForCCI := true // 第二步:如果处于等待状态,且CCI出现向上交叉,执行下单并重置状态 if waitingForCCI and cciCrossover strategy.order("buy", strategy.long) waitingForCCI := false
逻辑说明
- 用
var声明的waitingForCCI只会初始化一次,用来记录是否处于等待CCI信号的状态 - 当StochRSI触发条件时,把状态设为
true,表示接下来要盯CCI的信号 - 每根K线都会检查:如果正处于等待状态,且CCI触发向上交叉,就下单并把状态重置为
false,结束等待
这样就完全避免了死循环,符合Pine Script的运行机制。
内容的提问来源于stack exchange,提问作者Unique631
相关产品推荐
相关产品推荐

