在量化交易中,pandas 是最核心的数据处理库之一,主要用于管理时间序列数据(如股票价格、成交量、财务信息等)。以下是 pandas 在量化交易中最常用的核心函数及其应用场景,结合实际策略需求进行分类说明:
一、基础数据操作
| 函数 | 用途 | 示例 |
| pd.read_csv() | 读取行情或因子数据 | |
| / | | |
| 保存处理后的数据 | |
| / | | |
| 查看前/后 n 行数据,快速检查数据质量 | |
| / | | |
| 查看数据结构与统计摘要,检查缺失值、异常值 |
二、时间序列处理(关键!)
量化交易大量依赖于时间序列操作。
| 函数 | 用途 | 示例 |
| 将字符串转为日期类型 | |
| 设置时间为索引,时间对齐和切片必备 | |
| 重采样:日线化 | |
| 转5分钟K线 | |
| 数据平移 n 期,计算昨日收盘价: | |
| / | | |
| 处理时区问题,防止跨市场时间错乱 |
三、行情计算与技术指标构建
这些是策略开发的基础。
| 函数 | 用途 | 示例 |
| 计算收益率 | |
| 差分 n 期 | |
| 移动平均线(MA) | |
| 滚动标准差(波动率) | |
| 累计最大值,用于回撤计算 | |
| / | | |
| 累计和/积 | |
| ? 常见组合: | # 20日布林带 | window = 20 df['ma20'] = df['close'].rolling(window).mean() df['std20'] = df['close'].rolling(window).std() df['upper'] = df['ma20'] + 2 * df['std20'] df['lower'] = df['ma20'] - 2 * df['std20'] |
四、数据筛选与条件判断
用于生成买卖信号。
| 函数 | 用途 | 示例 |
| 条件筛选,找出价格上穿均线的行 | |
| 向量化 if-else | import numpy as np df['signal'] = np.where(df['close'] > df['ma20'], 1, 0) | | | 使用表达式查询,更清晰的过滤语法 | |
五、分组与聚合操作(多标的分析)
适用于选股、行业轮动等场景。
| 函数 | 用途 | 示例 |
| 按股票代码分组 | |
| / | | |
| 按时间频率分组,月度收益统计 | |
| / | | |
| 聚合多种统计量 df.groupby('symbol').agg({ 'return': ['mean', 'std'], 'volume': 'sum' }) |
六、合并与连接数据
整合多个数据源(如价格+财务+因子)。
| 函数 | 用途 | 示例 |
| 上下或左右拼接,合并不同资产的时间序列 | |
| / | | |
| 类似 SQL 的 join,添加宏观因子到行情数据 | |
| / | | |
| 索引对齐合并,推荐用于时间序列 |
七、实用技巧(提升效率)
| 技巧 | 说明 | 使用 |
| 安全访问数据 | |
| / | | |
| 避免 for 循环,使用向量化运算,性能提升数十倍 | |
| / | | |
| 提高可读性 | |
| / | | |
| 处理 NaN,防止策略因缺失值出错 |
实战示例:简单双均线策略信号生成
import pandas as pd
import numpy as np
# 假设 df 是带有 'close' 列的 DataFrame,索引为 datetime
df['ma5'] = df['close'].rolling(5).mean()
df['ma20'] = df['close'].rolling(20).mean()
# 金叉:短均线上穿长均线
df['signal'] = np.where(
(df['ma5'] > df['ma20']) & (df['ma5'].shift(1) <= df['ma20'].shift(1)),
1,
)
# 收益率与累计收益
df['return'] = df['close'].pct_change()
df['strategy_return'] = df['signal'].shift(1) * df['return'] # 信号次日执行
df['cumulative'] = (1 + df['strategy_return']).cumprod()
总结:量化中最常用的 Pandas 函数清单
| 类别 | 核心函数 |
| 数据读写 | pd.read_csv(), pd.to_csv() |
| 时间序列处理 | .to_datetime(), .set_index(), .resample(), .shift() |
| 行情计算与技术指标构建 | .pct_change(), .diff(), .rolling().mean(), .rolling().std(), .cummax(), .cumsum() |
| 数据筛选与条件判断 | .query(), np.where() |
| 分组与聚合操作 | .groupby(), .agg() |
| 合并与连接数据 | .concat(), .merge(), .join() |
| 实用技巧 | .loc[], .iloc[], 避免 for 循环,向量化运算,.fillna(), .dropna() |
read_csv
to_pickle
set_index
时间管理
to_datetime
resample
shift
rolling
收益分析
pct_change
diff
cumsum
cumprod
指标设计
rolling().mean/std/min/max
expanding()
条件评估
np.where
query
loc
分类聚合
groupby
agg
transform
数据整合
merge
concat
join
????
建议掌握水平:
作为量化开发人员,你应能够熟练编写基于 pandas 的完整策略流程,包括数据加载 → 清洗 → 特征构建 → 信号生成 → 收益分析 → 回测评估。

雷达卡


京公网安备 11010802022788号







