🚀 AI 一键生成 ptrade 策略代码

Ptrade量化平台如何突破逐笔委托接口200条限制?(附分批查询源码)

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

问题描述

逐笔数据接口限制

get_individual_entrust接口单次最多返回200条数据,多股票查询时需分批次调用。

解决方案

在 Ptrade 量化交易平台中,获取 Level 2 逐笔委托数据是高频和微观结构策略的核心。然而,get_individual_entrust 接口存在单次调用返回数据条数的限制(最大200条)。当策略需要监控庞大的股票池时,必须采用分批次调用的方案。

一、 接口限制解析

根据 Ptrade API 文档,get_individual_entrust 的参数 data_count 默认值为 50,最大允许值为 200
如果直接传入包含数百只股票的列表,接口可能无法返回完整的盘口委托信息,甚至导致请求超时或截断。

二、 多股票分批查询解决方案

为了稳定、高效地获取多只股票的逐笔委托数据,我们可以将股票池(Universe)切分为多个小批次(Chunk),通过循环遍历的方式进行请求。

Python 实现源码

以下是一个在 handle_datatick_data 中实现分批查询的示例代码:

def initialize(context):
    # 设置一个较大的股票池
    g.security = ['600570.SS', '000001.SZ', '000002.SZ', '000032.SZ', '600000.SS', '600036.SS']
    set_universe(g.security)
    # 定义每批次查询的股票数量
    g.batch_size = 2 

def handle_data(context, data):
    all_entrust_data = {}
    
    # 将股票池按 batch_size 切分为多个批次
    for i in range(0, len(g.security), g.batch_size):
        batch_stocks = g.security[i : i + g.batch_size]
        
        # 建议开启 is_dict=True 以大幅提升数据解析速度
        batch_entrust = get_individual_entrust(
            stocks=batch_stocks, 
            data_count=200, 
            is_dict=True
        )
        
        if batch_entrust:
            # 将分批获取的数据合并到总字典中
            # 注意:返回的字典中包含 'fields' 键,合并时需注意处理或直接 update
            for k, v in batch_entrust.items():
                if k != 'fields':
                    all_entrust_data[k] = v
            
    # 打印合并后的逐笔委托数据
    log.info("成功获取 %d 只股票的逐笔委托数据" % len(all_entrust_data))
    
    # 示例:处理某只股票的委托量
    if "600570.SS" in all_entrust_data:
        # 字典格式返回的数据结构:{股票代码: [[时间戳, 价格, 委托数量, 委托编号, 委托方向, 委托类型], ...]}
        entrust_list = all_entrust_data["600570.SS"]
        if len(entrust_list) > 0:
            latest_entrust_amount = entrust_list[-1][2] # 获取最新一笔的委托数量
            log.info("恒生电子最新一笔委托量: %s" % latest_entrust_amount)

三、 性能优化与注意事项

  1. 开启字典格式返回 (is_dict=True)
    官方文档明确指出,当入参 is_dict=True 时,返回 dict 类型数据的速度比默认的 DataFramePanel 类型有大幅提升。在处理高频逐笔数据时,强烈建议开启此选项。
  2. Level 2 行情权限
    逐笔委托(get_individual_entrust)和逐笔成交(get_individual_transaction)均需要券商端开通 Level 2 行情权限,否则接口将返回 None
  3. 控制调用频率
    虽然分批可以解决单次条数限制,但在 tick_data (每3秒触发) 中循环调用时,需注意整体耗时不能超过 Tick 间隔,以免造成策略阻塞。建议根据实际算力合理设置 batch_size