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

ptrade 平台如何利用 Level-2 逐笔委托数据分析主力大单意图?

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

问题描述

ptrade Level-2 实战:基于逐笔委托 business_direction 判断主力资金意图
在 ptrade 的 tick_data 事件中,如何通过逐笔委托(order)数据里的 business_direction(委托方向:买/卖/借入/出借)和委托量来分析盘口主力大单的意图?

解决方案

ptrade Level-2 逐笔委托数据解析

在 ptrade 的 tick_data(context, data) 事件中,如果开通了 Level-2 行情,可以通过 data[security]['order'] 获取到最近一笔逐笔委托数据。该数据是一个 DataFrame,其中包含关键字段 business_direction(委托方向)和 business_amount(委托数量)。

1. business_direction 字段定义

  • 1 (买):代表买方主动委托。若委托量极大,通常暗示主力资金在建仓或护盘。
  • 0 (卖):代表卖方主动委托。若伴随大单,可能暗示主力出货或压盘。
  • 2 (借入):代表融资融券中的“借入”意图(通常为融券卖出准备)。
  • 3 (出借):代表转融通中的“出借”意图(通常为大股东或机构出借证券)。

2. 主力意图识别逻辑

我们可以通过设定一个大单阈值(例如单笔委托金额超过 50 万元,或委托股数超过 50,000 股),在 tick_data 中实时过滤出主力大单,并根据 business_direction 进行分类统计,从而研判主力意图。


实战策略源码

以下是一个在 tick_data 中实时监控主力大单意图的完整 ptrade 策略示例:

# -*- coding: utf-8 -*-

def initialize(context):
    # 订阅目标股票
    g.security = '600570.SS'  # 恒生电子
    set_universe(g.security)
    
    # 设定大单阈值(例如单笔委托超过 100,000 股)
    g.large_order_threshold = 100000 

def tick_data(context, data):
    security = g.security
    if security not in data:
        return
        
    # 获取逐笔委托数据
    order_df = data[security].get('order')
    
    # 确保有逐笔委托数据且不为空
    if order_df is not None and not order_df.empty:
        # 遍历最近的逐笔委托记录
        for index, row in order_df.iterrows():
            amount = row['business_amount']
            direction = row['business_direction']
            price = row['hq_px']
            order_no = row['order_no']
            
            # 过滤主力大单
            if amount >= g.large_order_threshold:
                # 计算大单估算金额
                order_value = amount * price
                
                # 根据 business_direction 判断意图
                if direction == 1:
                    log.info(f"【主力买入大单】单号:{order_no} | 价格:{price} | 数量:{amount}股 | 金额:{order_value:.2f}元 -> 暗示主力积极建仓/护盘")
                    # 策略逻辑:可在此处加入跟单买入信号
                    
                elif direction == 0:
                    log.info(f"【主力卖出大单】单号:{order_no} | 价格:{price} | 数量:{amount}股 | 金额:{order_value:.2f}元 -> 暗示主力压盘/出货")
                    # 策略逻辑:可在此处加入避险卖出信号
                    
                elif direction == 2:
                    log.info(f"【主力借入大单】单号:{order_no} | 价格:{price} | 数量:{amount}股 -> 暗示市场融券卖出意图增加,警惕空头压力")
                    
                elif direction == 3:
                    log.info(f"【机构出借大单】单号:{order_no} | 价格:{price} | 数量:{amount}股 -> 机构转融通出借,市场券源增加")

def handle_data(context, data):
    # tick级别策略中,handle_data 可保持为空
    pass

核心注意事项

  1. Level-2 权限:逐笔委托数据(order)必须在开通柜台 Level-2 行情权限后才能获取,否则 data[security]['order'] 将返回 None
  2. 性能优化tick_data 每 3 秒触发一次,处理高频逐笔数据时,应尽量避免复杂的循环和 I/O 操作。如果订阅股票较多,建议在 initialize 中设置 set_parameters(tick_data_no_l2="0") 确保 L2 数据正常推送,并使用 is_dict=True 的高频接口加速数据获取。