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

如何基于长度计算最近N个枢轴的平均值?(Pine Script示例)

Pine Script实现最近N个枢轴高低点的平均值计算

核心思路

  • 用ta.pivothigh()和ta.pivotlow()识别枢轴高低点
  • 用动态数组存储最近N个有效枢轴值,超出设定长度时移除最早记录
  • 基于数组内的数值计算平均值

完整代码示例

//@version=5
indicator("最近N个枢轴高低点平均值", overlay=false)

// 输入参数
pivot_length = input.int(5, title="要计算的枢轴数量", minval=1)
left_bars = input.int(1, title="枢轴左侧确认K线数", minval=1)
right_bars = input.int(1, title="枢轴右侧确认K线数", minval=1)

// 初始化存储枢轴高低点的数组
var float[] pivot_highs = array.new_float()
var float[] pivot_lows = array.new_float()

// 识别当前K线是否为枢轴高点/低点
is_pivot_high = ta.pivothigh(left_bars, right_bars)
is_pivot_low = ta.pivotlow(left_bars, right_bars)

// 更新枢轴高点数组:添加新枢轴,保持数组长度不超过设定值
if is_pivot_high
    array.push(pivot_highs, ta.valuewhen(is_pivot_high, high, 0))
    if array.size(pivot_highs) > pivot_length
        array.shift(pivot_highs)

// 更新枢轴低点数组:添加新枢轴,保持数组长度不超过设定值
if is_pivot_low
    array.push(pivot_lows, ta.valuewhen(is_pivot_low, low, 0))
    if array.size(pivot_lows) > pivot_length
        array.shift(pivot_lows)

// 计算平均值(数组为空时返回na)
avg_pivot_high = array.size(pivot_highs) > 0 ? array.sum(pivot_highs) / array.size(pivot_highs) : na
avg_pivot_low = array.size(pivot_lows) > 0 ? array.sum(pivot_lows) / array.size(pivot_lows) : na

// 输出结果
plot(avg_pivot_high, color=color.new(color.red, 0), title="最近N个枢轴高点平均值")
plot(avg_pivot_low, color=color.new(color.green, 0), title="最近N个枢轴低点平均值")

代码解释

  • 参数设置:pivot_length指定要计算的最近枢轴数量,left_bars和right_bars控制枢轴点的确认范围(比如left_bars=1代表当前K线高点需高于左侧1根K线的高点)
  • 数组维护:用var关键字初始化数组,确保脚本重启时不重置;每次识别到新枢轴时添加到数组,若数组长度超过设定值,用array.shift()移除最早的元素
  • 平均值计算:通过array.sum()求和后除以数组长度,数组为空时返回na避免错误
  • 可视化:用不同颜色的线绘制两个平均值,方便观察

注意事项

  • 若市场中枢轴点数量不足N个,平均值会基于已有的枢轴点计算
  • 调整left_bars和right_bars会改变枢轴点的识别灵敏度,数值越大,识别出的枢轴点越少但可靠性越高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:55:21