《量化武器库》系列第3篇,本系列专门聚焦那些能极大提升我们量化研究和实盘效率的工具,打造一个覆盖数据、回测、分析到实战的全流程工具箱。
大家好,我是木泽!
上一章我们探讨了全球数据源的获取,粮草已备。目前,是时候打磨我们武器库中最核心、最高频使用的“瑞士军刀”——Pandas了!任何量化策略,都始于对数据的处理与洞察。Pandas 的强劲远不止于read_csv。
今天,我们就来深入探索 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 (时间位移)。熟练运用它们,你将能优雅而高效地完成绝大多数金融数据的预处理工作。
动手练习:
- 创建一个包含价格和成交量的模拟日线数据 DataFrame。
- 将其重采样为周线数据,要求计算出周线的开盘价、最高价、最低价、收盘价和总成交量。
- 计算该数据的 5 日收益率(即今天收盘价相对于 5 天前收盘价的变化率)。
今日话题
你最常用的 Pandas 函数是哪个?
或者在数据处理中踩过什么有趣的“坑”?
欢迎在评论区分享你的实战经验!
#量化教程 #量化投资 #量化武器库





















- 最新
- 最热
只看作者