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

PineScript问题:kRSI<20启动双指标上涨绿色背景条序列起始位置异常

问题原因分析
  • 原有逻辑中emSubida的状态切换存在边界判断漏洞,且未明确标记序列启动/终止的状态流转,部分极端行情下会跳过kRSI<20的启动校验直接触发背景绘制,同时变量用float类型结合na判断状态容易出现预期外的判空误差。
  • 缺失可调整参数的明确定义,也会导致部分版本的Pine Script运行时出现变量未声明的异常,进一步干扰逻辑判断。
修正后完整代码
//@version=4
study("Stoch RSI+OBV 上涨背景标记", overlay=false)
// 可调整参数定义
lengthRSI = input.int(14, minval=1, title="RSI周期")
lengthStoch = input.int(14, minval=1, title="Stoch周期")
smoothK = input.int(3, minval=1, title="K线平滑周期")

rsi0 = rsi(close, lengthRSI)    
rsi1 = rsi0[1]    
kRSI = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)    
pRSI=plot(kRSI, "StochRSI", color=color.red, linewidth = 2 )  
hline(20, "超卖线", color=color.gray, linestyle=hline.style_dashed)

obv0 = cum(sign(change(close)) * volume)    
obv1 = obv0[1]    
kOBG = sma(stoch(obv1, obv1, obv1, lengthStoch), smoothK)    
pOBV=plot(kOBG, "StochOBV", color=color.lime, linewidth = 2 )    

var bool emSubida = false
// 先判断终止条件:任意指标不再上涨就结束当前背景序列
if emSubida
    emSubida := (kRSI > kRSI[1]) and (kOBG > kOBG[1])
// 再判断启动条件:当前无运行中的背景序列、两个指标同时上涨、kRSI小于20三个条件同时满足才启动
else
    emSubida := (kRSI < 20) and (kRSI > kRSI[1]) and (kOBG > kOBG[1])

bgcolor(emSubida ? color.new(color.green, 80) : na)
修改点说明
  • 将状态变量emSubida替换为bool类型,逻辑判断更清晰,避免na值带来的判空误差。
  • 明确拆分了序列终止、序列启动两个判断分支,保证每一段新的背景序列启动时,必然会校验kRSI<20的前提条件。
  • 补充了参数定义块和20水位参考虚线,方便调整参数和对照启动位置。
  • 优化了绿色背景透明度,避免遮挡指标线条,可根据显示需求调整透明度数值(0为完全不透明,100为完全透明)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:03