Pine Script for循环变量遮蔽告警的有效解决方法咨询
问题原因
Pine Script中for循环声明的迭代变量n属于循环作用域的只读不可变变量,你在循环体内用n = strategy.opentrades相当于重复声明了同名变量,触发变量遮蔽告警。你尝试替换为:=报错,是因为循环迭代变量本身不支持修改赋值。
解决方法
不要直接修改循环迭代变量n,单独声明新变量存储你需要的strategy.opentrades值即可,修改后的代码如下:
if bcktst and strategy.opentrades < 6 for n = 0 to 5 // 新声明变量存储当前开仓数,不占用迭代变量名 trade_idx = strategy.opentrades strategy.entry("Short #" + str.tostring(trade_idx + 1),strategy.short, when=barstate.isconfirmed, oca_type=strategy.oca.cancel) if sld > emaLTFs strategy.exit("Close #" + str.tostring(trade_idx + 1),"Short #" + str.tostring(trade_idx + 1), limit=tp1, stop=sld + atr, trail_price=tst1, trail_offset=(tst1 * beper1)/syminfo.mintick) else strategy.exit("Close #" + str.tostring(trade_idx + 1),"Short #" + str.tostring(trade_idx + 1), limit=tp2, stop=emaLTFs + atr, trail_price=tst2, trail_offset=(tst2 * beper2)/syminfo.mintick)
注意事项
- 永远不要在Pine Script的for循环体内修改迭代变量的值,所有自定义临时值都单独声明新变量存储
- 如果需要多处复用这段逻辑,可以把它封装为自定义函数,后续直接调用即可,避免重复编码同时降低出错概率
内容的提问来源于stack exchange,提问作者Diemunus
相关产品推荐
相关产品推荐

