1. 什么是指数移动平均?
我第一次接触EMA是在处理股票数据的时候。当时需要分析某支科技股的短期走势,简单移动平均线总是慢半拍,直到一位量化交易员朋友推荐我试试EMA。这个看似简单的算法,彻底改变了我对时间序列分析的认知。
指数移动平均(Exponential Moving Average)是一种特殊的加权移动平均,它给近期的数据点赋予更高的权重,使得平均值能够更快地反映最新变化。与简单移动平均(SMA)对所有数据点一视同仁不同,EMA的权重呈指数级递减——这正是"指数"二字的由来。这种特性使EMA成为金融分析、信号处理、深度学习等领域的常客。
举个生活中的例子:SMA就像你计算过去30天的平均步数,每天步数对结果的影响相同;而EMA更像是你的"近期健康指数",最近三天的运动情况会比三周前的数据对当前状态影响更大。当我们需要对变化快速响应时,EMA的这种特性就显得尤为宝贵。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心原理与数学表达
2.1 基本计算公式
EMA的计算看似简单,却蕴含着精妙的设计。其递归定义如下:
EMA_today = α × Price_today + (1-α) × EMA_yesterday
其中α是平滑因子(取值范围0-1),决定了新数据点的权重。这个递归形式是EMA计算高效的关键——它不需要保存全部历史数据,只需记住前一天的EMA值即可。
α的取值有讲究,通常用以下公式确定:
α = 2/(N+1)
N是我们关心的周期长度。例如20日EMA对应的α≈0.095。这个设计确保了N周期EMA与N周期SMA对价格变化的敏感度相当。
注意:虽然α和N存在上述关系,但EMA和SMA的实际表现差异很大。EMA的"有效观察期"比N要长得多,因为它理论上考虑了全部历史数据(只是权重指数衰减)。
2.2 权重分布特性
让我们拆解EMA的权重分配。将递归公式展开后,可以看到:
EMA_t = α × [P_t + (1-α)P_{t-1} + (1-α)²P_{t-2} + ...]
这是一个无限级数,各项系数构成指数衰减序列。这种权重分配有三个重要特性:
- 权重总和收敛于1(当项数→∞时)
- 最近的数据点权重最大,为α
- 权重衰减速度由α决定,α越大衰减越快
在Python中,我们可以用这个函数验证权重分布:
