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

ptrade 平台 get_individual_transaction 返回的 Pandas Panel 对象包含哪些字段?如何解析?

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

问题描述

get_individual_transaction获取的数据结构是什么?

get_individual_transaction返回的Pandas Panel对象包含哪些字段,如何解析这些数据?

解决方案

在 ptrade 量化交易平台中,get_individual_transaction 接口用于获取当日的逐笔成交行情数据。当在 Python 3.5 环境下且未指定 is_dict=True 时,该接口默认返回一个 Pandas Panel 对象(在 Python 3.11 环境下则返回 DataFrame)。

以下是针对 Pandas Panel 返回数据结构的详细解析:

1. Pandas Panel 数据结构解析

返回的 Pandas Panel 对象包含三个维度(Axes):

  • Items axis (0轴): 股票代码列表(字符串类型,如 '000001.SZ')。
  • Major_axis axis (1轴): 数据索引,通常为自然数列(表示第几笔成交)。
  • Minor_axis axis (2轴): 具体的逐笔成交字段信息。

2. Minor_axis 包含的字段说明

Minor_axis 包含了每笔成交的详细信息,具体字段如下:

  • business_time: 时间戳(毫秒级,numpy.int64
  • hq_px: 成交价格(numpy.float64
  • business_amount: 成交数量(numpy.int64
  • trade_index: 成交编号(numpy.int64
  • business_direction: 成交方向(numpy.int64,0 – 卖,1 – 买)
  • buy_no: 叫买方编号(numpy.int64
  • sell_no: 叫卖方编号(numpy.int64
  • trans_flag: 成交标记(numpy.int64,0 – 普通成交,1 – 撤单成交)
  • trans_identify_am: 盘后逐笔成交序号标识(numpy.int64,0 – 盘中,1 – 盘后)
  • channel_num: 成交通道信息(numpy.int64

3. 如何解析和使用这些数据

要从 Panel 对象中提取特定股票的数据,可以通过股票代码作为键来获取对应的 DataFrame。然后,就可以像操作普通 DataFrame 一样提取具体的字段。

代码示例

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:
        # 获取当前股票池逐笔成交数据 (Python 3.5 环境下默认返回 Panel)
        transaction_panel = get_individual_transaction()
        
        if transaction_panel is not None:
            # 1. 提取特定股票的 DataFrame
            # 注意:在 Python 3.11 中返回的是 DataFrame,需要用 query 过滤
            # 以下是针对 Panel (Python 3.5) 的解析方式:
            try:
                df_000001 = transaction_panel['000001.SZ']
                log.info("000001.SZ 的逐笔成交数据:\n%s" % df_000001)
                
                # 2. 提取特定字段,例如成交量
                business_amount = df_000001["business_amount"]
                log.info("000001.SZ 的成交量序列:\n%s" % business_amount)
                
                # 3. 获取最新一笔成交的价格
                if len(df_000001) > 0:
                    latest_price = df_000001.iloc[-1]["hq_px"]
                    log.info("最新成交价:%s" % latest_price)
            except Exception as e:
                log.error("解析数据失败,可能当前环境返回的不是 Panel 对象:%s" % e)
                
        g.flag = True

性能优化建议
如果您的策略对速度要求较高,或者需要处理大量股票的逐笔数据,强烈建议在调用接口时传入 is_dict=True。返回字典类型数据的速度比返回 DataFrame 或 Panel 类型数据有大幅提升。