Pine Script 5多独立单次触发告警未生效,求问题排查
问题分析与修复
你的告警未触发主要有两个核心问题:
1. ta.cross的逻辑不符合“穿越”的完整需求
ta.cross(source1, source2)仅在source1从低于source2变为高于source2时返回true(即仅检测上穿)。如果你的“穿越”包含价格从上方跌破1.2(下穿)的场景,这个函数不会触发,直接导致告警失效。
如果需要检测双向穿越(上穿+下穿),需要同时判断ta.crossover和ta.crossunder;如果仅需要单向穿越,确保用对应函数:
ta.crossover(close, 1.2):收盘价上穿1.2ta.crossunder(close, 1.2):收盘价下穿1.2
2. alert.freq_all参数使用不当
你已经通过var变量实现了告警仅触发一次的逻辑,alert.freq_all表示每次条件满足都触发,这会和你的变量控制逻辑冗余,甚至可能因平台告警设置的冲突导致不触发。更合适的参数是alert.freq_once_per_bar_close,确保单根K线周期内仅触发一次。
修正后的代码
以下代码实现:上穿1.2触发告警1(仅一次),下穿0.8触发告警2(仅一次),你可根据需求调整穿越方向:
//@version=5 indicator("单触发多告警示例", overlay=true) var bool trigger_alert_1 = false var bool trigger_alert_2 = false // 检测收盘价上穿1.2,且未触发过告警1 if ta.crossover(close, 1.2) and not trigger_alert_1 alert("alert 01 triggered", alert.freq_once_per_bar_close) trigger_alert_1 := true // 检测收盘价下穿0.8,且未触发过告警2 if ta.crossunder(close, 0.8) and not trigger_alert_2 alert("alert 02 triggered", alert.freq_once_per_bar_close) trigger_alert_2 := true
额外注意事项
- 确保在图表的「告警设置」中启用了该脚本的告警,且触发条件选择「脚本中的条件」
- 如果需要检测**任意价格(不限于收盘价)**穿越,将
close替换为price或结合high/low判断
内容的提问来源于stack exchange,提问作者François Garcia
相关产品推荐
相关产品推荐

