3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,get_history 和 get_price 都是用于获取历史 K 线数据的核心 API。整体而言,两者的底层数据数据取数性能相当,但在调用便捷性、参数灵活性以及数据格式设置(如 is_dict=True) 上存在显著差异。
| 特性 / 接口 | get_history |
get_price |
|---|---|---|
| 核心定位 | 获取最近 N 条历史行情 K 线数据 | 获取指定时间段或前 N 条历史行情 K 线数据 |
| 时间范围设置 | 仅支持通过 count 参数指定获取最近 N 条 |
支持 start_date + end_date 或 end_date + count 的灵活组合 |
| 默认股票池 | security_list=None 时默认取 set_universe 设置的股票池 |
必须显式指定 security 参数 |
| 返回数据包含当天 | 可通过 include=True/False 控制是否包含当前周期 |
不包含当天数据(仅返回历史数据) |
| 多线程限制 | 不支持与 get_price 多线程/跨线程同时调用 |
不支持与 get_history 多线程/跨线程同时调用 |
在相同查询条件下(如均获取单只或少量股票的 100 根日线数据),get_history 与 get_price 的耗时基本一致。
is_dict=True无论是使用 get_history 还是 get_price,决定取数速度的最大因素是返回的数据结构格式:
is_dict=False):返回 pandas.DataFrame 或 pandas.Panel 对象。构建 DataFrame/Panel 需要额外的类型转换开销,在多标的、高频调用的场景下性能消耗较大。is_dict=True):直接返回 OrderedDict 结构(格式为 {stock_code: array()})。开启 is_dict=True 可以大幅提升数据解析与提取速度,建议对速度敏感的 tick 级或分钟级实盘策略开启此选项。推荐使用 get_history 的场景:
set_universe 设定了全局股票池,希望直接批量获取股票池数据。include=True)。推荐使用 get_price 的场景:
'20230101' 至 '20231231')的数据进行区间分析。以下示例展示了如何在 ptrade 策略中使用 is_dict=True 高效获取历史 K 线:
def initialize(context):
g.security = ['600570.SS', '000001.SZ']
set_universe(g.security)
def handle_data(context, data):
# 使用 is_dict=True 获取获取高效的 OrderedDict 数据结构
history_dict = get_history(100, frequency='1d', field=['close'], security_list=g.security, is_dict=True)
if history_dict and '600570.SS' in history_dict:
# 获取 600570.SS 的收盘价数组
close_prices = history_dict['600570.SS']['close']
ma5 = close_prices[-5:].mean()
log.info('600570.SS 5日均价为: %s' % ma5)
is_dict 设置为 True。run_daily 或 run_interval 等定时线程中与 handle_data 主线程同时调用 get_history 或 get_price,否则会导致数据获取偶发为空。