如何设置HMA指标仅在颜色切换时触发买卖警报?
解决HMA指标仅在颜色切换时触发警报的问题
需求:HMA指标从红色切换为绿色时触发买入警报,从绿色切换为红色时触发卖出警报。当前代码会在每根红绿K线都触发警报,需要修改为仅在颜色变化时触发。
原代码
//@version=2 study(title="HMA Colored", overlay=true) func_hma(style, length)=> return = wma((2 * wma(style, length / 2)) - wma(style, length), round(sqrt(length))) shortPeriod = input(100, title="HMA") shortHMA = func_hma(close, shortPeriod) current = shortHMA[0] prev = shortHMA[1] long= current > prev short= current < prev plotshape(long, style=shape.triangleup, location=location.belowbar, size=size.tiny, title="buy" ) plotshape(short, style=shape.triangledown, location=location.abovebar, size=size.tiny, title="sell") plot(shortHMA, color=current > prev ? green : red, linewidth=2, title="HMA") alertcondition(long, title="Buy", message="green buy") alertcondition(sell, title="Sell", message="red sell")
修改后的代码
//@version=2 study(title="HMA Colored", overlay=true) func_hma(style, length)=> return = wma((2 * wma(style, length / 2)) - wma(style, length), round(sqrt(length))) shortPeriod = input(100, title="HMA") shortHMA = func_hma(close, shortPeriod) current = shortHMA[0] prev = shortHMA[1] prev_prev = shortHMA[2] // 取前前一根K线的HMA值,用于判断状态变化 // 判断从下跌转为上涨(红转绿) long_switch = current > prev and prev <= prev_prev // 判断从上涨转为下跌(绿转红) short_switch = current < prev and prev >= prev_prev // 仅在切换时显示信号形状 plotshape(long_switch, style=shape.triangleup, location=location.belowbar, size=size.tiny, title="buy" ) plotshape(short_switch, style=shape.triangledown, location=location.abovebar, size=size.tiny, title="sell") plot(shortHMA, color=current > prev ? green : red, linewidth=2, title="HMA") // 仅在状态切换时触发警报 alertcondition(long_switch, title="Buy", message="HMA从红转绿,触发买入") alertcondition(short_switch, title="Sell", message="HMA从绿转红,触发卖出")
核心修改点
- 新增
prev_prev变量,获取前前一根K线的HMA值,用来对比前一根的趋势状态,确认是否发生趋势切换 - 重新定义触发条件:
long_switch:当前HMA向上,且前一根HMA处于下跌/走平状态,即完成红到绿的切换short_switch:当前HMA向下,且前一根HMA处于上涨/走平状态,即完成绿到红的切换
- 将信号形状和警报的触发逻辑,从原有的「当前趋势状态」改为「趋势切换状态」,确保仅在颜色变化时触发
- 修正原代码中
alertcondition里的变量错误(原代码误写为sell,实际定义的是short)
内容的提问来源于stack exchange,提问作者myung kim
相关产品推荐
相关产品推荐

