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

Pine Script实现多标的条件筛选及邮件/Telegram告警咨询

多标的批量扫描筛选+新标的告警实现方案

原有代码核心缺陷

  • 仅对比相邻Bar符合条件标的的数组大小,无法识别「数组长度不变但标的发生替换」的场景,会漏判新入选标的
  • 未持久化存储上一Bar的完整标的列表,无法做精准的差集比对
  • 每根Bar重复新建展示标签,会造成图表元素堆叠冗余
  • security()函数未指定无未来函数参数,回测和实盘信号会出现偏差
  • 未对接告警触发逻辑,无法实现消息推送
  • 未做K线收盘状态判断,盘中实时价格跳动会导致信号反复、误触发提醒

实现逻辑

  • 用var修饰的持久化数组,存储上一根已收盘K线的全部符合条件标的
  • 遍历待扫描标的列表,通过无未来函数的security()调用获取各标的在指定周期的条件匹配结果,生成本Bar的符合条件标的数组
  • 仅在K线收盘确认后,对比两个数组的差集,提取本Bar新入选的标的
  • 存在新入选标的时,调用alert()函数推送消息,消息内携带新标的名称、触发周期、时间信息,可直接绑定TradingView支持的邮件、Telegram、Webhook等推送渠道
  • 复用单个标签更新展示内容,避免图表元素冗余

修正后可直接运行的代码

//@version=4
study("Multi-Ticker Scanner Alert", overlay=false, shorttitle="Scanner")

// ———— 基础配置 ————
rsiLength = 14
rsiThreshold = 40
scanTimeframe = '15'
// 待扫描标的列表,可自行增减,标的名称需与TradingView代码完全一致
tickerList = array.new_string(4)
array.set(tickerList, 0, "CIMSA")
array.set(tickerList, 1, "SASA")
array.set(tickerList, 2, "THYAO")
array.set(tickerList, 3, "SISE")

// ———— 跨Bar持久化变量 ————
var string[] prevMatchedTickers = array.new_string(0) // 存储上一收盘Bar符合条件的标的
var label displayLabel = label.new(na, na, "", color=color.green, textcolor=color.white, style=label.style_label_left)
string[] currentMatchedTickers = array.new_string(0) // 当前Bar符合条件的标的
string[] newAddedTickers = array.new_string(0) // 本Bar新入选的标的

// ———— 自定义筛选条件,可按需修改内部逻辑 ————
filterCondition() =>
    rsiVal = rsi(close, rsiLength)
    rsiVal > rsiThreshold

// ———— 遍历扫描所有标的 ————
for i = 0 to array.size(tickerList) - 1
    ticker = array.get(tickerList, i)
    // 无未来函数调用多标的多周期数据
    isMatch = security(ticker, scanTimeframe, filterCondition(), gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off)
    if isMatch
        array.push(currentMatchedTickers, ticker)

// ———— 收盘后比对信号、触发告警 ————
if barstate.isconfirmed
    // 差集计算:提取当前有、上一期没有的新标的
    for i = 0 to array.size(currentMatchedTickers) - 1
        curTicker = array.get(currentMatchedTickers, i)
        if not array.includes(prevMatchedTickers, curTicker)
            array.push(newAddedTickers, curTicker)
    
    // 存在新标的时触发告警
    if array.size(newAddedTickers) > 0
        alertContent = "新符合筛选条件标的:" + array.join(newAddedTickers, ", ") + "\n扫描周期:" + scanTimeframe + "\n触发时间:" + tostring(time)
        alert(alertContent, alert.freq_once_per_bar_close)
    
    // 更新历史匹配列表,供下一根Bar比对
    prevMatchedTickers := array.copy(currentMatchedTickers)

// ———— 更新图表展示内容 ————
labelContent = "当前符合条件标的:\n" + array.join(currentMatchedTickers, "\n")
label.set_xy(displayLabel, bar_index, low)
label.set_text(displayLabel, labelContent)

// 绘制当前匹配标的数量曲线
plot(array.size(currentMatchedTickers), title="匹配标的数量", color=color.blue, linewidth=2)

使用说明

  • 可在tickerList数组中自行增删需要扫描的股票、加密货币标的
  • 可修改filterCondition()函数内部逻辑,替换为自定义的交易筛选规则
  • 脚本加载到图表后,点击TradingView右上角告警按钮,告警条件选择「脚本触发alert()函数」,推送渠道勾选邮件、Telegram即可完成推送配置,新标的满足条件时会自动发送提醒
  • 所有信号判断均在K线收盘后执行,不会出现盘中信号反复、重复推送的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:06:27