Pinescript中line.new绘制Camarilla枢轴线出现双线问题排查求助
问题排查结果
你遇到的双线问题核心是Pine Script的逐K线执行机制导致的,具体错误点如下:
- 你没有限制
line.new函数的执行时机,代码会在每一根K线上都新建一套Camarilla线,大量线条重叠后就会呈现出双线/粗线的视觉效果 - 没有对历史交易日生成的线条做清理,旧线会一直残留在图表上
security函数调用未加防未来函数参数,存在线条漂移的潜在问题
修复方案
我们通过限制线条创建时机、复用线条ID、清理历史线条三个维度解决问题,修复后的完整代码如下:
//Created by GT //@version=4 study(title="My Test Camarilla Setup", shorttitle="Camarilla", overlay=true) showDailyPivots = input(true, title="Show Daily Pivots") // 用var声明线条ID,只会初始化一次,避免逐K线重置 var line pivotLine = na var line h6Line = na var line h5Line = na var line h4Line = na var line h3Line = na var line l6Line = na var line l5Line = na var line l4Line = na var line l3Line = na //Calculate Camarilla values pivot = (high + low + close ) / 3.0 range = high - low h5 = (high/low) * close h4 = close + (high - low) * 1.1 / 2.0 h3 = close + (high - low) * 1.1 / 4.0 h2 = close + (high - low) * 1.1 / 6.0 h1 = close + (high - low) * 1.1 / 12.0 l1 = close - (high - low) * 1.1 / 12.0 l2 = close - (high - low) * 1.1 / 6.0 l3 = close - (high - low) * 1.1 / 4.0 l4 = close - (high - low) * 1.1 / 2.0 h6 = h5 + 1.168 * (h5 - h4) l5 = close - (h5 - close) l6 = close - (h6 - close) // 计算当日交易起止时间 yearVar = year monthVar = month dayVar = dayofmonth startTime = timestamp(syminfo.timezone,yearVar,monthVar,dayVar,09,15) endTime = timestamp(syminfo.timezone,yearVar,monthVar,dayVar,15,30) // 修正security调用,添加barmerge.lookahead_off避免未来函数 dtime_pivot = security(syminfo.ticker, 'D', pivot[1], barmerge.gaps_off, barmerge.lookahead_off) dtime_h6 = security(syminfo.ticker, 'D', h6[1], barmerge.gaps_off, barmerge.lookahead_off) dtime_h5 = security(syminfo.ticker, 'D', h5[1], barmerge.gaps_off, barmerge.lookahead_off) dtime_h4 = security(syminfo.ticker, 'D', h4[1], barmerge.gaps_off, barmerge.lookahead_off) dtime_h3 = security(syminfo.ticker, 'D', h3[1], barmerge.gaps_off, barmerge.lookahead_off) dtime_l3 = security(syminfo.ticker, 'D', l3[1], barmerge.gaps_off, barmerge.lookahead_off) dtime_l4 = security(syminfo.ticker, 'D', l4[1], barmerge.gaps_off, barmerge.lookahead_off) dtime_l5 = security(syminfo.ticker, 'D', l5[1], barmerge.gaps_off, barmerge.lookahead_off) dtime_l6 = security(syminfo.ticker, 'D', l6[1], barmerge.gaps_off, barmerge.lookahead_off) // 仅在当日第一根K线(交易日开始)时执行线条创建逻辑 if time == startTime and showDailyPivots // 先删除上一交易日的旧线条 line.delete(pivotLine) line.delete(h6Line) line.delete(h5Line) line.delete(h4Line) line.delete(h3Line) line.delete(l6Line) line.delete(l5Line) line.delete(l4Line) line.delete(l3Line) // 新建当日线条 pivotLine := line.new(x1=startTime,y1=dtime_pivot,x2=endTime,y2=dtime_pivot,xloc = xloc.bar_time,extend=extend.none,color=color.yellow,style=line.style_dotted,width=5) h6Line := line.new(x1=startTime,y1=dtime_h6,x2=endTime,y2=dtime_h6,xloc=xloc.bar_time,extend=extend.none,color=color.red,style=line.style_dotted,width=5) h5Line := line.new(x1=startTime,y1=dtime_h5,x2=endTime,y2=dtime_h5,xloc=xloc.bar_time,extend=extend.none,color=color.red,style=line.style_dotted,width=4) h4Line := line.new(x1=startTime,y1=dtime_h4,x2=endTime,y2=dtime_h4,xloc=xloc.bar_time,extend=extend.none,color=color.red,style=line.style_dotted,width=3) h3Line := line.new(x1=startTime,y1=dtime_h3,x2=endTime,y2=dtime_h3,xloc=xloc.bar_time,extend=extend.none,color=color.red,style=line.style_dotted,width=2) l6Line := line.new(x1=startTime,y1=dtime_l6,x2=endTime,y2=dtime_l6,xloc=xloc.bar_time,extend=extend.none,color=color.green,style=line.style_dotted,width=5) l5Line := line.new(x1=startTime,y1=dtime_l5,x2=endTime,y2=dtime_l5,xloc=xloc.bar_time,extend=extend.none,color=color.green,style=line.style_dotted,width=4) l4Line := line.new(x1=startTime,y1=dtime_l4,x2=endTime,y2=dtime_l4,xloc=xloc.bar_time,extend=extend.none,color=color.green,style=line.style_dotted,width=3) l3Line := line.new(x1=startTime,y1=dtime_l3,x2=endTime,y2=dtime_l3,xloc=xloc.bar_time,extend=extend.none,color=color.green,style=line.style_dotted,width=2) // 非交易时段隐藏线条 if time > endTime or not showDailyPivots line.set_visible(pivotLine, false) line.set_visible(h6Line, false) line.set_visible(h5Line, false) line.set_visible(h4Line, false) line.set_visible(h3Line, false) line.set_visible(l6Line, false) line.set_visible(l5Line, false) line.set_visible(l4Line, false) line.set_visible(l3Line, false)
修复说明
- 用
var关键字声明线条变量,变量值不会随K线刷新重置,保证全局唯一的线条ID - 仅在当日09:15对应的第一根K线时删除旧线、创建新线,其余时间不会重复创建线条,彻底解决双线问题
- 添加非交易时段隐藏逻辑,满足仅在09:15-15:30显示线条的需求
- 修正security函数参数,避免指标重绘、线条漂移问题
内容的提问来源于stack exchange,提问作者Greenhorn Trader
相关产品推荐
相关产品推荐

