如何避免图表中三个同时触发的背离信号图标重叠?
解决背离信号图标重叠的方案(以Pine Script为例)
核心思路
给每个信号设置偏移量,通过水平或垂直方向的错位,实现图标并排展示,避免重叠。
1. 水平偏移(横向并排)
在绘制图标时,给不同信号设置不同的offset参数,让图标依次右移:
- 第一个信号无偏移,第二个右移1根K线,第三个右移2根K线,确保同时触发时横向排列。
示例代码:
//@version=5 indicator("背离信号", overlay=true) // 模拟三个背离信号触发条件 signal1 = ta.crossover(ta.rsi(close, 14), 30) signal2 = ta.crossover(ta.macd(close)[1], ta.signal(close)[1]) signal3 = ta.crossover(ta.stoch(close, high, low, 14), 20) // 绘制带水平偏移的信号图标 plotshape(signal1, title="信号1", location=location.belowbar, color=color.green, style=shape.labelup, text="S1", offset=0) plotshape(signal2, title="信号2", location=location.belowbar, color=color.blue, style=shape.labelup, text="S2", offset=1) plotshape(signal3, title="信号3", location=location.belowbar, color=color.orange, style=shape.labelup, text="S3", offset=2)
2. 垂直偏移(纵向并排)
若不想占用额外K线空间,可基于K线价格设置垂直偏移,利用ATR指标动态计算间距,适配不同波动品种:
示例代码:
//@version=5 indicator("背离信号", overlay=true) signal1 = ta.crossover(ta.rsi(close, 14), 30) signal2 = ta.crossover(ta.macd(close)[1], ta.signal(close)[1]) signal3 = ta.crossover(ta.stoch(close, high, low, 14), 20) atr_val = ta.atr(14) // 用ATR动态计算偏移幅度 // 绘制带垂直偏移的信号图标 plotshape(signal1, title="信号1", location=location.belowbar, color=color.green, style=shape.labelup, text="S1") plotshape(signal2, title="信号2", y=close - atr_val*0.2, color=color.blue, style=shape.labelup, text="S2") plotshape(signal3, title="信号3", y=close - atr_val*0.4, color=color.orange, style=shape.labelup, text="S3")
3. 合并信号(简化展示)
如果不需要单独显示每个图标,可将同时触发的信号合并成一个标注,减少视觉干扰:
示例代码:
//@version=5 indicator("背离信号", overlay=true) signal1 = ta.crossover(ta.rsi(close, 14), 30) signal2 = ta.crossover(ta.macd(close)[1], ta.signal(close)[1]) signal3 = ta.crossover(ta.stoch(close, high, low, 14), 20) // 生成合并信号文本 signal_text = "" if signal1 and signal2 and signal3 signal_text := "S1+S2+S3" elif signal1 and signal2 signal_text := "S1+S2" elif signal1 and signal3 signal_text := "S1+S3" elif signal2 and signal3 signal_text := "S2+S3" elif signal1 signal_text := "S1" elif signal2 signal_text := "S2" elif signal3 signal_text := "S3" // 绘制合并后的信号图标 plotshape(signal1 or signal2 or signal3, title="合并信号", location=location.belowbar, color=color.red, style=shape.labelup, text=signal_text)
内容的提问来源于stack exchange,提问作者Anastasiia
相关产品推荐
相关产品推荐

