💡 Pandas时间序列处理技巧
本章讲解了Python编程基础,这里重点介绍量化交易中最常用的时间序列处理技巧:
1. 滚动计算(Rolling)
# 计算移动平均
df['ma20'] = df['close'].rolling(window=20).mean()
# 计算滚动标准差(波动率)
df['volatility'] = df['returns'].rolling(window=20).std()
# 自定义滚动函数
df['rolling_rank'] = df['close'].rolling(20).apply(
lambda x: pd.Series(x).rank().iloc[-1]
)
2. 移动计算(EWM)
# 指数移动平均(权重指数衰减)
df['ema12'] = df['close'].ewm(span=12).mean()
df['ema26'] = df['close'].ewm(span=26).mean()
# MACD
df['macd'] = df['ema12'] - df['ema26']
3. 位移操作
# 获取前一天数据
df['prev_close'] = df['close'].shift(1)
# 计算收益率(避免未来函数)
df['returns'] = df['close'].pct_change() # 等价于 (close - shift(1)) / shift(1)
4. 重采样
# 日线转周线
weekly = df.resample('W').agg({
'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'volume': 'sum'
})
核心原则: 使用 shift(1) 确保只使用历史数据,避免未来函数!
5. 高效数据类型
# 使用正确的数据类型节省内存
df['close'] = df['close'].astype('float32') # 而非默认的float64
df['volume'] = df['volume'].astype('int32')
性能优化: 对于大规模数据,使用 float32 可以减少50%内存占用,且精度足够金融计算。