Pine Script如何实现锚定指定K线的动态周期移动平均
Pine Script 动态周期锚定移动平均实现方案
Pine 自带的绝大多数移动平均类内置函数均要求传入固定周期参数,比如各类常用移动平均线指标,都需要提前设定好参与计算的K线数量。
你需要的非固定周期移动平均(业内通用术语为动态长度或可变长度移动平均,区别于常规的固定长度移动平均)完全可以手动编码实现,尤其是你提到的锚定特定K线、参与平均的周期数等于锚定K线以来流逝K线数量的需求,实现逻辑非常简单:
核心原理是从锚定条件触发的K线开始,累计需要参与平均的价格总和,以及累计参与计算的K线数量,每根K线更新这两个值后,用价格总和除以K线数量即可得到对应的锚定平均值。
可直接运行的Pine v5示例代码如下:
//@version=5 indicator("自定义锚定移动平均", overlay=true) // 自定义锚定触发条件,示例为收盘价上穿20日均线,可自行修改 anchor_condition = ta.crossover(close, ta.sma(close, 20)) // 定义累计变量 var float total_price = 0 var int bar_count = 0 // 锚定条件触发时重置累计值,否则累加 if anchor_condition total_price := ohlc4 bar_count := 1 else if not na(ta.barssince(anchor_condition)) total_price := total_price + ohlc4 bar_count := bar_count + 1 // 计算锚定平均,无有效锚定点时返回空值 anchored_ma = bar_count > 0 ? total_price / bar_count : na // 绘制结果 plot(anchored_ma, color=color.blue, linewidth=2, title="锚定移动平均")
如果需要实现和TradingView内置锚定VWAP工具相同的逻辑,只需要把累计逻辑调整为累计「典型价 * 成交量」的总和,以及累计成交量总和,两者相除即可,得到的结果和内置工具完全一致,可直接在策略中作为信号判断条件使用。
内容的提问来源于stack exchange,提问作者Alejandro
相关产品推荐
相关产品推荐

