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

ptrade 平台如何利用 get_trend_data 获取集中竞价数据预判量能突破?

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

问题描述

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

Title: ptrade 集合竞价实战:如何利用 get_trend_data 预判量能突破?

Question: 在ptrade中怎么利用get_trend_data获取集中竞价阶段的成交额和价格?

解决方案

1. 接口介绍:get_trend_data

在 ptrade 平台中,get_trend_data 是专门用于获取集中竞价期间(通常为 9:15 - 9:25)标的数据的接口。通过该接口,我们可以获取竞价阶段的累计成交量、成交额以及加权价格,从而在开盘前预判个股的量能突破和资金关注度。

接口定义:

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

参数说明:

  • date (str):查询日期,格式为 YYYYmmdd。若不传,默认返回当日数据。
  • stocks (str/list[str]):股票代码。例如 '600570.SS'['600570.SS', '000001.SZ']
  • market (str/list[str]):市场代码,如 'XSHG' (上海) 或 'XSHE' (深圳)。
  • 注意:stocksmarket 不能同时入参。

返回数据结构:

返回一个字典(dict),Key 为股票代码,Value 为包含竞价数据的字典,包含以下字段:

  • time_stamp: 时间戳 (int)
  • hq_px: 价格 (float)
  • wavg_px: 加权价格 (float)
  • business_amount: 总成交量 (int)
  • business_balance: 总成交额 (int)
  • amount: 持仓量 (int)

2. 实战策略:集合竞价量能突破预判

以下是一个完整的 ptrade 策略示例。策略在每天 9:26(集合竞价结束,连续竞价开始前)调用 get_trend_data 获取目标股票在集合竞价阶段的累计成交额。如果成交额突破设定阈值,则在开盘时立即买入。

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

def initialize(context):
    # 设置操作的股票池
    g.security = '600570.SS'  # 恒生电子
    set_universe(g.security)
    
    # 设定集合竞价量能突破的成交额阈值(例如:集合竞价成交额突破 500 万元)
    g.volume_breakthrough_threshold = 5000000 
    
    # 每天 9:26 分运行集合竞价量能分析函数
    run_daily(context, analyze_aggregate_auction, time='9:26')

def before_trading_start(context, data):
    g.has_ordered = False

def analyze_aggregate_auction(context):
    if g.has_ordered:
        return
        
    # 获取当天的集合竞价数据
    current_date = context.blotter.current_dt.strftime('%Y%m%d')
    trend_data = get_trend_data(date=current_date, stocks=g.security)
    
    if g.security in trend_data:
        stock_data = trend_data[g.security]
        
        # 提取集合竞价截止时的累计成交额与最新价格
        auction_balance = stock_data.get('business_balance', 0)
        auction_price = stock_data.get('hq_px', 0)
        
        log.info(f"[{g.security}] 集合竞价结束。成交额: {auction_balance} 元, 竞价价格: {auction_price} 元")
        
        # 判断是否突破量能阈值
        if auction_balance >= g.volume_breakthrough_threshold:
            log.info(f"检测到量能突破!集合竞价成交额 {auction_balance} 元超过阈值 {g.volume_breakthrough_threshold} 元。准备开盘买入。")
            
            # 获取当前可用资金
            cash = context.portfolio.cash
            if cash > 0:
                # 以限价单(竞价价格)或市价单买入
                order_value(g.security, cash, limit_price=auction_price)
                g.has_ordered = True
        else:
            log.info(f"量能未突破,当前竞价成交额为 {auction_balance} 元。")

def handle_data(context, data):
    # 盘中常规逻辑(本策略主要在 9:26 定时触发,此处留空)
    pass

3. 注意事项

  1. 执行时间:集合竞价在 9:25 结束并确立开盘价。因此,建议将 run_daily 的触发时间设在 9:269:29 之间,以便获取最完整的竞价结果并做好开盘交易准备。
  2. 异常处理:在实盘中,若因网络或柜台原因导致 get_trend_data 返回空字典 {},策略应做好 if g.security in trend_data 的容错判断,避免策略因 KeyError 终止。