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

如何在Pine Script中创建三角形及反向三角形形态?含制作步骤与原理

在Pine Script中基于Zigzag实现三角形与反向三角形形态

形态形成原理

  • 三角形形态:收敛型整理形态,核心是价格波动的高低点逐步收敛:
    • 对称三角形:高点依次降低、低点依次抬高,波动区间收窄
    • 上升三角形:高点基本持平,低点持续抬升
    • 下降三角形:低点基本持平,高点持续降低
  • 反向三角形(扩散三角形):发散型形态,价格波动的高低点持续向外扩散(高点越来越高、低点越来越低),通常预示原有趋势终结或反转。

实现步骤

1. 获取Zigzag高低点数据

通过Pine Script内置函数提取走势中的关键高低点,示例用固定周期参数获取:

//@version=5
indicator("Zigzag 三角形/反向三角形", overlay=true)

zigzagLength = input.int(10, title="Zigzag 周期")
pivotHigh = ta.pivothigh(zigzagLength, zigzagLength)
pivotLow = ta.pivotlow(zigzagLength, zigzagLength)

2. 跟踪连续高低点序列

用数组存储最近3个关键高低点(三角形形态至少需要3个点来构建连线):

// 存储最近3个高点和低点
var float[] highPoints = array.new_float(3)
var float[] lowPoints = array.new_float(3)

// 更新高点数组
if (not na(pivotHigh))
    array.shift(highPoints)
    array.push(highPoints, pivotHigh)

// 更新低点数组
if (not na(pivotLow))
    array.shift(lowPoints)
    array.push(lowPoints, pivotLow)

3. 判断形态成立条件

对称三角形

当3个高点依次降低、3个低点依次抬高时判定:

isSymTriangle = array.size(highPoints) == 3 
    and array.get(highPoints,0) > array.get(highPoints,1) and array.get(highPoints,1) > array.get(highPoints,2) 
    and array.get(lowPoints,0) < array.get(lowPoints,1) and array.get(lowPoints,1) < array.get(lowPoints,2)

上升三角形

当3个高点在误差范围内持平、3个低点依次抬升时判定:

tolerance = input.float(0.5, title="高点持平容忍度(%)")
highDiff = math.abs((array.get(highPoints,0) - array.get(highPoints,2)) / array.get(highPoints,0)) * 100
isAscTriangle = array.size(highPoints) == 3 and highDiff < tolerance
    and array.get(lowPoints,0) < array.get(lowPoints,1) and array.get(lowPoints,1) < array.get(lowPoints,2)

反向三角形

当3个高点依次抬高、3个低点依次降低时判定:

isReverseTriangle = array.size(highPoints) == 3 
    and array.get(highPoints,0) < array.get(highPoints,1) and array.get(highPoints,1) < array.get(highPoints,2)
    and array.get(lowPoints,0) > array.get(lowPoints,1) and array.get(lowPoints,1) > array.get(lowPoints,2)

4. 绘制形态连线

根据判定结果,用画线函数绘制三角形的上下边线:

// 绘制对称三角形
if (isSymTriangle)
    line.new(bar_index[zigzagLength*2], array.get(highPoints,0), bar_index, array.get(highPoints,2), color=color.blue, width=2)
    line.new(bar_index[zigzagLength*2], array.get(lowPoints,0), bar_index, array.get(lowPoints,2), color=color.blue, width=2)

// 绘制上升三角形
if (isAscTriangle)
    line.new(bar_index[zigzagLength*2], array.get(highPoints,0), bar_index, array.get(highPoints,2), color=color.green, width=2)
    line.new(bar_index[zigzagLength*2], array.get(lowPoints,0), bar_index, array.get(lowPoints,2), color=color.green, width=2)

// 绘制反向三角形
if (isReverseTriangle)
    line.new(bar_index[zigzagLength*2], array.get(highPoints,0), bar_index, array.get(highPoints,2), color=color.red, width=2)
    line.new(bar_index[zigzagLength*2], array.get(lowPoints,0), bar_index, array.get(lowPoints,2), color=color.red, width=2)

自定义调整建议

  • 修改zigzagLength参数适配不同时间周期的走势
  • 调整tolerance参数优化“持平”高低点的判定精度
  • 可添加形态突破报警逻辑,当价格突破边线时触发提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:10:41