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

PTrade Level-2 逐笔实战:如何在 tick_data 回调中解析逐笔委托与逐笔成交行情?

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: PTrade Level-2 逐笔实战:在 tick_data 函数中解析逐笔委托与逐笔成交行情

Question: 如何在 ptrade 的 tick_data 回调中获取并解析逐笔委托 (order) 和逐笔成交 (transcation) 数据?

解决方案

PTrade Level-2 逐笔实战:在 tick_data 函数中解析逐笔委托与逐笔成交行情

在 PTrade 量化交易平台中,高频策略与微观结构交易通常需要依赖 Level-2 逐笔行情。通过 tick_data 回调函数,策略可以每 3 秒接收一次高频行情推送,并实时提取逐笔委托(order)与逐笔成交(transcation)数据。


一、tick_data 数据结构解析

tick_data(context, data) 中,data 参数是一个字典,格式如下:

{
    '股票代码': {
        'order(最近一条逐笔委托)': DataFrame / None,
        'tick(当前tick数据)': DataFrame,
        'transcation(最近一条逐笔成交)': DataFrame / None
    }
}

注意:逐笔委托与逐笔成交数据需要券商账号开通 Level-2 行情权限 才能推送,否则对应字段将返回 None


二、核心字段说明

1. 逐笔委托 (order) 关键字段

  • business_time: 毫秒级时间戳
  • hq_px: 委托价格
  • business_amount: 委托数量
  • order_no: 委托编号
  • business_direction: 委托方向(0 - 卖,1 - 买,2 - 借入,3 - 出借)
  • trans_kind: 委托类别(1 - 市价委托,2 - 限价委托,3 - 本方最优)

2. 逐笔成交 (transcation) 关键字段

  • business_time: 毫秒级时间戳
  • hq_px: 成交价格
  • business_amount: 成交数量
  • trade_index: 成交编号
  • business_direction: 成交方向(0 - 卖,1 - 买)
  • buy_no: 叫买方编号
  • sell_no: 叫卖方编号
  • trans_flag: 成交标记(0 - 普通成交,1 - 撤单成交)

三、完整策略代码示例

以下示例展示了如何在 PTrade 的 tick_data 回调中提取逐笔行情,并根据买一档价格触发下单:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def tick_data(context, data):
    security = g.security
    if security not in data:
        return
    
    # 1. 解析 Tick 档位数据(买一价)
    tick_df = data[security]['tick']
    bid_grp = eval(tick_df['bid_grp'][0]) if isinstance(tick_df['bid_grp'][0], str) else tick_df['bid_grp'][0]
    bid_price1 = bid_grp[1][0]  # 买一价
    log.info(f"{security} 当前买一价: {bid_price1}")
    
    # 2. 解析逐笔委托数据 (order)
    order_df = data[security]['order']
    if order_df is not None and not order_df.empty:
        latest_order = order_df.iloc[0]
        log.info(f"[逐笔委托] 时间: {latest_order['business_time']}, 价格: {latest_order['hq_px']}, 数量: {latest_order['business_amount']}, 方向: {latest_order['business_direction']}")
    
    # 3. 解析逐笔成交数据 (transcation)
    trans_df = data[security]['transcation']
    if trans_df is not None and not trans_df.empty:
        latest_trans = trans_df.iloc[0]
        log.info(f"[逐笔成交] 时间: {latest_trans['business_time']}, 价格: {latest_trans['hq_px']}, 数量: {latest_trans['business_amount']}, 方向: {latest_trans['business_direction']}")
    
    # 4. 示例交易逻辑:当买一价达到设定阈值时以买一档下单
    if bid_price1 > 35.0:
        # 使用 tick 专属下单接口 order_tick,priceGear='1' 表示买一档
        order_tick(security, 100, priceGear='1')

def handle_data(context, data):
    pass

四、实战注意事项

  1. 下单接口限制:在 tick_data 函数中下单时,必须使用专门的 order_tick() 函数,不能直接使用普通 order()
  2. 策略配置参数:如果不需要 Level-2 数据,可在 initialize 中使用 `set_parameters(tick_data_no_l2=