如何在Pine Script中绘制被价格穿越后终止的分形支撑线
Pine脚本:将分形低点水平线延伸至价格穿越为止
原代码存在两个核心问题:一是用单个变量存储线条会被新分形覆盖,二是循环逻辑不符合Pine脚本逐bar运行的特性。以下是修正后的实现:
// © Wizzle //@version=5 indicator('Fractal Test with CV Count', overlay=true) // ** VARIABLES ** fractalperiods = input.int(defval=1, title='Fractal Periods', minval=1, maxval=5) up_fractal = ta.pivotlow(fractalperiods, fractalperiods) down_fractal = ta.pivothigh(fractalperiods, fractalperiods) // ** Plot Fractals ** plotshape(up_fractal, title='Up Fractal', style=shape.square, location=location.belowbar, color=color.new(#0cc006, 0), offset=-1 * fractalperiods, size=size.small) plotshape(down_fractal, title='Down Fractal', style=shape.square, location=location.abovebar, color=color.new(#ff0000, 0), offset=-1 * fractalperiods, size=size.small) // 用数组存储所有分形线条,避免被新分形覆盖 var array<line> fractal_lines = array.new<line>() // 当新的向上分形出现时,创建线条并加入数组 if up_fractal fractal_low = low[fractalperiods] fractal_bar_idx = bar_index[fractalperiods] // 创建初始线条,起点为分形所在bar,终点先设为当前bar new_line = line.new(fractal_bar_idx, fractal_low, bar_index, fractal_low, color=color.blue, width=1) array.push(fractal_lines, new_line) // 遍历所有线条,更新或移除 // 倒序遍历避免删除元素时索引混乱 for i = array.size(fractal_lines) - 1 downto 0 current_line = array.get(fractal_lines, i) // 获取线条对应的分形低点价格 line_price = line.get_y1(current_line) // 检查当前bar是否下穿分形低点 if ta.crossunder(low, line_price) // 下穿后删除线条 line.delete(current_line) array.remove(fractal_lines, i) else // 未下穿则更新线条终点到当前bar line.set_x2(current_line, bar_index)
关键改动说明
- 使用
var array<line>存储所有分形线条,确保新分形不会覆盖旧线条 - 新分形出现时,创建初始线条并加入数组
- 倒序遍历数组(避免删除元素时索引错位),检查每条线条对应的分形低点是否被价格下穿:
- 若下穿则删除线条并移出数组
- 若未下穿则更新线条终点到当前bar,实现延伸效果
内容的提问来源于stack exchange,提问作者Wizzler
相关产品推荐
相关产品推荐

