如何获取满足摆动高低点条件的前第二根K线高低点?
摆动高低点指标警报问题
我制作了一款显示3K线形态摆动高低点的指标(摆动高点为中间K线高于两侧K线,摆动低点为中间K线低于两侧K线),已完成指标绘制(通过offset=-2将摆动点显示在正确的K线位置),但当前警报会在摆动高低点形态确认时就触发,而非价格突破该高低点时触发。需要解决的问题是:如何正确获取前第二根K线的高低点,并在后续价格突破时触发警报。
修改后的代码
//@version=5 indicator(title='摆动高低点警报', shorttitle='摆动高低点警报', overlay=true) // 摆动点对应的K线偏移(3K线形态下,中间K线是前第二根,所以n=2) n = input.int(title='摆动点偏移', defval=2, minval=2) // 确认摆动高点:前n根K线(中间K线)的高点高于其左右相邻K线 upFractal = high[n-1] < high[n] and high[n+1] < high[n] // 确认摆动低点:前n根K线(中间K线)的低点低于其左右相邻K线 dnFractal = low[n-1] > low[n] and low[n+1] > low[n] // 在摆动点位置绘制标记(offset=-n对应前n根K线) plotshape(upFractal, "摆动高点", shape.xcross, location.abovebar, offset=-n, color=color.new(color.red, 0)) plotshape(dnFractal, "摆动低点", shape.xcross, location.belowbar, offset=-n, color=color.new(color.red, 0)) // 存储最新的摆动高低点价格,保持值直到下一个摆动点出现 var float lastUpFractalHigh = na lastUpFractalHigh := upFractal ? high[n] : lastUpFractalHigh var float lastDnFractalLow = na lastDnFractalLow := dnFractal ? low[n] : lastDnFractalLow // 突破条件:收盘价突破存储的摆动高低点,且排除摆动点确认的那根K线 upfractalbroke = close > lastUpFractalHigh and not upFractal dnfractalbroke = close < lastDnFractalLow and not dnFractal // 设置警报 alertcondition(upfractalbroke, "突破摆动高点", "价格突破摆动高点") alertcondition(dnfractalbroke, "突破摆动低点", "价格突破摆动低点")
关键修改说明
- 正确获取前第二根K线的高低点:当
n=2时,high[n]就是前第二根K线的高点,low[n]是前第二根K线的低点,对应摆动形态的中间K线价格。通过var关键字定义的变量会保留历史值,直到下一个摆动点出现时更新。 - 调整警报触发逻辑:新增
not upFractal和not dnFractal条件,避免在摆动形态确认的那根K线触发警报,仅当后续K线收盘价突破存储的摆动高低点时才触发警报。
内容的提问来源于stack exchange,提问作者Gabrielius Davlijevas
相关产品推荐
相关产品推荐

