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

TradingView Pine Script如何实现每30秒发告警避免重复触发

Pine Script 固定30秒单次告警实现方案

原有代码的核心问题

  • 时间单位错误:timenow返回的是毫秒级Unix时间戳,直接对30取模是按30毫秒做时间切分,和预期的30秒间隔差了1000倍
  • 无触发锁机制:实时行情下脚本会随每一笔成交tick重复执行,只要时间落在判断区间内,每一个tick都会触发一次告警,自然会出现同一时间发2-3条重复消息的问题
  • 逻辑判断矛盾:修改后的判断条件timenow % 30 <= 5 and timenow % 30 >= 25本身不存在成立的数值区间(模30的返回值范围是0-29,没有数能同时小于等于5且大于等于25),实际触发完全是跨时间边界时的随机命中,稳定性极差

可直接使用的正确代码

核心逻辑是通过持久化变量记录上一次告警的周期标记,每个30秒周期内仅允许触发一次告警:

//@version=5
indicator(title='30秒固定间隔告警', overlay=false)
// 持久化存储上一次触发告警的周期起始时间,脚本重载前不会重置
var last_trigger_period = 0
// 计算当前时间所属30秒周期的起始时间戳(毫秒)
current_period = timenow - (timenow % 30000)

// 进入新的30秒周期时才触发告警
if current_period != last_trigger_period
    alert('raise some alert', freq=alert.freq_all)
    // 更新标记为当前周期,本周期内后续所有tick都不会重复触发
    last_trigger_period := current_period

代码说明

  • var关键字修饰的变量只会在脚本首次加载时初始化一次,后续每次tick执行都会保留上一次的赋值结果,适合做跨执行周期的状态标记
  • 用周期起始时间作为判断依据,不需要卡精确的时间点,只要进入新周期的第一个tick触发告警后,后续同周期的所有tick都会被拦截,从根源上避免重复发送
  • 如果需要调整告警间隔,直接修改模运算的毫秒值即可:1分钟间隔用60000,5分钟间隔用300000,1小时间隔用3600000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:27:30