我对价格图表绕过内部柱线得出的结论是,只有当后续价格蜡烛更新前一个价格蜡烛的高点或低点时,才需要显示每个后续价格蜡烛。
主要任务已经解决了,但是现在图表上有空白。
如何消除这些差距?
//@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)
plothandle 在 if 构造中不起作用,我不知道如何仅在它不为空且不会产生间隙的真实条件下执行它
要解决仅在新高或新低上绘制蜡烛时图表中的间隙问题,您可以调整方法以连续跟踪和绘制所有必要的数据点,但仅显示存在真正更新的蜡烛(无论是新的还是新的)高或新低)。出现间隙是因为您当前的脚本在不满足条件的时间段内绘制了
na
(不可用),从而有效地将这些时间段留为空白。
这是一个精炼版本:
//@version=5
indicator("True Movement Price", overlay=true)
var float PLow = na
var float PHigh = na
var float PClose = na
var float POpen = na
if (high > PHigh or low < PLow or na(PLow))
PLow := low
PHigh := high
PClose := close
POpen := open
CandleColor = close >= open ? color.rgb(0, 188, 212) : color.rgb(0, 96, 100)
WickcolorColor = close >= open ? color.rgb(0, 188, 212) : color.rgb(0, 96, 100)
BorderColor = close >= open ? color.rgb(0, 188, 212) : color.rgb(0, 96, 100)
plotcandle(POpen, PHigh, PLow, PClose, color = CandleColor, bordercolor = BorderColor, wickcolor = WickcolorColor)
初始化:变量
PLow
、PHigh
、PClose
和POpen
初始化为na
,并且仅在观察到新的高点或低点时更新。这确保蜡烛始终具有一定的价值,并且不会设置为 na
,从而导致缺口。
条件检查:if 条件检查当前高点是否大于
PHigh
,当前低点是否低于 PLow
,或者 PLow
是否为 na
(对于第一次运行)。如果为 true,则会更新值。此逻辑确保绘制第一个可用蜡烛图,并且仅在重大更新时绘制后续蜡烛图。
绘图函数:
plotcandle
函数使用最新更新的开盘价、最高价、最低价和收盘价绘制蜡烛图。由于这些变量保留其最后的有效值而不是重置为 na
,因此图表不会有间隙。