🚀 AI 一键生成 ptrade 策略代码

PTrade 集合竞价数据分析:get_trend_data 函数使用指南

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

问题描述

如何获取股票在早上9:15到9:25集合竞价期间的撮合价格和成交量数据?

解决方案

在PTrade中,获取股票在9:15到9:25集合竞价期间的撮合价格和成交量数据,主要使用 get_trend_data 函数。

该函数专门用于获取集中竞价期间的代码数据。

核心函数:get_trend_data

此接口可在研究、回测、交易模块中使用。

接口说明

get_trend_data(date=None, stocks=None, market=None)
  • date: 日期(格式为YYYYmmdd),不传则默认为当前回测日期或实盘当日。
  • stocks: 股票代码(字符串或列表)。
  • market: 市场代码(如 'XSHG', 'XSHE'),注意 stocksmarket 不能同时使用。

返回数据字段

该函数返回一个字典,包含以下关键字段:

  • hq_px: 撮合价格(当前匹配价)。
  • business_amount: 成交量(当前匹配量)。
  • business_balance: 成交额。
  • time_stamp: 时间戳。

策略代码示例

以下代码展示了如何在策略中获取指定股票的集合竞价数据。

def initialize(context):
    # 设置股票池
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 在回测或交易中,通常在盘前或开盘时刻调用查看
    # 这里设置在9:26查看刚刚结束的集合竞价结果,或者在9:15-9:25期间通过run_interval调用
    run_daily(context, check_auction_data, time='9:26')

def check_auction_data(context):
    # 获取指定股票的集合竞价数据
    # 注意:不传date默认取当前日期
    trend_data = get_trend_data(stocks=g.security)
    
    if trend_data:
        # 获取特定股票的数据
        stock_info = trend_data.get(g.security)
        
        if stock_info:
            # 打印撮合价格 (hq_px)
            match_price = stock_info.get('hq_px')
            # 打印成交量 (business_amount)
            match_volume = stock_info.get('business_amount')
            # 打印时间戳
            timestamp = stock_info.get('time_stamp')
            
            log.info("股票: %s, 时间: %s" % (g.security, timestamp))
            log.info("集合竞价撮合价格: %s" % match_price)
            log.info("集合竞价成交量: %s" % match_volume)
        else:
            log.info("未获取到 %s 的竞价数据" % g.security)

def handle_data(context, data):
    pass

注意事项

  1. 调用时间
    • 如果在 9:15 - 9:25 期间(实盘交易中通过 run_intervalrun_daily)调用,返回的是当时的实时撮合快照。
    • 如果在 9:25 之后 调用,通常返回的是集合竞价最终产生的开盘价和成交量。
  2. 参数互斥stocks 参数和 market 参数不能同时传入,只能二选一。
  3. 返回值类型:返回的是一个字典(dict),Key是股票代码,Value是包含数据的字典。
  4. 实盘与回测:该函数在回测和交易环境中均可用,但在回测中,通常只能获取到最终的开盘价作为竞价结果,而在实盘交易中可以获取实时的撮合变动(依赖于行情推送)。

Q&A

Q: get_snapshot 函数能用来获取集合竞价数据吗?
A: 在实盘交易的 9:15-9:25 期间,get_snapshot 返回的 last_px 通常也是当前的虚拟撮合价格,business_amount 是虚拟成交量。但是,get_trend_data 是官方文档中明确定义为“获取集中竞价期间代码数据”的专用接口,语义更明确。需要注意的是,在 before_trading_start(通常在9:00-9:15运行)中调用 get_snapshot 大部分数据可能为0。

Q: 如果我想获取整个市场的竞价数据怎么办?
A: 可以使用 market 参数代替 stocks 参数。例如:get_trend_data(market=['XSHG', 'XSHE']) 可以获取沪深两市的竞价数据。

Q: 回测模式下能看到9:15到9:20的逐笔撮合变化吗?
A: 通常回测数据精度为分钟线(1m)或日线(1d)。除非您拥有Tick级别的回测数据源,否则在普通回测模式下,很难重现9:15-9:25期间每一秒的撮合变化,通常只能获取到9:25定格后的开盘数据。