🚀 AI 一键生成 ptrade 策略代码

PTrade API 详解:如何使用 get_tick_direction 获取分时成交明细?

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

问题描述

怎样获取股票当天的分时成交明细数据,包括每一笔成交的方向是买盘还是卖盘?

解决方案

在PTrade中,获取股票当天的分时成交明细(Tick数据)并分辨买卖方向,主要使用 get_tick_direction 接口。

该接口可以获取当日的分时成交行情数据,其中包含成交方向字段。

核心接口说明

  • 接口名称: get_tick_direction(symbols=None, query_date=0, start_pos=0, search_direction=1, data_count=50)
  • 关键返回值字段: business_direction
    • 0: 卖盘(内盘,主动卖出)
    • 1: 买盘(外盘,主动买入)
    • 2: 平盘
  • 前提条件: 该数据通常需要开通 Level-2 行情权限才能获取到有效数据,否则可能返回空或无数据。

策略代码示例

以下是一个完整的策略示例,展示如何在盘中获取指定股票的分时成交明细,并打印出每一笔的成交时间、价格、数量和买卖方向。

def initialize(context):
    # 设置要获取数据的标的,例如恒生电子
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 仅在交易模式下运行,回测模式下该函数可能无法获取L2级别的分时数据
    if not is_trade():
        log.info("get_tick_direction 接口通常需要实盘L2环境支持")
        return

    # 获取分时成交数据
    # data_count=10 表示获取最近的10条记录
    tick_details = get_tick_direction(symbols=g.security, data_count=10)
    
    if tick_details and g.security in tick_details:
        details = tick_details[g.security]
        
        # 获取各个字段的列表
        timestamps = details['time_stamp']          # 时间戳
        prices = details['hq_px']                   # 成交价格
        volumes = details['business_amount']        # 成交数量
        directions = details['business_direction']  # 成交方向
        
        # 遍历打印最近的成交明细
        # 注意:返回的数据通常是numpy array或list,需要根据索引对应
        count = len(timestamps)
        for i in range(count):
            ts = timestamps[i]
            price = prices[i]
            vol = volumes[i]
            direction_code = directions[i]
            
            # 解析买卖方向
            dir_str = "平盘"
            if direction_code == 0:
                dir_str = "卖盘(内盘)"
            elif direction_code == 1:
                dir_str = "买盘(外盘)"
            
            log.info("时间: %s, 价格: %s, 数量: %s, 方向: %s" % (ts, price, vol, dir_str))
    else:
        log.info("未获取到分时成交数据,请检查是否开通L2权限或当前是否为交易时间。")

注意事项

  1. 权限要求get_tick_direction 属于高频行情接口,通常依赖券商提供的 Level-2 行情服务。如果是普通仿真环境或未开通 L2 的实盘账户,该接口可能返回 None 或空数据。
  2. 数据类型:返回的数据结构是 OrderedDict,内部字段通常是 numpy 数组或列表。
  3. 逐笔成交 vs 分时成交
    • get_tick_direction 获取的是分时成交(Tick Direction),通常是快照切片数据。
    • 如果你需要更精细的逐笔成交(每一笔撮合的流水),可以使用 get_individual_transaction 接口(同样需要 L2 权限),其返回字段 business_direction 含义相同(0-卖,1-买)。

Q&A

Q: 回测模式下能使用 get_tick_direction 吗?
A: 通常不能。PTrade 的回测环境主要基于分钟线或日线数据。Tick 级别的数据(分时成交、逐笔成交)一般仅在**交易(实盘/仿真)**模块的盘中时间段(9:30-15:00)可用。

Q: business_direction 返回 2 (平盘) 是什么意思?
A: 平盘通常指成交价格与前一笔成交价格相同,或者在某些特定撮合机制下(如集合竞价阶段产生的成交)无法明确界定为主动买入或主动卖出的情况。

Q: 如何获取更历史的分时成交数据?
A: get_tick_direction 主要用于获取当日的实时或近期数据。如果需要历史日期的 Tick 数据,通常需要专门的历史高频数据源,PTrade 标准策略环境一般不提供历史 Tick 数据的回溯查询。