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

PTrade 平台如何在 tick_data 中实时提取与筛选逐笔成交大单?(附 Python 源码)

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

问题描述

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

Title: PTrade Tick 级策略:在 tick_data 中解析逐笔成交大单监控

Question: 如何在 PTrade 的 tick_data 函数中实时提取和筛选逐笔成交的大单?

解决方案

PTrade 平台如何在 tick_data 中实时提取与筛选逐笔成交大单?

在 PTrade 极速量化交易系统中,tick_data 函数每 3 秒触发一次,用于处理 Tick 级别的实时行情与交易逻辑。通过开通 Level2 行情,我们可以从 data 参数中直接获取**逐笔成交(transcation)逐笔委托(order)**数据,从而精准捕捉机构或主力资金的大单交易动向。


一、核心原理与数据结构

tick_data(context, data) 中,data 参数是一个字典。针对每一个订阅标的,其内部包含三大核心数据字段:

  1. tick:当前 Tick 盘口及快照数据。
  2. order:最近一条逐笔委托(需 Level2 权限)。
  3. transcation:最近一条逐笔成交(需 Level2 权限)。

逐笔成交 (transcation) 数据结构

transcation 返回一个包含以下关键字段的 DataFrame:

  • business_time:时间戳(毫秒级)
  • hq_px:成交价格
  • business_amount:成交量(股/张)
  • trade_index:成交编号
  • business_direction:成交方向(0 - 卖,1 - 买)
  • buy_no / sell_no:叫买方/叫卖方编号

二、逐笔大单提取与筛选步骤

  1. 初始化订阅:在 initialize 中使用 set_universe 设定监控股票池。
  2. 检查 Level2 权限:确保数据不为 None
  3. 提取逐笔成交:从 data[security]['transcation'] 获取最新逐笔成交 DataFrame。
  4. 设置阈值过滤:根据单笔成交量(如超过 100,000 股)或成交额(如超过 1,000,000 元)筛选主力大单。
  5. 触发交易或日志:根据大单方向(买/卖)执行 order_tick 下单或记录日志。

三、完整 Python 策略源码示例

python # -*- coding: utf-8 -*- def initialize(context): # 1. 设置监控标的 g.security = '600570.SS' # 恒生电子 set_universe(g.security) # 2. 设置大单筛选阈值(例如:单笔成交量大于 500 手 / 50000 股) g.big_order_amount = 50000 def tick_data(context, data): security = g.security if security not in data: return # 获取逐笔成交数据 transcation_df = data[security].get('transcation') # 判断是否有 Level2 逐笔成交数据 if transcation_df is None or transcation_df.empty: return # 提取最新一条逐笔成交记录 latest_trans = transcation_df.iloc[-1] amount = latest_trans.get('business_amount', 0) price = latest_trans.get('hq_px', 0.0) direction = latest_trans.get('business_direction', -1) trade_time = latest_trans.get('business_time', '') # 计算成交金额 balance = price * amount # 筛选大单 if amount >= g.big_order_amount: direction_str = "主动买单(主买)" if direction == 1 else ("主动卖单(主卖)" if direction == 0 else "未知") log.info(f"[大单监控提醒] 时间: {trade_time} | 代码: {security} | 方向: {direction_str} | 价格: {price} | 成交量: {amount}股 | 总额: {balance:.2f}元") # 示例逻辑:若出现主动买入大单,按买一档跟单下单(请根据实际风险控制编写) # if direction == 1: # order_tick(security, 100, "1") # 以买一档买入 100 股 def handle_data(context, data): pass


四、注意事项与最佳实践

  1. Level2 行情权限:逐笔委托与逐笔成交推送需要券商开通 Level2 权限,否则 transcation 数据返回为 None
  2. 下单接口限制:在 tick_data 回调函数中下单,必须使用专门的 order_tick() 接口,而非普通的 order()
  3. 数据效率优化:如果监控标的较多,建议在 set_parameters 中合理配置,或使用 is_dict=True 提高高性能数据解析效率。