修复Pine Script策略报错:循环执行超时(>500ms)
问题分析与解决方案
错误原因
你代码里的while strategy.position_size > 0循环是触发超时错误的核心原因。Pine Script是逐K线执行的脚本语言,每根K线只会运行一次代码逻辑。而这个while循环会在当前K线内无限重复执行——因为持仓状态在当前K线的执行周期内不会改变,循环没有终止条件,最终导致执行超时。
修正方案
去掉while循环,改用逐K线的条件判断来实现策略逻辑:持仓时,每根K线检查收盘价与最新持仓基准价的关系,决定是否卖出或更新基准价。
修正后的完整代码
//@version=5 strategy("SecretSauce", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, // 100% of balance invested on each trade commission_type=strategy.commission.cash_per_contract, commission_value=0.000) // commissions rate) // Get user input //i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_startTime = input.time(title="Start Filter", defval=timestamp("01 Jan 1999 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input.time(title="End Filter", defval=timestamp("01 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Check filter(s) f_dateFilter = (time >= i_startTime) and (time <= i_endTime) // Check buy/sell conditions var float buyPrice = 0.00 var float current_range = 10.00 buyCondition = (close > (open + current_range)) and (strategy.position_size == 0) and f_dateFilter // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) current_range := close - open buyPrice := close // 持仓状态下的退出与持仓逻辑(逐K线判断) if strategy.position_size > 0 if close < buyPrice strategy.close(id="Long", comment="Exit; SL=true") else if close >= buyPrice buyPrice := close
关键修改说明
- 移除原代码中的
while循环,替换为if strategy.position_size > 0的条件判断,确保每根K线只执行一次持仓逻辑。 - 完整保留了你设定的策略规则:
- 第一根K线收盘价较开盘价高出至少10点时买入
- 持仓时,当前K线收盘价低于持仓基准价则卖出;高于则更新基准价继续持仓
内容的提问来源于stack exchange,提问作者eewongjr
相关产品推荐
相关产品推荐

