编写日内新高/新低警报脚本遇重绘问题,咨询脚本可行性
你的日内新高/新低警报脚本存在重绘问题,不可直接使用
原脚本的核心问题在于日内高低点的更新逻辑错误,以及未处理当前未完成K线的价格波动,导致严重的重绘:
- 你用
is_first初始化每日高低点,但is_first仅指代脚本运行后的第一根K线,而非每个交易日的第一根K线,这会导致跨交易日的高低点混乱。 - 在非新K线(
barstate.isnew为false)的阶段,当前K线的high/low还在实时变动,脚本会不断更新day_high/day_low,这会让历史上的警报信号随着当前K线的价格变化而被修改,也就是重绘。 booleanhigh/booleanlow没有重置逻辑,一旦触发后会持续保持true,可能引发重复警报或错误的信号延续。
修正后的无重绘脚本
//@version=5 indicator("无重绘日内高低点警报", overlay=true) // 识别新交易日的开始 new_day = ta.change(time("D")) != 0 // 计算日内高低点(仅在新交易日初始化,后续取历史值+当前已确认K线的极值) var float day_high = na var float day_low = na if new_day day_high := high day_low := low else // 仅使用已确认K线的价格更新,避免当前未完成K线的波动 if barstate.isconfirmed day_high := math.max(day_high[1], high) day_low := math.min(day_low[1], low) // 判断是否触发新高低点(仅在K线确认后) booleanhigh = barstate.isconfirmed and high > day_high[1] booleanlow = barstate.isconfirmed and low < day_low[1] // 警报条件 alertcondition(booleanhigh, title="日内新高警报", message="触发New HOD") alertcondition(booleanlow, title="日内新低警报", message="触发New LOD") // 可选:在图表上标记高低点 plotshape(booleanhigh, title="HOD", location=location.belowbar, color=color.green, style=shape.labelup, text="HOD") plotshape(booleanlow, title="LOD", location=location.abovebar, color=color.red, style=shape.labeldown, text="LOD")
关键修正说明
- 使用
time("D")判断新交易日,确保每日高低点正确初始化。 - 加入
barstate.isconfirmed限制,仅在K线完全闭合后更新高低点和触发警报,彻底避免当前未完成K线导致的重绘。 - 用
var声明day_high/day_low,确保变量值在脚本运行期间持续保留,无需每次重新赋值。 - 重置了警报触发的判断逻辑,确保每个K线周期仅在确认突破时触发一次信号,不会持续触发。
内容的提问来源于stack exchange,提问作者TheDude
相关产品推荐
相关产品推荐

