自适应移动平均(Adaptive Moving Average,AMA)是一种动态调整平滑系数的技术指标,旨在根据市场波动性自动优化其灵敏度,由佩里·考夫曼(Perry Kaufman)在《智能交易系统》中提出。以下是其核心要点:
1. 设计原理

AMA通过监测价格波动程度(市场噪声与趋势强度的比率)来调整平滑权重:
高趋势市场:减少滞后,增大近期价格的权重(快速响应)。
高震荡市场:增加平滑,减小权重(降低噪声干扰)。
2. 关键计算步骤
(1) 效率比率(Efficiency Ratio, ER)
衡量趋势的有效性,反映价格方向变化的效率:
ER=单周期价格变化绝对值之和∣价格变化总值∣
分子:一段时间内净价格变动(如10周期收盘价差值)。
分母:各周期价格变动绝对值的累计(类似真实波幅)。
结果范围:0(完全噪声)到1(强趋势)。
(2) 平滑系数(SC)动态调整
根据ER计算平滑系数,结合用户设定的最小(慢速)和最大(快速)平滑参数:
SC=[ER×(fastSC−slowSC)+slowSC]2
fastSC:快速EMA的平滑常数(如2/(30+1))。
slowSC:慢速EMA的平滑常数(如2/(2+1))。
平方操作:进一步强化趋势时的灵敏度。
(3) 计算AMA
以递归方式计算当前AMA值:
AMAt=AMAt−1+SC×(价格t−AMAt−1)
3. 应用场景
趋势过滤:ER高时跟随趋势,低时避免虚假信号。
动态支撑/阻力:AMA的滞后性随市场状态自适应变化。
结合其他指标:如与波动率指标验证信号。
4. 参数设置
默认周期:常采用10周期计算ER。
平滑范围:典型值为慢速SC对应30周期,快速SC对应2周期,但可调整。
5. 优缺点
优势:较传统均线更智能,减少参数固化问题。
局限:仍可能滞后于剧烈价格变动,需结合其他工具确认信号。
示例代码(Python伪代码)
def ama(prices, n=10, slow_len=30, fast_len=2): er = abs(prices.diff(n).sum()) / prices.diff().abs().rolling(n).sum() fast_sc = 2 / (fast_len + 1) slow_sc = 2 / (slow_len + 1) sc = (er * (fast_sc - slow_sc) + slow_sc) ** 2 ama = prices.ewm(alpha=sc, adjust=False).mean() return ama
AMA的核心价值在于其动态适应性,适合处理不同市场状态,但实际应用中需通过回测优化参数。