如何实现TradingView警报仅触发一次直至收到反向信号?
解决方案
问题出在alert.freq_once_per_bar_close仅限制单根K线收盘时触发一次,但如果连续多根K线都满足同一信号条件(比如连续满足buy),还是会每根K线收盘都触发警报。要实现"仅触发一次直到反向信号",需要通过状态变量跟踪当前持仓方向,仅当信号反转时才触发新警报。
修改后的代码如下:
// 定义状态变量,跟踪当前持仓方向:0=空仓,1=多仓,-1=空仓 var int currentPosition = 0 if buy and currentPosition != 1 alert(buy_alert_string, alert.freq_once_per_bar_close) strategy.entry('buy', strategy.long) currentPosition := 1 // 更新状态为多仓 if sell and currentPosition != -1 strategy.entry('sell', strategy.short) alert(sell_alert_string, alert.freq_once_per_bar_close) currentPosition := -1 // 更新状态为空仓
关键逻辑说明
var关键字让currentPosition仅在脚本初始化时赋值一次,后续K线不会重置变量值。- 触发buy信号前,检查当前是否不是多仓状态(
currentPosition != 1),避免连续触发多单警报。 - 触发sell信号前,检查当前是否不是空仓状态(
currentPosition != -1),避免连续触发空单警报。 - 每次开仓后更新状态变量,确保只有反向信号出现时才会再次触发警报。
内容的提问来源于stack exchange,提问作者hatim
相关产品推荐
相关产品推荐

