为何line.new()与linefill.new()绘制层级(zorder)异常,覆盖plot内容?
解决Pine Script中line/linefill覆盖plot内容的问题
在Pine Script里,line、linefill这类绘图对象的默认层级天生高于plot()和fill()生成的元素,哪怕开启option explicit_plot_zorder = true也没用——这个参数只负责控制plot之间的层级排序,管不到绘图对象和plot的层级关系。
给你三个实用的解决办法:
1. 把plot提至数据窗口层级并设置zorder
给plot添加display = display.data_window参数,让它和line/linefill处于同一层级,再通过zorder给plot设更高的数值,就能让plot显示在上面。示例代码:
plot(wt1, color = color.new(green, 35), style = plot.style_line, linewidth = 1, display = display.data_window, zorder = 10)
(绘图对象默认zorder为0,只要plot的zorder数值更大,就能覆盖它们)
2. 用plot替代line.new()实现线条
如果你的线条不需要频繁动态修改坐标(比如固定长度、简单延伸),直接用plot绘制线条更省心,还能正常通过zorder控制层级。比如把原来的baseLine改成:
// 模拟baseLine的plot实现 var float basePlotVal = na if not na(startPrice) basePlotVal := startPrice[bar_index - (bar_index - length + 1)] // 对应line的xy1坐标逻辑 plot(basePlotVal, title="BaseLine", color=color.new(baseColor, baseTransparency), linewidth=line_width, style=plot.style_line, extend=extendStyle, zorder=1)
3. 调高linefill的透明度(应急方案)
如果只是不想完全遮挡plot,直接给linefill的颜色加更高的透明度,让下面的plot内容透出来:
linefill.new(upper, baseLine, color = color.new(fillColor, 80)) // 透明度数值越大,填充越透明
关键提醒
explicit_plot_zorder仅对plot()和fill()的层级生效,对line、linefill、box这类绘图对象完全不适用,别浪费时间在这个参数上。
内容的提问来源于stack exchange,提问作者CrHasher
相关产品推荐
相关产品推荐

