🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

为什么 ptrade 中 get_history 获取的 K 线数据少于设定的 count 值?

ptrade | 发布时间: 2026/6/4
以下内容由 EasyQuant 生成。

问题描述

get_history函数获取的数据量不符合预期?

设置count=10获取10条K线数据,但实际返回的数据少于10条是什么原因?

解决方案

在 ptrade 量化平台中使用 get_history 函数时,如果设置了 count=10 但实际返回的数据少于 10 条,通常是由以下几个原因导致的:

1. 标的上市时间不足

如果查询的股票(或可转债、基金等)上市时间较短,距离当前查询时间不足 10 个交易日(或对应的 K 线周期),系统只能返回自上市以来的所有数据。例如,某只新股刚上市 5 天,设置 count=10 也只能获取到 5 条日线数据。

2. 多线程并发调用导致数据异常

根据 ptrade API 文档的特别提示:get_history 接口与 get_price 接口不支持多线程同时调用。如果在 run_dailyrun_interval 等定时任务函数中,与 handle_data 等框架模块在同一时刻并发调用了 get_historyget_price 接口,会偶现获取数据为空或数据量不全的现象。建议错开调用时间或增加保护机制。

3. 停牌数据的二次过滤

ptrade 官方对于停牌的处理逻辑是:不跳过停牌日期,时间轴保持连续,停牌日使用前一交易日的数据填充,且成交量(volume)为 0。如果 get_history 本身返回了 10 条数据,但您的策略代码中包含了类似 df[df['volume'] > 0] 的过滤逻辑来剔除停牌日,那么最终您看到的数据就会少于 10 条。

4. 历史数据范围限制

ptrade 的 get_history 接口只能获取 2005 年之后的数据。如果您在回测较早期的行情,且设定的 count 往前推算跨越了 2005 年 1 月 1 日,那么 2005 年之前的数据将无法获取,导致返回条数不足。

排查建议:

  1. 检查标的上市日期:使用 get_stock_info(security) 查看 listed_date,确认其上市时间是否足够长。
  2. 检查并发逻辑:排查策略中是否有多个定时任务在同一时刻请求历史数据。
  3. 打印原始数据:在不过滤任何条件的情况下,直接 log.info(len(df)) 查看原始返回的长度,确认是否包含 volume=0 的停牌数据。