Pine Script指标绘制异常:预期3条线却出现重复/缺失
问题分析与解决
核心问题
你的代码在每一根K线都会执行一次drawLines()函数,导致每根K线都生成3条新线条——随着K线不断推进,旧线条会被Pine Script的绘图资源回收机制清理,所以看起来线条数量逐渐减少;同时bar_index[15]和bar_index[14]是动态变化的(每根新K线生成时,这两个值指向的都是“当前K线往前数15/14根”的位置),所以每次绘制的线条起点/终点都在移动,完全不符合你“固定从某两个历史bar出发”的预期。
修正后的代码
//@version=5 indicator("My Fan", overlay=true, max_bars_back = 400) // 定义线条开关输入(移到函数外,避免重复创建输入项) draw1x1 = input(true, "Draw 1 Line") draw1x2 = input(true, "Draw 2 Line") draw2x1 = input(true, "Draw 3 Line") // 定义固定的起点/终点bar偏移(这里是往前数15和14根K线,可按需调整) origBarOffset = 15 adjBarOffset = 14 // 存储线条对象,用var确保只初始化一次 var line line1 = na var line line2 = na var line line3 = na drawLines() => // 获取固定的起点/终点bar索引 origX = bar_index[origBarOffset] origY = input.float(448, "Origin Y") adjX = bar_index[adjBarOffset] adjY = input.float(446, "Adjustment Y") dx = adjX - origX dy = adjY - origY adjPriceUnit = 1 / 8 // 1/8 line adjYnew = adjY - (adjPriceUnit * dx) dxnew = adjX - origX dynew = adjYnew - origY priceUnitnew = dynew / dxnew // 更新或创建线条,只执行一次 if draw1x1 if na(line1) line1 := line.new(origX, origY, adjX, adjYnew, extend=extend.right, color=color.blue, width=2) else line.set_xy1(line1, origX, origY) line.set_xy2(line1, adjX, adjYnew) else line.delete(line1) line1 := na if draw1x2 y2 = origY + priceUnitnew * 2 if na(line2) line2 := line.new(origX, origY, adjX, y2, extend=extend.right, color=color.blue, width=1) else line.set_xy1(line2, origX, origY) line.set_xy2(line2, adjX, y2) else line.delete(line2) line2 := na if draw2x1 x2 = origX + dxnew * 2 if na(line3) line3 := line.new(origX, origY, x2, adjY, extend=extend.right, color=color.blue, width=1) else line.set_xy1(line3, origX, origY) line.set_xy2(line3, x2, adjY) else line.delete(line3) line3 := na // 只在最新K线执行绘制/更新(确保线条固定且只创建一次) if barstate.islast drawLines()
关键修改说明
- 用
var存储线条对象:确保线条只被创建一次,后续只更新坐标,不会重复生成新线条。 - 限制执行时机:通过
barstate.islast让drawLines()只在最新K线执行,避免每根K线都重复绘制。 - 统一输入项位置:把开关输入移到函数外,避免每调用一次函数就创建重复的输入控件。
- 线条管理:增加了开关控制线条的显示/删除,当关闭某个开关时会自动删除对应线条。
这样修改后,线条会固定在你预期的bar_index[15]和bar_index[14]位置(相对于最新K线),且只会生成3条线,不会随着K线推进出现数量减少或位置偏移的问题。
内容的提问来源于stack exchange,提问作者Peace Nail
相关产品推荐
相关产品推荐

