You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何添加复选框控制RSI极端值仅显示首个标签并修复超买标签异常

问题修复方案

问题根源

你的代码存在三个核心逻辑错误:

  1. 标签创建逻辑完全颠倒:无论是否勾选"仅显示第一根标签",只要RSI在极端区间内就会创建标签——勾选时第一次走if分支,后续走else分支仍会创建标签,根本没实现"仅显示第一根"的效果。
  2. 标记变量未重置:用var声明的is_os_first_lbl_created/is_ob_first_lbl_created在RSI离开区间后不会自动重置,导致后续再次进入区间时,无法触发第一根K线的标签创建。
  3. 未判断穿越动作:仅判断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)

代码说明

  1. 穿越判断:用ta.crossunder(RSI从上方跌破超卖阈值)和ta.crossover(RSI从下方突破超买阈值)精准识别"进入极端区间"的动作。
  2. 标签创建逻辑:
    • 勾选"仅显示第一根标签"时:仅在RSI穿越进入区间的那根K线创建标签。
    • 未勾选时:只要RSI处于极端区间内,每根K线都创建标签。

内容的提问来源于stack exchange,提问作者RobertK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:52:33