Skip to content

移动窗口计算

移动窗口计算是时间序列分析中的重要技术,用于平滑数据、计算趋势等。

滚动窗口

python
import pandas as pd
import numpy as np

dates = pd.date_range('2024-01-01', periods=10)
df = pd.DataFrame({
    '销售额': [100, 120, 110, 130, 125, 140, 135, 150, 145, 160]
}, index=dates)

# 简单移动平均
df['MA3'] = df['销售额'].rolling(window=3).mean()

# 移动求和
df['SUM3'] = df['销售额'].rolling(window=3).sum()

# 移动标准差
df['STD3'] = df['销售额'].rolling(window=3).std()

print(df)

窗口类型

python
# 标准窗口
df['标准平均'] = df['销售额'].rolling(window=3).mean()

# 指数加权窗口
df['指数平均'] = df['销售额'].ewm(span=3).mean()

# 扩展窗口(累计)
df['累计平均'] = df['销售额'].expanding().mean()

print(df)

窗口参数

python
# 最小观测值数
df['最小2'] = df['销售额'].rolling(window=3, min_periods=2).mean()

# 居中对齐
df['居中'] = df['销售额'].rolling(window=3, center=True).mean()

# 窗口类型(如汉明窗)
df['汉明窗'] = df['销售额'].rolling(window=3, win_type='hamming').mean()

print(df)

常用聚合函数

python
rolling = df['销售额'].rolling(window=3)

# 统计函数
print(rolling.mean())    # 平均值
print(rolling.sum())     # 求和
print(rolling.std())     # 标准差
print(rolling.var())     # 方差
print(rolling.min())     # 最小值
print(rolling.max())     # 最大值
print(rolling.median())  # 中位数

# 其他函数
print(rolling.apply(lambda x: x.max() - x.min()))  # 极差

指数加权移动平均

python
# 简单指数平滑
df['EWM_A'] = df['销售额'].ewm(alpha=0.3).mean()

# 使用跨度
df['EWM_SPAN'] = df['销售额'].ewm(span=3).mean()

# 使用半衰期
df['EWM_HALFLIFE'] = df['销售额'].ewm(halflife=3).mean()

# 使用调整
df['EWM_ADJ'] = df['销售额'].ewm(span=3, adjust=False).mean()

print(df)

实际应用

趋势分析

python
# 计算趋势
stock_data = pd.DataFrame({
    '价格': [100, 102, 101, 105, 103, 107, 106, 108, 110, 112]
}, index=pd.date_range('2024-01-01', periods=10))

# 短期和长期均线
stock_data['MA5'] = stock_data['价格'].rolling(window=5).mean()
stock_data['MA10'] = stock_data['价格'].rolling(window=10).mean()

# 金叉死叉信号
stock_data['信号'] = np.where(
    stock_data['MA5'] > stock_data['MA10'], '买入', '卖出'
)

print(stock_data)

波动率计算

python
# 计算收益率
returns = stock_data['价格'].pct_change()

# 滚动波动率(标准差)
stock_data['波动率'] = returns.rolling(window=5).std()

print(stock_data)

移动窗口计算是时间序列分析的核心工具,广泛应用于金融分析、信号处理等领域。