3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)量化交易平台中,get_bars 和 get_price 是最常用的两个历史行情数据获取接口。虽然它们都能用于查询 K 线数据,但在返回数据结构、性能效率、停牌处理以及复权机制上存在显著差异。
| 特性 / API | get_price | get_bars |
|---|---|---|
| 默认返回类型 | pandas.DataFrame 或 Panel |
numpy.ndarray(可通过 df=True 返回 DataFrame) |
| 性能表现 | 较慢(涉及 DataFrame 转换开销) | 极快(原生返回 NumPy 数组,内存占用低) |
| 停牌处理 | 默认用 pre_close 填充(可设 skip_paused) |
不跳过也不填充停牌,仅返回实际有交易的 bar |
| 支持时间周期 | 日线 (1d) 与分钟线 (1m) |
标准周期 (1m, 5m, 1d, 1w, 1M) 及非标准周期 (Xm) |
| 包含当前 Bar | 不支持包含未完结的当前 Bar | 支持(通过设置 include_now=True) |
| 多标的查询 | 返回 Panel 或 MultiIndex DataFrame | 返回字典 (Key 为标的代码) 或 MultiIndex DataFrame |
get_bars 性能更优:由于默认返回轻量级的 numpy.ndarray,在频繁调用或大批量标的计算时,内存占用小,运行速度显著快于 get_price。get_price 内存开销较大:每次调用都会构建 Pandas DataFrame/Panel 对象,数据转换和索引对齐会带来额外的 CPU 与内存开销。get_price:为了保证时间轴对齐,停牌期间默认使用上一交易日的收盘价填充。get_bars:直接过滤停牌数据。如果请求 count=10 但中间有 2 天停牌,它只会返回实际交易的 8 根 Bar(或实际存在的数量),不会自动填充。因此在多标的横截面处理时需注意长度一致性。get_bars:支持设置 fq_ref_date 参数,便于进行指定基准日期的定点复权或动态复权;且通过 include_now=True 可以获取盘中当前尚未收盘的实时 Bar 数据。get_price:复权选项仅支持 'pre'(前复权)、'post'(后复权)和 None(不复权)。import datetime
from jqdata import *
# 获取平安银行过去 5 天的日线数据,返回 numpy.ndarray
array_data = get_bars('000001.XSHE', count=5, unit='1d', fields=['date', 'open', 'close'])
print(array_data['close']) # 直接按字段读取,速度极快
from jqdata import *
# 获取多只股票指定时间段的收盘价
df = get_price(['000001.XSHE', '600000.XSHG'], start_date='2023-01-01', end_date='2023-01-10', fields=['close'], panel=False)
print(df)
get_bars):
get_bars(..., df=False)。get_price):
get_price 更方便。end_date / end_dt 不能超过当前逻辑时间 context.current_dt。