如何添加复选框控制RSI极端值仅显示首个标签并修复超买标签异常
问题修复方案
问题根源
你的代码存在三个核心逻辑错误:
- 标签创建逻辑完全颠倒:无论是否勾选"仅显示第一根标签",只要RSI在极端区间内就会创建标签——勾选时第一次走if分支,后续走else分支仍会创建标签,根本没实现"仅显示第一根"的效果。
- 标记变量未重置:用
var声明的is_os_first_lbl_created/is_ob_first_lbl_created在RSI离开区间后不会自动重置,导致后续再次进入区间时,无法触发第一根K线的标签创建。 - 未判断穿越动作:仅判断RSI是否在区间内,没识别"从区间外穿越到区间内"的关键动作,不符合需求中"进入极端区间并穿越阈值"的要求。
修复后的完整代码
RSIPeriod = input.int(14, title = 'RSI周期', step = 1, minval = 1) RSISource = input(title = 'RSI数据源', defval = close) OS = input.int(30, title = '超卖阈值', maxval = 100, minval = 1, step = 1) OB = input.int(70, title = '超买阈值', maxval = 100, minval = 1, step = 1) in_show_first = input.bool(false, "仅显示穿越区间的第一根K线标签") RSI = ta.rsi(RSISource, RSIPeriod) // 判断RSI是否从区间外穿越进入超买/超卖区间 cross_in_os = ta.crossunder(RSI, OS) // 从上方穿越进入超卖 cross_in_ob = ta.crossover(RSI, OB) // 从下方穿越进入超买 // 超卖标签逻辑 if cross_in_os or (not in_show_first and RSI <= OS) label.new(bar_index, na, str.tostring(int(RSI)), color = color.lime, textcolor = color.black, style = label.style_label_up, size = size.small, yloc = yloc.belowbar) // 超买标签逻辑 if cross_in_ob or (not in_show_first and RSI >= OB) label.new(bar_index, na, str.tostring(int(RSI)), color = color.red, textcolor = color.white, style = label.style_label_down, size = size.small, yloc = yloc.abovebar)
代码说明
- 穿越判断:用
ta.crossunder(RSI从上方跌破超卖阈值)和ta.crossover(RSI从下方突破超买阈值)精准识别"进入极端区间"的动作。 - 标签创建逻辑:
- 勾选"仅显示第一根标签"时:仅在RSI穿越进入区间的那根K线创建标签。
- 未勾选时:只要RSI处于极端区间内,每根K线都创建标签。
内容的提问来源于stack exchange,提问作者RobertK
相关产品推荐
相关产品推荐

