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

ptrade 接口 get_individual_transaction 获取逐笔成交数据为空怎么办?

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

问题描述

get_individual_transaction返回空数据是什么原因?

使用get_individual_transaction获取逐笔成交数据时,返回的数据为空,是代码有问题吗?

解决方案

在使用 ptrade 量化平台调用 get_individual_transaction 接口获取逐笔成交数据时,如果返回空数据(如 None 或空字典/DataFrame),通常是由以下几个原因导致的。请按照以下步骤进行排查:

1. 核心原因:未开通 Level2 行情权限(最常见)

根据 ptrade API 文档的明确说明:逐笔委托、逐笔成交数据需开通 Level2 行情才能获取到数据,否则无数据返回。

  • 解决方法:请联系您的券商客户经理,确认您的交易账户是否已经开通了 Level2 行情权限。如果没有开通,该接口将无法获取到任何逐笔数据。

2. 股票代码未在股票池中或参数错误

  • 如果您没有通过 stocks 参数显式传入股票代码,接口默认会获取当前股票池中的代码列表。
  • 如果您在 initialize 中没有使用 set_universe 设置股票池,或者传入的 stocks 列表为空/代码格式错误(如缺少 .SS.SZ 后缀),也会导致获取不到数据。
  • 解决方法:检查代码格式,确保股票池已正确设置。

3. 非交易时间或该股票当天无成交

  • 逐笔成交数据是当日的实时数据。如果您在盘前(如 9:30 之前)调用该接口,或者该股票当天停牌、一字跌停/涨停导致没有任何成交记录,接口也会返回空数据。
  • 解决方法:确保在盘中交易时间(9:30-15:00)调用,并确认标的处于正常交易状态。

4. 数据量过大导致获取失败(建议使用 dict 格式)

  • 如果您一次性获取大量股票的逐笔数据,可能会因为数据量过大导致处理超时或返回异常。
  • 优化建议:官方文档强烈建议,在获取逐笔数据时,将 is_dict 参数设置为 True。返回 dict 类型数据的速度比返回 DataFramePanel 类型数据有大幅提升,且能有效避免因股票数量过多(>200只)导致的返回 None 的问题。

正确的代码调用示例

def initialize(context):
    # 设置正确的股票代码后缀
    g.security = "000001.SZ"
    set_universe(g.security)

def before_trading_start(context, data):
    g.flag = False

def handle_data(context, data):
    if not g.flag:
        # 强烈建议:使用 is_dict=True 提升获取速度并防止数据丢失
        transaction = get_individual_transaction([g.security], is_dict=True)
        
        if transaction is not None and g.security in transaction:
            log.info("成功获取逐笔成交数据:%s" % transaction[g.security][:2]) # 打印前两条
        else:
            log.warning("未获取到逐笔成交数据,请检查 Level2 权限或标的状态。")
            
        g.flag = True

总结:遇到 get_individual_transaction 返回空数据,第一步永远是向券商确认 Level2 行情权限是否开通。确认权限无误后,再检查代码逻辑、时间段以及是否使用了 is_dict=True 来优化性能。