🚀 AI 一键生成 ptrade 策略代码

PTrade 实战策略:如何利用 get_sort_msg API 构建实时行业轮动策略?

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

问题描述

请帮我编写一个策略,找到当前涨幅最高的前5个行业板块。

解决方案

这是一个基于 PTrade 平台的策略示例,旨在获取当前市场中涨幅最高的前 5 个行业板块。

策略思路

  1. 核心接口:使用 PTrade 提供的 get_sort_msg 函数。这是一个非常强大的接口,可以获取板块、行业、个股的实时排序数据。
  2. 参数设置
    • sort_type_grp='XBHS.HY': 指定排序的分组为“行业板块”。
    • sort_field_name='px_change_rate': 指定排序字段为“涨跌幅”。
    • sort_type=1: 指定为降序排列(从高到低)。
    • data_count=5: 仅获取前 5 条数据。
  3. 执行逻辑:在 handle_data 中调用该接口,并遍历返回的结果打印日志。

策略代码

def initialize(context):
    """
    初始化函数
    """
    # 设置一个基准标的,虽然本策略主要查询板块,但初始化通常需要设置universe
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 设置运行频率,这里演示在盘中运行
    log.info("策略初始化完成,准备获取行业涨幅排名")

def handle_data(context, data):
    """
    盘中运行函数
    """
    # 调用 get_sort_msg 获取行业板块涨幅排名
    # sort_type_grp: 'XBHS.HY' 代表行业板块
    # sort_field_name: 'px_change_rate' 代表涨跌幅
    # sort_type: 1 代表降序 (涨幅从高到低)
    # data_count: 5 代表取前5名
    top_industries = get_sort_msg(sort_type_grp='XBHS.HY', 
                                  sort_field_name='px_change_rate', 
                                  sort_type=1, 
                                  data_count=5)
    
    if top_industries:
        log.info("====== 当前涨幅前5行业板块 ======")
        # 遍历结果并打印
        for i, info in enumerate(top_industries):
            # 获取板块名称
            name = info.get('prod_name')
            # 获取板块代码
            code = info.get('prod_code')
            # 获取涨跌幅
            rate = info.get('px_change_rate')
            
            # 打印信息 (使用Python 3.5兼容的格式化字符串)
            log.info("第%d名: %s (%s), 涨幅: %s%%" % (i + 1, name, code, rate))
            
            # 如果需要获取该板块的领涨股,可以访问 'rise_first_grp' 字段
            # lead_stock = info.get('rise_first_grp')[0]
            # log.info("  领涨股: %s, 涨幅: %s%%" % (lead_stock['prod_name'], lead_stock['px_change_rate']))
            
    else:
        log.info("未获取到行业排名数据,请检查运行环境或时间。")

注意事项

  1. 运行环境get_sort_msg 函数通常在交易模块(实盘或仿真交易)中表现最佳,因为它依赖于实时的行情推送和排序服务。在某些纯历史回测模式下,该函数可能无法返回动态的板块排序数据,或者数据更新频率较低。
  2. 板块代码:代码中使用的 XBHS.HY 是 PTrade 中通用的行业分类代码。如果你想查询概念板块,可以将该参数改为 XBHS.GN;如果想查询地域板块,可以改为 XBHS.DY
  3. Python 版本兼容性:代码使用了 % 格式化字符串,完全兼容 Python 3.5 及以上版本。

Q&A

Q1: get_sort_msg 函数还可以用来查询哪些类型的排名?
A1: get_sort_msg 非常灵活,通过修改 sort_type_grp 参数,你可以查询:

  • XBHS.HY: 行业板块
  • XBHS.GN: 概念板块
  • XBHS.DY: 地域板块
  • XBHS.ZS: 指数
  • 也可以传入具体的股票代码列表来对特定股票池进行排序。

Q2: 如何获取跌幅最大的板块?
A2: 只需将 get_sort_msg 函数中的 sort_type 参数改为 0(升序),即可获取涨跌幅最小(即跌幅最大)的板块。

Q3: 返回的数据中除了涨幅和名称,还有什么有用的信息?
A3: 返回的字典中包含丰富的信息,例如:

  • business_amount: 总成交量
  • business_balance: 总成交额
  • rise_first_grp: 领涨股票列表(包含领涨股代码、名称、涨幅)
  • fall_first_grp: 领跌股票列表
  • turnover_ratio: 换手率(部分板块支持)
    你可以通过 log.info(info) 查看完整的字段结构。