Pinescript脚本修改需求:消除开盘跳空,使首日K线衔接前一日收盘价
解决TradingView开盘K线跳空显示异常问题
你需要实现的是:在TradingView任意图表开盘时,让当日第一根K线的实体、颜色及影线基于前一日最后一根K线收盘价绘制,消除跳空带来的图表断层。当前使用的脚本存在显示异常——本该是影线的部分被显示为K线实体,以下针对你提出的三种方案给出具体实现:
问题根源
原脚本中plotcandle函数的wickcolor参数被设置为与实体颜色一致,导致影线和实体无法区分,这是显示异常的核心原因。所有方案都会先修正这个问题,区分实体与影线颜色。
方案1:完全隐藏第一根原生K线,仅显示指标生成的K线
由于无法直接隐藏单根原生K线,我们通过仅在当日第一根K线位置绘制修正后的指标K线,其余K线不绘制,让修正后的K线完全覆盖原生第一根K线,实现视觉上的隐藏效果。
//@version=5 indicator("无跳空K线 - 方案1", overlay=true) applyToDayOpenOnly = input(true, title="仅应用于开盘") dayChangeHourThreshold = input(6, title="判定开盘的小时阈值") showPriceLine = input(true, title="显示价格线") // 判断是否为当日第一根K线 isDayFirstBar = not applyToDayOpenOnly or (time - time[1]) / 1000 / 60 / 60 > dayChangeHourThreshold // 修正第一根K线的开盘价为前一日收盘价,其余K线不生成指标数据 myOpen = isDayFirstBar ? close[1] : na myClose = close myHigh = high myLow = low // 区分实体与影线颜色 candleColor = myOpen <= myClose ? color.teal : color.red wickColor = color.gray // 仅绘制修正后的当日第一根K线 plotcandle(myOpen, myHigh, myLow, myClose, color=candleColor, bordercolor=candleColor, wickcolor=wickColor) // 绘制价格线 if barstate.islast and showPriceLine line.new(bar_index - 4999, close, bar_index + 500, close, color=candleColor, style=line.style_dotted, width=1)
方案2:指标完全覆盖第一根K线的OHLC数据
让指标绘制所有K线,其中当日第一根K线使用修正后的开盘价(前一日收盘价),其余K线沿用原生OHLC数据,指标K线会完全覆盖原生图表的K线,实现无缝衔接。
//@version=5 indicator("无跳空K线 - 方案2", overlay=true) applyToDayOpenOnly = input(true, title="仅应用于开盘") dayChangeHourThreshold = input(6, title="判定开盘的小时阈值") showPriceLine = input(true, title="显示价格线") // 判断是否为当日第一根K线 isDayFirstBar = not applyToDayOpenOnly or (time - time[1]) / 1000 / 60 / 60 > dayChangeHourThreshold // 修正第一根K线的开盘价,其余沿用原生数据 myOpen = isDayFirstBar ? close[1] : open myClose = close myHigh = high myLow = low // 区分实体与影线颜色 candleColor = myOpen <= myClose ? color.teal : color.red wickColor = color.gray // 绘制所有K线,覆盖原生图表 plotcandle(myOpen, myHigh, myLow, myClose, color=candleColor, bordercolor=candleColor, wickcolor=wickColor) // 绘制价格线 if barstate.islast and showPriceLine line.new(bar_index - 4999, close, bar_index + 500, close, color=candleColor, style=line.style_dotted, width=1)
方案3:激活指标时隐藏原生图表
将指标设为独立图表,添加后手动隐藏原生K线系列,完全用指标生成的K线替代原生图表,彻底消除跳空显示。
//@version=5 indicator("无跳空K线 - 方案3", overlay=false) applyToDayOpenOnly = input(true, title="仅应用于开盘") dayChangeHourThreshold = input(6, title="判定开盘的小时阈值") showPriceLine = input(true, title="显示价格线") // 判断是否为当日第一根K线 isDayFirstBar = not applyToDayOpenOnly or (time - time[1]) / 1000 / 60 / 60 > dayChangeHourThreshold // 修正第一根K线的开盘价,其余沿用原生数据 myOpen = isDayFirstBar ? close[1] : open myClose = close myHigh = high myLow = low // 区分实体与影线颜色 candleColor = myOpen <= myClose ? color.teal : color.red wickColor = color.gray // 绘制所有K线 plotcandle(myOpen, myHigh, myLow, myClose, color=candleColor, bordercolor=candleColor, wickcolor=wickColor) // 绘制价格线 if barstate.islast and showPriceLine line.new(bar_index - 4999, close, bar_index + 500, close, color=candleColor, style=line.style_dotted, width=1)
使用说明:添加指标后,打开图表设置,找到原生K线系列(通常标注为“主图表”),将其隐藏,仅保留该指标的K线显示即可。
内容的提问来源于stack exchange,提问作者Harender Singh
相关产品推荐
相关产品推荐

