🚀 AI 一键生成 ptrade 策略代码

ptrade 平台 get_sort_msg 涨幅排名函数盘前调用详解

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

问题描述

get_sort_msg可以在盘中和盘后调用,那么它可以通过run_daily在盘前调用吗?

/

解决方案

结论

可以的。

在 ptrade 平台中,你完全可以通过 run_daily 函数设置一个盘前的时间点(例如 time='09:15'time='09:25')来调用 get_sort_msg 函数。

技术原理解析

  1. run_daily 的时间支持:根据 ptrade API 文档,在交易场景下,run_dailytime 参数可设置范围是 00:00~23:59。这意味着你可以将定时任务设定在盘前的任意时刻。
  2. 盘前运行机制:文档中明确指出,9:30 之前为盘前运行时间,交易环境支持运行在 run_daily 中指定交易时间(如 time='09:15')运行的函数。
  3. get_sort_msg 的可用性get_sort_msg 属于交易模块可用的函数,并没有严格限制只能在 handle_data (盘中) 或 after_trading_end (盘后) 触发。

盘前调用的注意事项(重要)

虽然技术上允许在盘前调用,但你需要特别注意数据的有效性和业务逻辑的合理性

  • 数据状态:如果在 9:15 之前调用,当天的集合竞价尚未开始,你获取到的板块/行业涨幅排名实际上是上一个交易日的最终排名数据
  • 集合竞价期间:如果在 9:15 ~ 9:25 集合竞价期间调用,获取到的可能是基于集合竞价撮合价格计算出的临时涨幅排名。这个数据在 9:25 之前是动态变化的,可能不够稳定。
  • 返回值解析get_sort_msg 返回的数据结构中包含 preclose_px (昨日收盘价)、open_px (今日开盘价)、last_px (最新价) 等。在盘前阶段,open_px 可能为 0 或者等于 preclose_pxtrade_status (交易状态) 可能是 PRETR (盘前) 或 OCALL (集合竞价)。

代码示例

以下是一个在盘前(9:25 集合竞价结束时)通过 run_daily 调用 get_sort_msg 的示例:

def initialize(context):
    g.security = '000001.SZ'
    set_universe(g.security)
    
    # 设定在每天 9:25 集合竞价结束时获取板块排名
    run_daily(context, get_pre_market_sort_msg, time='09:25')

def get_pre_market_sort_msg(context):
    # 获取概念板块(XBHS.GN)的涨幅排名信息
    sort_data = get_sort_msg(sort_type_grp='XBHS.GN', sort_field_name='px_change_rate', sort_type=1, data_count=10)
    
    if sort_data:
        log.info("盘前(9:25)概念板块涨幅排名前三:")
        for i in range(min(3, len(sort_data))):
            log.info(f"Top {i+1}: {sort_data[i]['prod_name']} - 涨幅: {sort_data[i]['px_change_rate']}%")
    else:
        log.info("盘前未能获取到有效的板块排名数据")

def handle_data(context, data):
    pass

总结:你可以通过 run_daily 在盘前调用 get_sort_msg,这在编写“集合竞价抓强势板块”等策略时非常有用,但务必清楚此时获取到的数据所代表的市场状态(昨日数据或集合竞价数据)。