移动平均法

99 阅读3分钟

移动平均法

定义

移动平均法(Moving Average Method)是一种时间序列分析方法,用于平滑数据波动,去除噪声,以便更好地识别趋势。它主要用于预测、技术分析和信号处理。

公式

简单移动平均 (Simple Moving Average, SMA) :

image.png

其中:

  • SMAt 表示时间 t 时刻的移动平均值
  • Xt 表示时间 t 时刻的原始数据
  • n 为窗口大小(即平均的周期数)

加权移动平均 (Weighted Moving Average, WMA) :

image.png

其中,权重 w 赋予较新的数据更大的影响力。

指数移动平均 (Exponential Moving Average, EMA) :

image.png

其中:

  • α 是平滑因子,通常计算为 α=2/(n+1)

  • image.png是上一时刻的指数移动平均值

应用场景

  • 股票市场分析:用于识别趋势、交易信号
  • 需求预测:平滑销量数据,预测未来需求
  • 传感器数据处理:减少短期波动,提高数据稳定性
  • 工业质量控制:监测生产数据,识别异常

Python 示例代码

以下代码演示如何计算简单移动平均(SMA)、加权移动平均(WMA)和指数移动平均(EMA)。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 生成示例数据
np.random.seed(42)
data = np.random.randint(50, 100, 20)  # 生成20个随机数,范围在50-100
dates = pd.date_range(start="2024-01-01", periods=len(data), freq='D')


df = pd.DataFrame({'Date': dates, 'Value': data})
df.set_index('Date', inplace=True)

# 计算简单移动平均(SMA)
window_size = 5
df['SMA'] = df['Value'].rolling(window=window_size).mean()

# 计算加权移动平均(WMA)
weights = np.arange(1, window_size + 1)  # 权重为 1, 2, 3, ..., window_size
df['WMA'] = df['Value'].rolling(window=window_size).apply(lambda x: np.dot(x, weights)/weights.sum(), raw=True)

# 计算指数移动平均(EMA)
df['EMA'] = df['Value'].ewm(span=window_size, adjust=False).mean()

# 绘制结果
plt.figure(figsize=(10, 5))
plt.plot(df.index, df['Value'], label='Original Data', marker='o', linestyle='--', alpha=0.6)
plt.plot(df.index, df['SMA'], label=f'SMA ({window_size})', linewidth=2, linestyle='--')
plt.plot(df.index, df['WMA'], label=f'WMA ({window_size})', linewidth=2, linestyle='-')
plt.plot(df.index, df['EMA'], label=f'EMA ({window_size})', linewidth=2, linestyle='dotted')

plt.legend()
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Moving Averages Example')
plt.xticks(rotation=90)  # 让日期竖着显示
plt.grid()
plt.show()

print("SMA = n1+..n5/5 ;   WMA = w1*n1+..w5*n5/w1 +w2+..w5 ; EMA = & * Xt(1=&)t-1 ")
# 打印数据
print(df)


显示效果

image.png

SMA = n1+..n5/5 ;   WMA = w1*n1+..w5*n5/w1 +w2+..w5 ; EMA = & * Xt(1=&)t-1 
            Value   SMA        WMA        EMA
Date                                         
2024-01-01     88   NaN        NaN  88.000000
2024-01-02     78   NaN        NaN  84.666667
2024-01-03     64   NaN        NaN  77.777778
2024-01-04     92   NaN        NaN  82.518519
2024-01-05     57  75.8  72.600000  74.012346
2024-01-06     70  72.2  70.666667  72.674897
2024-01-07     88  74.2  75.933333  77.783265
2024-01-08     68  75.0  73.866667  74.522176
2024-01-09     72  71.0  72.866667  73.681451
2024-01-10     60  71.6  69.200000  69.120967
2024-01-11     60  69.6  65.333333  66.080645
2024-01-12     73  66.6  66.466667  68.387097
2024-01-13     85  70.0  72.600000  73.924731
2024-01-14     89  73.4  78.933333  78.949821
2024-01-15     73  76.0  78.800000  76.966547
2024-01-16     52  74.4  70.800000  68.644365
2024-01-17     71  74.0  69.666667  69.429577
2024-01-18     51  67.2  62.000000  63.286384
2024-01-19     73  64.0  63.933333  66.524256
2024-01-20     93  68.0  73.600000  75.349504