移动平均是一种观察数据的方式。它让短期波动变得平缓,也会让变化显现得更慢。把这两个特点放在一起理解,比只记住公式更有用。
01 / 每次只看最近几个数
假设有一组教学用数列:10、11、12、11、13、14。用长度为 3 的窗口,第一次取前三个数计算平均值,再把窗口向后移动一位。
MA₃(t) = [x(t) + x(t−1) + x(t−2)] / 3
| 位置 | 当前值 | 窗口内容 | 平均值 |
|---|---|---|---|
| 1–2 | 10、11 | 不足 3 个观测值 | 暂不计算 |
| 3 | 12 | 10、11、12 | 11.00 |
| 4 | 11 | 11、12、11 | 11.33 |
| 5 | 13 | 12、11、13 | 12.00 |
| 6 | 14 | 11、13、14 | 12.67 |
02 / 用 Python 标准库复现
这个例子只计算已有的完整窗口,前两个位置用 None 表示。这里的 None 是“暂时无法计算”,不是数值零。
from statistics import mean
values = [10, 11, 12, 11, 13, 14]
window = 3
averages = [
None if i + 1 < window
else round(mean(values[i + 1 - window:i + 1]), 2)
for i in range(len(values))
]
print(averages)
# [None, None, 11, 11.33, 12, 12.67]
03 / 平滑与滞后是一组取舍
窗口较短时,平均值更容易随最近的数据变化;窗口较长时,短期波动的影响通常更小,但也更晚反映新的变化。没有一个窗口长度适合所有问题,选择之前应先明确观察目的。
计算的时刻也属于数据
如果指标使用了当天收盘后的完整数据,就不能假设在当天更早的时刻已经知道这个指标。学习回测时,要单独检查信号生成时间与执行时间。
留给自己的练习
把窗口分别改成 2 和 4,手算其中一个结果,再与程序核对。接着把最后一个数改成 30,观察不同窗口如何响应这次突变。这里的练习用于理解统计方法,不构成买卖规则。