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

ptrade 平台调用 get_history 获取前一分钟价格为何有时没数据?

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

问题描述

get_history获取前一分钟价格时,有时候有数据有时候没数据是什么原因?

/

解决方案

在 ptrade 量化交易平台中,使用 get_history 获取前一分钟价格时出现“偶发性无数据(返回为空)”的情况,通常由以下几个原因导致:

1. 多线程并发调用冲突(最常见原因)

根据 ptrade API 文档的特别提示:get_history 接口与 get_price 接口不支持多线程同时调用
如果你在策略中使用了 run_dailyrun_interval 等定时任务函数,并且这些函数与框架的主循环函数(如 handle_datatick_data)在同一时刻都调用了 get_historyget_price 接口,就会产生底层数据请求冲突,从而偶现获取数据为空的现象。

解决办法

  • 错开调用时间:检查策略逻辑,确保 run_intervalrun_daily 的触发时间不要与 handle_data(每分钟/每天触发)完全重合。
  • 集中获取数据:尽量在 handle_data 中统一获取所需数据,然后通过全局变量 g 传递给其他函数使用,避免在多个地方同时发起历史数据请求。

2. 标的在当前分钟无成交或停牌

如果某只股票在特定的一分钟内没有任何交易(流动性差),或者处于停牌状态,交易所不会生成该分钟的标准 K 线数据。

解决办法

  • 利用 get_historyfill 参数。默认情况下 fill='nan',获取不到数据时会用 NaN 填充。你可以将其设置为 fill='pre',这样当某一时刻获取不到分钟数据时,系统会自动用上一分钟的数据进行填充。
    # 使用 fill='pre' 填充缺失的分钟数据
    df = get_history(count=2, frequency='1m', field='close', security_list='600570.SS', fill='pre')
    

3. 接口调用频率限制或网络延迟

虽然 get_history 获取的是本地/缓存数据,但在某些极端情况下(如瞬间请求大量股票的超长历史数据),可能会因为系统处理不过来而返回空值。

解决办法

  • 增加异常保护机制:在策略中获取数据后,务必先判断返回值是否为 None 或空 DataFrame,再进行后续计算。
    history_data = get_history(5, '1m', 'close', '600570.SS')
    if history_data is not None and not history_data.empty:
        # 执行策略逻辑
        pass
    else:
        log.warning("获取历史数据失败,跳过本轮计算")
    

总结

遇到 get_history 偶发无数据,首先排查是否在 run_intervalhandle_data 中同时调用了该接口。其次,检查是否是冷门股无成交导致,并合理使用 fill='pre' 参数和 try-except 异常处理来增强策略的健壮性。