RSI高于70后首次跌破70的K线检测代码故障求助
问题排查与修正:RSI超买后首次跌破70的K线检测
原代码问题分析
原代码逻辑完全偏离需求,核心问题有两点:
- 错误地在RSI高于70时计算
barssince(rsiValue > overboughtLevel),这只会输出距离当前最近一次RSI超买的K线数,和“超买后首次跌破70”的检测目标无关 - 未跟踪“是否进入过超买区间”的状态,无法识别跌破70的K线是否是超买后的首次回落
修正后的代码
//@version=4 study(title="First Bar Below 70 after RSI > 70", shorttitle="First Bar Below 70") length = input(14, title="RSI Length") overboughtLevel = input(70, title="Overbought Level") rsiValue = rsi(close, length) // 跟踪是否处于超买状态的持久化变量 var bool inOverbought = false // 标记目标K线的变量 firstBarBelow70 = false // 更新超买状态:RSI高于70时标记为已进入超买 if rsiValue > overboughtLevel inOverbought := true // 触发条件:处于超买状态且当前RSI跌破70,标记目标K线并重置状态 else if inOverbought and rsiValue < overboughtLevel firstBarBelow70 := true inOverbought := false // 在目标K线下方绘制可视化标记 plotshape(firstBarBelow70, title="First Below 70", location=location.belowbar, color=color.green, style=shape.labelup, text="FIRST BELOW 70") // 可选:绘制RSI曲线和超买水平线辅助观察 plot(rsiValue, color=color.blue, title="RSI") hline(overboughtLevel, "Overbought", color=color.red)
逻辑说明
- 用
var关键字定义inOverbought,确保变量在脚本运行期间保持状态,不会随K线刷新重置 - 当RSI突破70时,标记进入超买区间;当RSI从超买区间回落至70以下时,触发首次跌破标记,并重置超买状态避免重复触发
- 通过
plotshape生成可视化标记,直观定位目标K线
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

