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

PTrade 集合竞价量能突破策略:get_trend_data 接口详解与实战指南

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

问题描述

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

Title: PTrade 集合竞价实战:利用 get_trend_data 预判开盘量能突破

Question: 如何使用 ptrade 的 get_trend_data 接口获取早盘集合竞价数据并进行量能分析?

解决方案

PTrade 集合竞价实战:利用 get_trend_data 预判开盘量能突破

在早盘集合竞价阶段(9:15-9:25),撮合价格与匹配成交量的异动往往预示着全天资金的主攻方向。PTrade 平台提供了 get_trend_data 接口,方便投资者获取集中竞价期间的代码数据。


一、get_trend_data 接口详解

1. 接口功能

用于获取早盘集中竞价期间标的的成交量、加权价格、最新价等数据。

2. 函数签名

get_trend_data(date=None, stocks=None, market=None)

3. 参数说明

  • date (str): 日期,格式为 'YYYYMMDD'(如 '20230308')。回测/交易阶段默认当前交易日。
  • stocks (str/list): 指定股票代码或代码列表。注意:stocks 与 market 不能同时入参
  • market (str/list): 市场代码(如 'XSHG', 'XSHE')。不传参时默认返回沪深两市所有代码数据。

4. 返回值格式

返回以股票代码为 Key 的字典,结构如下:

{
    '600570.SS': {
        'time_stamp': 20230308092500000, # 时间戳
        'hq_px': 42.50,                   # 最新价
        'wavg_px': 42.48,                 # 加权价格
        'business_amount': 1500000,       # 总成交量(股)
        'business_balance': 63720000.0,   # 总成交额(元)
        'amount': 0                       # 持仓量
    }
}

二、早盘集合竞价量能突破策略逻辑

  1. 定时触发:在每天 9:25 分集合竞价结果出炉后,通过 run_daily 运行竞价分析函数。
  2. 量能预判:提取标的集合竞价的 business_amount(成交量)与历史平均开盘量进行对比。
  3. 突破买入:当竞价匹配量突破设定阈值且竞价涨幅在合理区间(如 2%~5%)时,在 9:30 开盘后以市价或限价跟进下单。

三、完整策略源码示例

def initialize(context):
    # 设置目标股票池
    g.security = ['600570.SS', '000001.SZ', '600000.SS']
    set_universe(g.security)
    
    # 设定标志位
    g.buy_list = []
    
    # 在 9:25 获取集合竞价数据并筛选目标
    run_daily(context, check_auction_volume, time='9:25')

def check_auction_volume(context):
    g.buy_list = []
    
    # 获取早盘集合竞价数据
    trend_data = get_trend_data(stocks=g.security)
    if not trend_data:
        log.info("未获取到集合竞价数据")
        return
        
    for stock in g.security:
        if stock in trend_data:
            info = trend_data[stock]
            auction_vol = info.get('business_amount', 0)    # 竞价成交量
            auction_px = info.get('hq_px', 0)               # 竞价开盘价
            
            # 获取过去5日平均成交量作为参考
            hist = get_history(5, '1d', 'volume', security_list=stock)
            if hist is None or hist.empty:
                continue
            avg_vol = hist['volume'].mean()
            
            # 获取昨收价计算竞价涨幅
            snapshot = get_snapshot(stock)
            preclose = snapshot[stock].get('preclose_px', 0)
            if preclose == 0:
                continue
                
            pct_change = (auction_vol - preclose) / preclose
            
            # 条件:竞价放量(达到5日日均量的5%以上)且竞价高开2%~5%
            if auction_vol > (avg_vol * 0.05) and 0.02 <= pct_change <= 0.05:
                log.info(f"标的 {stock} 触发竞价突破:竞价量={auction_vol}, 涨幅={pct_change*100:.2f}%")
                g.buy_list.append(stock)

def handle_data(context, data):
    # 开盘后对筛选出的标的下单
    if g.buy_list:
        cash = context.portfolio.cash / len(g.buy_list)
        for stock in g.buy_list:
            if get_position(stock).amount == 0 and cash > 5000:
                order_value(stock, cash)
                log.info(f"开盘买入 {stock},金额:{cash}")
        # 清空当日买入列表
        g.buy_list = []

四、实战注意事项

  1. 时间节点:集合竞价数据在 9:25 最终撮合完成后确定,因此 run_daily 的触发时间建议设置为 '9:25''9:26'
  2. 数据保护:盘前使用 get_snapshot 时部分字段可能为 0,需对除零等异常做保护逻辑。
  3. 撤单限制:沪深两市在 9:20-9:25 期间不可撤单,策略下单通常安排在 9:30 开盘后进行。