🚀 AI 一键生成 ptrade 策略代码

PTrade 高频交易数据解析:tick_data 函数中 tick, order, transcation 详解

ptrade | 发布时间: 2025/11/26
以下内容由 EasyQuant 生成。

问题描述

tick_data 返回的数据里,'tick', 'order', 'transcation' 这三部分具体是什么意思,怎么用?

解决方案

在 PTrade 的 tick_data(context, data) 函数中,data 参数是一个字典,包含了当前时刻推送的高频行情数据。对于每一个标的(如 data['600570.SS']),其返回的值又是一个字典,包含三个核心键值:'tick''order''transcation'

以下是这三部分的具体含义、区别及使用方法:

1. tick:快照数据 (Snapshot)

这是最基础的行情数据,即我们通常在交易软件上看到的盘口快照。

  • 含义:包含了当前时刻的最新价、买卖五档(或十档)、成交量、成交额等汇总信息。
  • 数据类型DataFrame
  • 权限要求:基础行情权限即可(Level 1 或 Level 2 均包含)。
  • 常用字段
    • last_px: 最新成交价。
    • bid_grp / offer_grp: 买/卖档位信息(包含价格、挂单量)。
    • business_amount: 当日累计成交数量。
    • business_balance: 当日累计成交金额。
  • 使用场景:判断当前价格是否触发交易信号,或者根据买一/卖一价进行报单。

2. order:逐笔委托 (Level 2 专属)

这是 Level 2 行情特有的数据,记录了交易所撮合引擎接收到的每一笔委托单的细节。

  • 含义:展示了市场上所有的报单行为(挂单),无论是否成交。它可以反映市场深度的变化和主力挂单意图。
  • 数据类型DataFrameNone(如果没有 Level 2 权限或该时刻无新委托,则为 None)。
  • 权限要求:必须开通 Level 2 行情。
  • 常用字段
    • business_time: 委托时间。
    • hq_px: 委托价格。
    • business_amount: 委托数量。
    • business_direction: 委托方向(0-卖,1-买)。
    • trans_kind: 委托类别(如市价、限价)。
  • 使用场景:分析大单挂单压力(压单/托单),识别主力资金的挂单意图。

3. transcation:逐笔成交 (Level 2 专属)

这是 Level 2 行情特有的数据,记录了交易所撮合引擎撮合成功的每一笔成交单的细节。
(注:PTrade API 文档中该键名为 transcation,请注意拼写)

  • 含义:展示了真实的成交情况。通过它可以还原分时图和成交明细,判断主动性买盘和卖盘。
  • 数据类型DataFrameNone(如果没有 Level 2 权限或该时刻无新成交,则为 None)。
  • 权限要求:必须开通 Level 2 行情。
  • 常用字段
    • hq_px: 成交价格。
    • business_amount: 成交数量。
    • business_direction: 成交方向(0-卖,1-买,通常用于判断主动性买卖)。
    • buy_no / sell_no: 买方/卖方委托单号(可用于追踪同一笔大单被拆分成多少笔小成交)。
  • 使用场景:计算资金流向(大单买入/卖出),分析主动性买盘力度,识别“对敲”等异常交易行为。

代码示例

以下代码展示了如何在 tick_data 中提取并使用这三部分数据:

def initialize(context):
    # 设置关注的股票
    g.security = '600570.SS'
    set_universe(g.security)

def tick_data(context, data):
    symbol = g.security
    
    # 确保数据中包含该股票
    if symbol not in data:
        return
        
    quote = data[symbol]
    
    # ---------------------------------------------------
    # 1. 处理 Tick 快照数据 (基础)
    # ---------------------------------------------------
    tick_df = quote['tick']
    # 获取最新价 (注意:返回的是Series/Array,通常取第一个元素)
    current_price = tick_df['last_px'][0]
    # 获取买一价
    # bid_grp 是一个字典字符串,需要解析或直接访问结构
    # 简单示例:打印最新价
    # log.info("Tick最新价: %s" % current_price)
    
    # ---------------------------------------------------
    # 2. 处理 Order 逐笔委托 (需 Level 2)
    # ---------------------------------------------------
    order_df = quote['order']
    if order_df is not None and len(order_df) > 0:
        # 获取最近一笔委托的数量和价格
        last_order_vol = order_df['business_amount'][0]
        last_order_price = order_df['hq_px'][0]
        
        # 简单的策略逻辑:如果有超过1000手的大单挂入
        if last_order_vol > 100000: # 假设单位是股
            log.info("监测到大额委托: 价格 %s, 数量 %s" % (last_order_price, last_order_vol))

    # ---------------------------------------------------
    # 3. 处理 Transcation 逐笔成交 (需 Level 2)
    # ---------------------------------------------------
    # 注意键名拼写是 transcation
    trans_df = quote['transcation']
    if trans_df is not None and len(trans_df) > 0:
        # 获取最近一笔成交的方向 (1为主动买入,0为主动卖出)
        direction = trans_df['business_direction'][0]
        volume = trans_df['business_amount'][0]
        price = trans_df['hq_px'][0]
        
        # 简单的策略逻辑:大单主动买入
        if direction == 1 and volume > 50000: # 500手
            log.info("监测到大额主动买入: 价格 %s, 数量 %s" % (price, volume))
            # 可以在此处触发下单逻辑
            # order_tick(symbol, 100, limit_price=price)

def handle_data(context, data):
    pass

总结

数据部分 键名 (Key) 含义 核心用途 权限要求
快照 'tick' 盘口切片信息 获取最新价、买卖档位,基础交易判断 基础权限
逐笔委托 'order' 每一笔报单记录 分析挂单意图、压力位、支撑位 Level 2
逐笔成交 'transcation' 每一笔撮合记录 分析资金流向、主动买卖力度 Level 2

Q&A

Q: 如果我没有 Level 2 行情权限,调用 tick_data 会报错吗?
A: 不会报错。但是 data[code]['order']data[code]['transcation'] 会返回 None。在编写策略时,务必增加 if ... is not None: 的判断逻辑,以防止代码因处理空数据而中断。

Q: tick_data 的运行频率是多少?
A: 在 PTrade 中,tick_data 通常每 3 秒触发一次(对应交易所的快照推送频率)。

Q: 逐笔成交里的 business_direction 如何判断买卖?
A: 通常情况下,0 代表卖(主动卖出,即内盘成交),1 代表买(主动买入,即外盘成交)。这对于判断当前时刻是多方占优还是空方占优非常重要。