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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:37:35