You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

代码说明

  1. 时间差计算:timenow是当前的毫秒级时间戳,用它减去信号触发时记录的lastBuySignalTime,得到的差值就是信号触发后过去的时长,和设定的delay对比就能准确判断是否达到延迟要求。
  2. 状态标记:buyDelayAlertSent这类变量确保同一信号只会触发一次延迟警报,不会在后续K线持续重复触发。
  3. 标记重置:每次原信号触发时,重置对应的延迟警报标记,保证下一次信号能正常触发新的延迟警报。

内容的提问来源于stack exchange,提问作者TwiMob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:47:20