TradingView中如何在同一窗口显示双刻度的ATR与RSI指标?
解决Pine Script中ATR与RSI同窗口显示的问题
你遇到的核心问题是两个指标数值范围差异过大,导致同窗口显示时其中一个被挤压无法正常展示。这里提供两种实用解决方案:
方案一:将ATR归一化到0-100区间
把ATR的原始值映射到和RSI一致的0-100范围,这样两者就能在同一坐标轴下正常显示,适合需要直观对比相对波动幅度的场景。
代码示例
//@version=5 indicator("ATR + RSI 归一化版", overlay=false) // 自定义参数 rsi_length = input.int(14, "RSI周期") atr_length = input.int(14, "ATR周期") // 计算原始指标值 rsi_val = ta.rsi(close, rsi_length) atr_val = ta.atr(atr_length) // 归一化ATR到0-100区间 normalized_atr = ta.normalize(atr_val, 0, 100) // 绘制指标 plot(rsi_val, color=color.new(color.blue, 0), title="RSI", linewidth=2) plot(normalized_atr, color=color.new(color.red, 0), title="归一化ATR", linewidth=2) // 添加RSI关键水平参考线 hline(70, "超买线", color=color.red, linestyle=hline.style_dashed) hline(30, "超卖线", color=color.green, linestyle=hline.style_dashed)
注意:归一化后的ATR仅保留相对波动的参考意义,失去了原始数值的实际幅度含义。
方案二:使用子窗口分开显示
利用Pine Script的子窗口功能,让ATR和RSI分别在独立的子窗口中展示,各自使用专属坐标轴,完美保留原始数值的同时满足独立窗口需求。
代码示例
//@version=5 indicator("ATR + RSI 子窗口版", overlay=false) // 自定义参数 rsi_length = input.int(14, "RSI周期") atr_length = input.int(14, "ATR周期") // 计算原始指标值 rsi_val = ta.rsi(close, rsi_length) atr_val = ta.atr(atr_length) // 绘制RSI在默认子窗口 plot(rsi_val, color=color.new(color.blue, 0), title="RSI", linewidth=2) hline(70, "超买线", color=color.red, linestyle=hline.style_dashed) hline(30, "超卖线", color=color.green, linestyle=hline.style_dashed) // 绘制ATR在新的子窗口 plot(atr_val, color=color.new(color.red, 0), title="ATR", linewidth=2, display=display.data_window)
如果需要更灵活的子窗口控制(比如调整顺序、高度),可以用subplot()函数明确指定:
// 定义两个子窗口 rsi_sub = subplot("RSI窗口", display=display.data_window) atr_sub = subplot("ATR窗口", display=display.data_window) // 指定指标所属子窗口 plot(rsi_val, color=color.blue, title="RSI", subplot=rsi_sub) plot(atr_val, color=color.red, title="ATR", subplot=atr_sub)
推荐方案:优先选择子窗口方案,既能满足独立窗口的需求,又能完整保留两个指标的原始数值含义,实用性更强。
内容的提问来源于stack exchange,提问作者Rui Brandao
相关产品推荐
相关产品推荐

