Pine Script中line.new仅生效于extend.right,如何绘制趋势线而非水平线?
解决Pine Script绘制趋势线而非水平线的问题
你当前代码绘制水平线的核心原因是:line.new()中设置的y1和y2都是同一个close[i]值,导致线段两端价格完全一致,自然是水平的。要绘制趋势线,需要为线段两端设置不同的价格锚点,同时extend = extend.right只是控制线条是否向右延伸,和是否为趋势线无关。
关键修改步骤
- 为趋势线两端设置不同的价格:比如将高点趋势线的一端锚定在
high[iHighMain](找到的历史高点价格),另一端锚定在符合条件K线的收盘价;低点趋势线同理锚定low[iLowMain]和对应K线收盘价。 - 按需保留或调整
extend参数:如果需要趋势线向右延伸,保留extend=extend.right;如果只需要显示两个锚点之间的线段,可移除该参数。
修改后的完整代码
maxBack = input.int(defval = 10, title = "maxBack", minval = 1) float highMain = ta.highest(maxBack) float lowMain = ta.lowest(maxBack) int iHighMain = 0 int iLowMain = 0 bool we_work = barstate.islast if(we_work) // 定位历史高低点对应的K线索引 for i=2 to maxBack+2 if(iHighMain==0 and high[i] == highMain) iHighMain := i if(iLowMain==0 and low[i] == lowMain) iLowMain := i // 绘制高点趋势线:连接符合条件的收盘价与历史高点价格 for i=iHighMain+1 to 1000 if(close[i]<high[iHighMain] and close[i]>low[iHighMain]) line.new(x1 = i, y1 = close[i], x2 = iHighMain, y2 = high[iHighMain], width = 3, color=color.yellow, extend=extend.right) break // 绘制低点趋势线:连接符合条件的收盘价与历史低点价格 for i=iLowMain+1 to 1000 if(close[i]<high[iLowMain] and close[i]>low[iLowMain]) line.new(x1 = i, y1 = close[i], x2 = iLowMain, y2 = low[iLowMain], width = 3, color=color.yellow, extend=extend.right) break
核心修改说明
- 将
line.new()的y2参数从重复的close[i]替换为对应的历史高低点价格(high[iHighMain]/low[iLowMain]),让线段两端价格不同,形成倾斜的趋势线。 extend=extend.right仅用于让线条向右延伸至最新K线,若不需要延伸效果,直接删除该参数即可。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

