如何基于长度计算最近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
相关产品推荐
相关产品推荐

