2. 加權(quán)移動(dòng)平均(WMA)

加權(quán)移動(dòng)平均會(huì)對(duì)不同時(shí)間點(diǎn)的數(shù)據(jù)賦予不同的權(quán)重。加權(quán)移動(dòng)平均的公式為:

3. 指數(shù)移動(dòng)平均(EMA)

指數(shù)移動(dòng)平均更注重近期的數(shù)據(jù),它通過(guò)指數(shù)衰減的方式給數(shù)據(jù)賦予權(quán)重。公式為:

完整案例

這里使用 Python 編寫一個(gè)簡(jiǎn)單的代碼來(lái)展示三種移動(dòng)平均(SMA、WMA 和 EMA)的原理。

步驟:

  1. 生成一組時(shí)間序列數(shù)據(jù),作為我們的原始數(shù)據(jù)。
  2. 計(jì)算三種移動(dòng)平均(SMA、WMA 和 EMA)。
  3. 繪制多個(gè)圖形,展示原始數(shù)據(jù)與移動(dòng)平均的關(guān)系。

數(shù)據(jù)生成與分析

我們生成一組波動(dòng)較大的模擬數(shù)據(jù),假設(shè)這是股票價(jià)格的變化,數(shù)據(jù)點(diǎn)的數(shù)量為 100。我們將用 5 天的窗口來(lái)進(jìn)行簡(jiǎn)單移動(dòng)平均、加權(quán)移動(dòng)平均和指數(shù)移動(dòng)平均的計(jì)算。

分析圖形:

代碼實(shí)現(xiàn)

import numpy as np
import matplotlib.pyplot as plt

# 1. 生成模擬時(shí)間序列數(shù)據(jù)(100個(gè)數(shù)據(jù)點(diǎn),波動(dòng)較大)
np.random.seed(42)
days = 100
data = np.random.normal(loc=50, scale=10, size=days) + np.sin(np.linspace(0, 10, days)) * 10

# 2. 簡(jiǎn)單移動(dòng)平均(SMA)
def simple_moving_average(data, window):
sma = np.convolve(data, np.ones(window)/window, mode='valid')
return sma

# 3. 加權(quán)移動(dòng)平均(WMA)
def weighted_moving_average(data, window):
weights = np.arange(1, window+1)
wma = np.convolve(data, weights/weights.sum(), mode='valid')
return wma

# 4. 指數(shù)移動(dòng)平均(EMA)
def exponential_moving_average(data, alpha):
ema = np.zeros_like(data)
ema[0] = data[0] # 初始值
for t in range(1, len(data)):
ema[t] = alpha * data[t] + (1 - alpha) * ema[t - 1]
return ema

# 計(jì)算平滑參數(shù)
window = 5
alpha = 2 / (window + 1)

# 計(jì)算 SMA、WMA 和 EMA
sma = simple_moving_average(data, window)
wma = weighted_moving_average(data, window)
ema = exponential_moving_average(data, alpha)

# 繪圖設(shè)置
plt.figure(figsize=(14, 10))

# 1. 圖 1:原始數(shù)據(jù)
plt.subplot(2, 2, 1)
plt.plot(data, label='Original Data', color='blue')
plt.title('Original Time Series')
plt.xlabel('Day')
plt.ylabel('Value')
plt.legend()

# 2. 圖 2:SMA 與原始數(shù)據(jù)對(duì)比
plt.subplot(2, 2, 2)
plt.plot(data, label='Original Data', color='lightblue')
plt.plot(range(window-1, len(sma)+window-1), sma, label=f'SMA (window={window})', color='red')
plt.title('Simple Moving Average (SMA)')
plt.xlabel('Day')
plt.ylabel('Value')
plt.legend()

# 3. 圖 3:WMA 與原始數(shù)據(jù)對(duì)比
plt.subplot(2, 2, 3)
plt.plot(data, label='Original Data', color='lightblue')
plt.plot(range(window-1, len(wma)+window-1), wma, label=f'WMA (window={window})', color='green')
plt.title('Weighted Moving Average (WMA)')
plt.xlabel('Day')
plt.ylabel('Value')
plt.legend()

# 4. 圖 4:EMA 與原始數(shù)據(jù)對(duì)比
plt.subplot(2, 2, 4)
plt.plot(data, label='Original Data', color='lightblue')
plt.plot(ema, label=f'EMA (alpha={alpha:.2f})', color='orange')
plt.title('Exponential Moving Average (EMA)')
plt.xlabel('Day')
plt.ylabel('Value')
plt.legend()

plt.tight_layout()
plt.show()

圖 1:展示了原始的時(shí)間序列數(shù)據(jù)。你可以看到,這些數(shù)據(jù)波動(dòng)較大,有很多噪音和不規(guī)律的上下波動(dòng)。

圖 2:展示了簡(jiǎn)單移動(dòng)平均(SMA) 和原始數(shù)據(jù)的對(duì)比。SMA 平滑了原始數(shù)據(jù),將短期波動(dòng)抹平,因此趨勢(shì)更加清晰,但它對(duì)所有數(shù)據(jù)點(diǎn)的權(quán)重是相等的。

圖 3:展示了加權(quán)移動(dòng)平均(WMA) 和原始數(shù)據(jù)的對(duì)比。相比于 SMA,WMA 更強(qiáng)調(diào)近期數(shù)據(jù)的影響,所以它對(duì)新數(shù)據(jù)的反應(yīng)更快,波動(dòng)也比 SMA 更小。

圖 4:展示了指數(shù)移動(dòng)平均(EMA) 和原始數(shù)據(jù)的對(duì)比。EMA 通過(guò)指數(shù)平滑對(duì)數(shù)據(jù)進(jìn)行處理,近期數(shù)據(jù)的影響最大,EMA 對(duì)趨勢(shì)的反應(yīng)速度比 SMA 和 WMA 都更快。

通過(guò)這個(gè)案例,我們可以看到三種移動(dòng)平均(SMA、WMA、EMA)是如何幫助我們平滑時(shí)間序列數(shù)據(jù)的:

這些工具可以用于金融數(shù)據(jù)、天氣預(yù)報(bào)等領(lǐng)域的趨勢(shì)分析,希望對(duì)大家有幫助。

文章轉(zhuǎn)自微信公眾號(hào)@深夜努力寫Python

上一篇:

突破最強(qiáng)時(shí)間序列模型,自回歸滑動(dòng)平均!!

下一篇:

突破最強(qiáng)分類算法,高斯混合模型?。?/h5>
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)