You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

修复说明

  1. 用var关键字声明线条变量,变量值不会随K线刷新重置,保证全局唯一的线条ID
  2. 仅在当日09:15对应的第一根K线时删除旧线、创建新线,其余时间不会重复创建线条,彻底解决双线问题
  3. 添加非交易时段隐藏逻辑,满足仅在09:15-15:30显示线条的需求
  4. 修正security函数参数,避免指标重绘、线条漂移问题

内容的提问来源于stack exchange,提问作者Greenhorn Trader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:30:05