如何实现TradingView警报触发后的延迟通知?现有代码同步触发
TradingView延迟警报触发问题解决方法
你的代码核心问题是时间判断逻辑错误,直接用lastBuySignalTime >= delay是拿信号触发的时间戳和延迟时长比,而不是计算当前时间与信号触发时间的差值,导致延迟警报和原警报同步触发。另外还缺少延迟警报的触发状态跟踪,会出现重复触发的问题。
关键修改点
- 把时间判断改成当前时间减去信号触发时间 >= 延迟时长,即
(timenow - lastBuySignalTime) >= delay - 新增布尔变量跟踪延迟警报是否已发送,避免同一信号多次触发延迟警报
- 原信号触发时同步重置延迟警报状态标记
修正后的完整代码
//@version=5 indicator("Delayed Alert Example", overlay=true) delay = input(15, 'Time Delay') * 1000 // 转换为毫秒 // 存储最后一次信号触发时间 var lastBuySignalTime = 0 var lastSellSignalTime = 0 // 标记延迟警报是否已发送,避免重复触发 var bool buyDelayAlertSent = false var bool sellDelayAlertSent = false // 信号条件 BUY = open < close SELL = open > close plotshape(BUY , title='Long', style=shape.labelup, location=location.belowbar) plotshape(SELL , title='Short', style=shape.labeldown, location=location.abovebar) // 原信号触发逻辑 if BUY alert("Buy Signal", alert.freq_once_per_bar) lastBuySignalTime := timenow buyDelayAlertSent := false // 重置延迟警报标记 // 延迟警报触发逻辑 if BUY and not buyDelayAlertSent and (timenow - lastBuySignalTime) >= delay alert("Delayed Buy Signal", alert.freq_once_per_bar) buyDelayAlertSent := true // 标记延迟警报已发送 // 卖信号同理 if SELL alert("SELL Signal", alert.freq_once_per_bar) lastSellSignalTime := timenow sellDelayAlertSent := false if SELL and not sellDelayAlertSent and (timenow - lastSellSignalTime) >= delay alert("Delayed SELL Signal", alert.freq_once_per_bar) sellDelayAlertSent := true
代码说明
- 时间差计算:
timenow是当前的毫秒级时间戳,用它减去信号触发时记录的lastBuySignalTime,得到的差值就是信号触发后过去的时长,和设定的delay对比就能准确判断是否达到延迟要求。 - 状态标记:
buyDelayAlertSent这类变量确保同一信号只会触发一次延迟警报,不会在后续K线持续重复触发。 - 标记重置:每次原信号触发时,重置对应的延迟警报标记,保证下一次信号能正常触发新的延迟警报。
内容的提问来源于stack exchange,提问作者TwiMob
相关产品推荐
相关产品推荐

