为何含重置逻辑的confirmed_signal警报满足条件后多次触发?
警报重复触发问题分析与解决
问题1:为何含重置逻辑的警报在满足触发条件后多次触发?
问题2:为何alertcondition(confirmed_signal, title="Price crosses upper range with confirmation", message="Price has crossed the upper range with confirmation")在满足条件后多次触发?
我使用lower_range_confirmed作为价格突破上轨时的警报确认条件,要求第二次做空触发前,价格必须先回到下轨(离场位)并完成确认。
代码片段
var lower_range_confirmed = false if close < offset1 lower_range_confirmed := true // 带确认的第二个VWAP(上轨)警报条件 price2 = close confirmed_signal = price2 > offset2 and lower_range_confirmed alertcondition(confirmed_signal, title="Price crosses upper range with confirmation", message="Price has crossed the upper range with confirmation") // 下轨触发后重置确认标志 if confirmed_signal lower_range_confirmed := false
问题原因
alertcondition默认行为:该函数默认会在每根满足条件的K线都触发一次警报,而非仅在条件首次成立时触发。只要confirmed_signal连续多根K线为真,警报就会重复触发。- 缺乏首次触发判断:当前代码仅判断
close > offset2,没有区分价格是首次突破上轨还是持续处于上轨上方。即使重置了lower_range_confirmed,后续价格若再次回到下轨(触发lower_range_confirmed := true)且同时处于上轨上方,警报仍会重复触发。
解决方法
要实现「仅在价格首次突破上轨且满足下轨确认条件时触发一次警报」,需将触发条件修改为检测价格突破上轨的交叉信号:
var lower_range_confirmed = false if close < offset1 lower_range_confirmed := true // 修改为检测价格从下往上突破上轨的交叉信号 confirmed_signal = ta.crossover(close, offset2) and lower_range_confirmed alertcondition(confirmed_signal, title="Price crosses upper range with confirmation", message="Price has crossed the upper range with confirmation") if confirmed_signal lower_range_confirmed := false
关键改动说明
- 用
ta.crossover(close, offset2)替代close > offset2:该函数仅在当前K线收盘价从低于offset2变为高于offset2时返回true,确保警报仅在突破发生的那根K线触发一次,不会在价格持续处于上轨上方时重复触发。 - 保留原
lower_range_confirmed确认逻辑:确保只有价格先回到下轨并完成确认后,才允许下一次突破上轨的警报触发。
内容的提问来源于stack exchange,提问作者Fred Ratty
相关产品推荐
相关产品推荐

