TradingView自定义RSI指标PineScript警报无法触发问题求助
问题排查结果
你的脚本警报无法触发是以下几个问题共同导致的:
- 变量逻辑不一致:你手动实现了RSI计算逻辑存入
rsi变量,后续又调用内置rsi()函数重复计算存入rsiValue变量,警报条件使用rsiValue,但图表绘制的是rsi,虽然理论上数值一致,但会增加调试成本,也存在隐式计算误差风险。 - 超买超卖阈值不统一:你定义了可自定义的
overbought/oversold输入参数,但绘制超买超卖线时直接写死了70、30的数值,如果你修改过输入参数的阈值,图表上显示的交叉和实际警报判断的交叉会完全不匹配,导致你以为条件满足实际并未触发。 - 警报设置和脚本逻辑不匹配:你在警报条件里加了
barstate.isconfirmed限制,要求K线完全收盘后才判定条件成立,如果你在TradingView创建警报时,触发时机选了「每笔Tick」或「K线闭合前」,该条件永远无法满足,警报自然不会触发。
修正后的完整代码
//@version=4 study(title="相对强弱指数警报版", shorttitle="RSI_Alert", format=format.price, precision=2, resolution="") // 参数设置 len = input(10, minval=1, title="计算周期") src = input(close, "计算源", type = input.source) overbought = input(title="超买阈值",defval=70) oversold = input(title="超卖阈值",defval=30) // RSI计算(统一使用内置函数,和原生指标逻辑完全一致) rsiValue = rsi(src, len) // 警报条件:脱离超买/超卖区间时触发 rsiOverbought = barstate.isconfirmed and crossunder(rsiValue, overbought) rsiOversold = barstate.isconfirmed and crossover(rsiValue, oversold) // 调试标记:可直观在图表上看到条件触发位置,调试完成后可注释 plotshape(rsiOverbought, title="超买脱离信号", location=location.belowbar, color=color.red, style=shape.labelup, text="超买脱离", size=size.small) plotshape(rsiOversold, title="超卖脱离信号", location=location.abovebar, color=color.green, style=shape.labeldown, text="超卖脱离", size=size.small) // 警报定义 alertcondition(rsiOverbought, title = "RSI脱离超买区间", message = "{{ticker}} RSI脱离超买区间,当前收盘价{{close}}") alertcondition(rsiOversold, title = "RSI脱离超卖区间", message = "{{ticker}} RSI脱离超卖区间,当前收盘价{{close}}") // 绘制指标 plot(rsiValue, "RSI", color=#7E57C2) band1 = hline(overbought, "超买线", color=#787B86) bandm = hline(50, "中界线", color=color.new(#787B86, 50)) band0 = hline(oversold, "超卖线", color=#787B86) fill(band1, band0, color=color.rgb(126, 87, 194, 90), title="背景填充")
后续操作注意事项
- 创建警报时,触发时机必须选择「K线闭合时」,和脚本中
barstate.isconfirmed的逻辑匹配 - 如果需要实时触发(不等K线收盘),删掉条件里的
barstate.isconfirmed即可,此时创建警报可以选择「每笔Tick」触发
内容的提问来源于stack exchange,提问作者Paul Cas
相关产品推荐
相关产品推荐

