如何用TradingView Pine代码拆分RSI的Y轴,分区域展示正负成交量RSI
实现拆分RSI Y轴的Pine Script方案
可以通过对RSI值进行区间映射来实现需求,核心思路是根据成交量的放量/缩量状态,将原RSI分别映射到Y轴的50-100和0-50区间。以下是完整代码及说明:
完整代码
//@version=5 indicator("成交量拆分RSI", overlay=false, shorttitle="Vol-Split RSI", precision=2) // 配置参数 rsiLength = input.int(14, title="RSI周期") volLookback = input.int(1, title="成交量对比周期", tooltip="对比当前与N期前的成交量") rsiSource = input(close, title="RSI计算标的") // 计算核心指标 rsiValue = ta.rsi(rsiSource, rsiLength) // 计算成交量差值(正为放量,负为缩量,可根据需求修改判断逻辑) volDelta = volume - volume[volLookback] // 区间映射处理 splitRsi = if volDelta > 0 // 正成交量:将0-100的RSI映射到50-100 50 + (rsiValue / 2) else // 负成交量:将0-100的RSI映射到0-50 rsiValue / 2 // 绘图设置 plot(splitRsi, color=color.new(volDelta > 0 ? color.green : color.red, 0), linewidth=2) hline(50, "中间线", color=color.gray, linestyle=hline.style_dashed) // 强制Y轴范围为0-100 indicator.set_yaxis_lower(0) indicator.set_yaxis_upper(100)
关键逻辑说明
- 成交量状态判断:代码中用
volume - volume[volLookback]判断放量/缩量,你也可以根据需求修改,比如和成交量均线对比:volume > ta.sma(volume, 20),只需替换volDelta > 0的条件即可。 - 区间映射:
- 正成交量时,原RSI(0-100)通过
50 + (rsiValue/2)转换为50-100区间,比如原RSI=100对应100,原RSI=0对应50。 - 负成交量时,原RSI通过
rsiValue/2转换为0-50区间,原RSI=100对应50,原RSI=0对应0。
- 正成交量时,原RSI(0-100)通过
- 无需额外调整:由于RSI本身是标准化的0-100刻度,映射后无需针对不同标的或时间周期手动调整Y轴,解决了你之前用SMA的痛点。
自定义调整建议
如果你的“正成交量”定义不是放量,而是其他逻辑(比如与价格涨跌关联的成交量),只需修改volDelta的计算或判断条件即可。例如,要区分上涨K线的成交量和下跌K线的成交量:
isUpClose = close > open volDelta = isUpClose ? volume : -volume
内容的提问来源于stack exchange,提问作者E G
相关产品推荐
相关产品推荐

