为何部分加密货币图表中昨日高低点中线绘制代码失效?
问题排查:Pine Script昨日高低点中线在部分品种图表失效
我写的Pine Script代码原本要实现三个功能:
- 绘制昨日高点(PDH)的绿色水平线
- 绘制昨日低点(PDL)的红色水平线
- 绘制昨日高低点中间值的蓝色水平线
目前代码在BTC等部分图表能正常生效,但在LTC等图表中蓝色中线绘制失效,不过昨日高低点的线条显示正常。附上代码:
//@version=5 indicator('Plot Lines', overlay=true) PDH = request.security(syminfo.tickerid, 'D', high) PDL = request.security(syminfo.tickerid, 'D', low) var line l_pdh = na var line l_pdl = na var line l_midPoint = na if barstate.islast l_pdh := line.new(bar_index - 1, PDH[1], bar_index, PDH[1], extend=extend.both,color=color.green) l_pdl := line.new(bar_index - 1,PDL[1],bar_index,PDL[1],extend=extend.both,color=color.red) // Calculate midpoint between high and low midPoint = (PDH + PDL) / 2 // Plot blue open line at midpoint l_midPoint := line.new(bar_index - 1,midPoint ,bar_index,midPoint ,extend=extend.both,color=color.blue) line.delete(l_pdh[1]) line.delete(l_pdl[1]) line.delete(l_midPoint[1])
问题原因
高低点线条使用的是PDH[1]和PDL[1],也就是前一根K线通过request.security获取的昨日日高低点数据,这个数值是稳定的(昨日已经收盘,不会变动)。
但中线计算用的是PDH + PDL,直接取的是当前K线周期下请求到的日高低点——如果当前交易日还未收盘,这个数值会随着日内行情不断变化;部分品种可能因为数据同步逻辑的差异,导致当前K线的PDH/PDL并非昨日数据,而是当日的临时值,最终中线无法正确显示昨日高低点的中间值。
修复后的代码
把中线计算也改成使用前一根K线的昨日高低点数据,和高低点线条保持一致:
//@version=5 indicator('Plot Lines', overlay=true) PDH = request.security(syminfo.tickerid, 'D', high) PDL = request.security(syminfo.tickerid, 'D', low) var line l_pdh = na var line l_pdl = na var line l_midPoint = na if barstate.islast l_pdh := line.new(bar_index - 1, PDH[1], bar_index, PDH[1], extend=extend.both,color=color.green) l_pdl := line.new(bar_index - 1,PDL[1],bar_index,PDL[1],extend=extend.both,color=color.red) // 修改为使用昨日的高低点数据(和高低点线保持一致) midPoint = (PDH[1] + PDL[1]) / 2 l_midPoint := line.new(bar_index - 1,midPoint ,bar_index,midPoint ,extend=extend.both,color=color.blue) line.delete(l_pdh[1]) line.delete(l_pdl[1]) line.delete(l_midPoint[1])
说明
修复后,中线和高低点线一样,都基于前一根K线获取的昨日日K线高低点计算,确保所有品种图表中都能稳定显示昨日高低点的中间值水平线。
内容的提问来源于stack exchange,提问作者m1stercodex
相关产品推荐
相关产品推荐

