量化武器库|系列(三):Pandas金融时序高级技巧实战

《量化武器库》系列第3篇,本系列专门聚焦那些能极大提升我们量化研究和实盘效率的工具,打造一个覆盖数据、回测、分析到实战的全流程工具箱。


大家好,我是木泽!

上一章我们探讨了全球数据源的获取,粮草已备。目前,是时候打磨我们武器库中最核心、最高频使用的“瑞士军刀”——Pandas了!任何量化策略,都始于对数据的处理与洞察。Pandas 的强劲远不止于read_csv

今天,我们就来深入探索 Pandas 专为金融时序数据设计的几项高级“武器”,它们将极大提升你的数据处理效率和代码的优雅度。

量化武器库|系列(三):Pandas金融时序高级技巧实战

(创作不易,感谢关注支持↑↑↑)

武器一:时间之魂 —— DatetimeIndex

处理金融数据,第一步永远是让数据拥有“时间”的灵魂。这意味着,你的数据索引必须是 DatetimeIndex 类型,而不是普通的数字或字符串。这是解锁所有时序分析能力的总钥匙!


import pandas as pd
import numpy as np

# 构造模拟日线数据
date_rng = pd.to_datetime(pd.date_range(start='2023-01-01', periods=60, freq='D'))
df = pd.DataFrame(date_rng, columns=['trade_date'])
df['price'] = np.random.rand(len(date_rng)) * 20 + 100

# 关键一步:将日期列设为索引!
df.set_index('trade_date', inplace=True)

print("索引类型:", type(df.index))
# 输出: 索引类型:

拥有 DatetimeIndex 后,你就可以像切蛋糕一样轻松选取时间段:


# 轻松选取2023年1月的所有数据
jan_data = df['2023-01']

# 选取特定时间范围
slice_data = df['2023-02-10':'2023-02-20']
print(slice_data.head(3))

武器二:频率魔术 —— resample()

resample() 是处理不同时间频率数据的神器。想把日线数据聚合成周线或月线?一行代码搞定。这在验证低频策略或生成不同周期的 K 线时极其有用。

例如,将日线价格数据转换为周线的 OHLC (开高低收) 数据:


# 'W' 代表按周(Weekly)进行重采样
weekly_ohlc = df['price'].resample('W').ohlc()

print(weekly_ohlc.head())

高手过招: resample() 结合 .agg() 方法可以实现更复杂的聚合,列如同时计算周线的收盘价和总成交量。

武器三:移动视角 —— rolling()

计算移动平均线(MA)、布林带(Bollinger Bands)等几乎所有技术指标,都离不开 rolling()。它创建了一个固定大小的“滑动窗口”,让我们能在窗口内进行聚合计算,这是向量化计算的核心,远比用 for 循环高效!


# 计算10日和20日移动平均线
df['MA10'] = df['price'].rolling(window=10).mean()
df['MA20'] = df['price'].rolling(window=20).mean()

# 计算布林带上轨 (MA20 + 2 * 20日标准差)
df['BB_UPPER'] = df['MA20'] + 2 * df['price'].rolling(window=20).std()

print(df[['price''MA10''MA20']].tail())

武器四:时间位移 —— shift()

shift() 是构建因子和计算收益率的基础。它可以将数据在时间轴上“平移”,从而实现跨周期的计算。

例如,计算日收益率,就是用今天的价格除以昨天的价格。用 shift(1) 就能轻松获取“昨天”的价格。


# shift(1) 获取前一个交易日的价格
df['yesterday_price'] = df['price'].shift(1)

# 更优雅的写法是直接用 .pct_change()
df['daily_return'] = df['price'].pct_change()

print(df[['price''yesterday_price''daily_return']].head(3))

警惕未来函数! 在构建因子时,shift(-1) 会用到“明天”的数据,这是严重的偷价行为,会导致回测结果虚高。计算信号时,只能用过去和当前的数据!

小结

今天我们磨砺了 Pandas 的四把“神兵利器”:DatetimeIndex (赋予时间灵魂)、resample (掌控频率)、rolling (移动视角) 和 shift (时间位移)。熟练运用它们,你将能优雅而高效地完成绝大多数金融数据的预处理工作。

动手练习:

  1. 创建一个包含价格和成交量的模拟日线数据 DataFrame。
  2. 将其重采样为周线数据,要求计算出周线的开盘价、最高价、最低价、收盘价和总成交量
  3. 计算该数据的 5 日收益率(即今天收盘价相对于 5 天前收盘价的变化率)。

今日话题

你最常用的 Pandas 函数是哪个?
或者在数据处理中踩过什么有趣的“坑”?
欢迎在评论区分享你的实战经验!

#量化教程 #量化投资 #量化武器库

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共1条

请登录后发表评论