Pinescript V5中If语句不符合预期:警报频繁触发问题
Pinescript 卖出警报重复触发问题解决
你的代码里,alert()的alert.freq_once_per_bar参数只能保证单根K线内不重复触发警报,但如果smaDiff > emaDiff + 1 and strategy.position_size > 0这个条件在连续的每分钟K线里都成立,每根新K线都会触发一次警报,这就是你遇到的每分钟都发卖出警报的原因。
解决方法是通过一个状态变量记录警报是否已经触发过,只在条件首次满足时发送警报:
// 初始化状态变量,标记卖出警报是否已触发 var bool sellAlertTriggered = false // 仅当条件满足且未触发过警报时执行操作 if smaDiff > emaDiff + 1 and strategy.position_size > 0 and not sellAlertTriggered strategy.exit("Sell", from_entry = "Buy") alert("SELL SIGNAL FOR BTC/USD (" + str.tostring(close) + ")", alert.freq_once_per_bar) sellAlertTriggered := true // 标记为已触发 // 当持仓清空或指标条件不满足时,重置状态变量 if strategy.position_size == 0 or smaDiff <= emaDiff + 1 sellAlertTriggered := false
逻辑说明
var关键字让sellAlertTriggered变量只初始化一次,不会随每根K线重置- 新增
not sellAlertTriggered条件,确保同一轮满足条件的周期内只触发一次警报 - 重置逻辑保证后续如果再次满足持仓+指标条件,能正常触发新的警报
内容的提问来源于stack exchange,提问作者paris_tj
相关产品推荐
相关产品推荐

