移动平均是一种观察数据的方式。它让短期波动变得平缓,也会让变化显现得更慢。把这两个特点放在一起理解,比只记住公式更有用。

01 / 每次只看最近几个数

假设有一组教学用数列:10、11、12、11、13、14。用长度为 3 的窗口,第一次取前三个数计算平均值,再把窗口向后移动一位。

MA₃(t) = [x(t) + x(t−1) + x(t−2)] / 3
教学数据:三期简单移动平均
位置当前值窗口内容平均值
1–210、11不足 3 个观测值暂不计算
31210、11、1211.00
41111、12、1111.33
51312、11、1312.00
61411、13、1412.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,观察不同窗口如何响应这次突变。这里的练习用于理解统计方法,不构成买卖规则。