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

ptrade Level-2 实战:如何使用 get_tick_direction 分析分时成交主动买卖方向?

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

问题描述

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

Title: ptrade Level-2 实战:使用 get_tick_direction 分析分时成交主动买卖方向

Question: 在 ptrade 中如何通过 get_tick_direction 获取分时成交数据并判断多空力量?

解决方案

一、接口简介与使用前提

在 ptrade 量化交易系统中,get_tick_direction 是用于获取当日分时成交行情(Tick逐笔方向)的 Level-2 专属 API。通过分析分时成交中的主动买单(外盘)与主动卖单(内盘),量化策略可以实时捕捉盘中的资金情绪与多空力量对比。

使用前提条件:

  1. 权限要求:必须开通柜台或行情源的 Level-2 行情 权限,否则调用该接口将无数据返回。
  2. 运行环境:该函数仅在交易模块可用,不支持回测环境。
  3. 数据时效:目前仅支持查询当日的实时分时成交数据。

二、API 语法与参数解析

get_tick_direction(symbols=None, query_date=0, start_pos=0, search_direction=1, data_count=50)

参数说明:

  • symbols: 标的代码或代码列表,默认为当前股票池列表(如 ['000001.SZ', '600570.SS'])。
  • query_date: 查询日期,默认为 0(代表当日),格式为 YYYYMMDD
  • start_pos: 起始位置,默认为 0
  • search_direction: 搜索方向,1 表示向前,2 表示向后(默认 1)。
  • data_count: 获取数据条数,默认为 50,最大支持 200

返回值说明:

返回一个 OrderedDict 对象,字典的 key 为股票代码,value 为该代码的分时成交数据。其中核心字段包含:

  • time_stamp: 时间戳(毫秒级)。
  • hq_px: 成交价格。
  • business_amount: 成交数量。
  • business_balance: 成交金额。
  • business_count: 成交笔数。
  • business_direction: 成交方向0: 主动卖出/内盘,1: 主动买入/外盘,2: 平盘)。

三、多空力量判断逻辑

通过统计近 $N$ 笔分时成交记录中的买卖方向:

  1. 主动买盘总额(Buy Volume):统计 business_direction == 1business_amount 累加值。
  2. 主动卖盘总额(Sell Volume):统计 business_direction == 0business_amount 累加值。
  3. 多空比率(Net Buy Ratio):计算 $\frac{\text{买盘量} - \text{卖盘量}}{\text{买盘量} + \text{卖盘量}}$。
    • 若比率显著大于 0(例如 > 0.3),说明多头占据绝对优势,存在资金主动拉升迹象;
    • 若比率显著小于 0(例如 < -0.3),说明空头抛压较重;
    • 若接近 0,则处于多空拉锯状态。

四、实战代码示例

以下策略展示了如何在 ptrade 盘中运行周期内,定时获取股票的分时成交数据并计算多空力量比率:

def initialize(context):
    # 设置股票池
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 设置定时任务,每10秒分析一次多空力量
    run_interval(context, analyze_tick_direction, seconds=10)

def analyze_tick_direction(context):
    security = g.security
    
    # 获取最近200条分时成交数据
    direction_data = get_tick_direction(symbols=security, data_count=200)
    
    if not direction_data or security not in direction_data:
        log.warning("未获取到 %s 的 Level-2 分时成交数据" % security)
        return
    
    tick_info = direction_data[security]
    
    # 获取成交方向和成交量数组
    directions = tick_info.get('business_direction', [])
    amounts = tick_info.get('business_amount', [])
    
    if len(directions) == 0:
        return
        
    buy_vol = 0   # 主动买盘总量
    sell_vol = 0  # 主动卖盘总量
    
    # 遍历计算多空成交量
    for direct, amt in zip(directions, amounts):
        if direct == 1:    # 主动买
            buy_vol += amt
        elif direct == 0:  # 主动卖
            sell_vol += amt
            
    total_vol = buy_vol + sell_vol
    if total_vol == 0:
        return
        
    # 计算多空净买入比例
    net_buy_ratio = (buy_vol - sell_vol) / float(total_vol)
    
    log.info("[%s] 最近%d笔分时成交分析 - 主动买量: %d, 主动卖量: %d, 净买比率: %.2f%%" % 
             (security, len(directions), buy_vol, sell_vol, net_buy_ratio * 100))
             
    # 策略触发信号示例:当主动买盘占比超过 60% 且无持仓时挂单买入
    if net_buy_ratio > 0.2 and get_position(security).amount == 0:
        log.info("多头力量强劲,触发买入信号!")
        # order(security, 100)

def handle_data(context, data):
    pass

五、注意事项与优化建议

  1. 频次与性能get_tick_direction 最多返回 200 条记录,若需监测全天高频方向,建议结合 run_interval 高频调用并自行在策略全局变量 g 中维护数据队列。
  2. 配合 Level-2 盘口:可配合 get_gear_price(十档盘口)或 get_snapshot 一起使用,结合委买委卖队列挂单情况,进一步过滤虚假拉升与挂单砸盘信号。