如何消除Pine Script自定义K线图中的空白间隙?
解决TradingView Pine Script v5指标空白间隙问题
我编写了TradingView的Pine Script v5指标,逻辑是仅当K线突破前一根关键K线的高点或低点时才显示该K线,核心需求已实现,但图表出现空白间隙。尝试使用plothandle但无法在if结构内生效,求助消除这些空白间隙的方法。原代码如下:
//@version=5 indicator("True Movement Price") CandleColor = close >= open ? color.rgb(0, 188, 212, 0) : color.rgb(0, 96, 100, 0) WickcolorColor = close >= open ? color.rgb(0, 188, 212, 0) : color.rgb(0, 96, 100, 0) BorderColor = close >= open ? color.rgb(0, 188, 212, 0) : color.rgb(0, 96, 100, 0) var key = false var PLow = low var PHigh = high var PClose = close var POpen = open if high > PHigh or low < PLow key := true PLow := low PHigh := high PClose := close POpen := open else key := false plotcandle(key ? POpen : na, key ? PHigh : na, key ? PLow : na, key ? PClose : na, color = CandleColor, bordercolor = BorderColor, wickcolor = WickcolorColor)
问题原因
原代码用na隐藏不满足条件的K线,这会导致对应位置没有绘制内容,自然出现空白间隙。要解决这个问题,不能用na,而是让不满足条件的K线继承上一根有效K线的价格数据,保持图表连续。
修改后的代码
//@version=5 indicator("True Movement Price", overlay=true) // 颜色设置(原代码alpha为0是全透明,如需显示颜色可调整最后一个参数) CandleColor = close >= open ? color.rgb(0, 188, 212, 0) : color.rgb(0, 96, 100, 0) WickcolorColor = close >= open ? color.rgb(0, 188, 212, 0) : color.rgb(0, 96, 100, 0) BorderColor = close >= open ? color.rgb(0, 188, 212, 0) : color.rgb(0, 96, 100, 0) // 初始化关键K线价格变量 var float PLow = low var float PHigh = high var float PClose = close var float POpen = open // 仅当当前K线突破前高/前低时更新关键价格 if high > PHigh or low < PLow PLow := low PHigh := high PClose := close POpen := open // 直接绘制维护的关键价格,每根K线都有数据,无空白间隙 plotcandle(POpen, PHigh, PLow, PClose, color=CandleColor, bordercolor=BorderColor, wickcolor=WickcolorColor)
关键改动说明
- 移除了
key变量和na判断:不再隐藏K线,而是让每根K线都使用上一次更新的关键价格数据,确保图表连续 - 保留核心逻辑:只有当K线突破前高/前低时,才更新关键价格变量,保证显示的K线符合需求
- 添加
overlay=true:让指标叠加在主图上,更符合常规使用习惯(可根据需求移除)
内容的提问来源于stack exchange,提问作者Death's Head
相关产品推荐
相关产品推荐

