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

ptrade 平台如何利用 get_sort_msg 接口获取板块成员个数与上涨家数比例?(附 Python 源码)

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

问题描述

ptrade 板块分析:利用 get_sort_msg 获取行业成分股数量与上涨家数比例
在 ptrade 交易中,如何利用 get_sort_msg 接口获取某板块的成员个数(member_count)、上涨家数和下跌家数,以此来做全市场宽度分析?

解决方案

在 ptrade 量化交易平台中,进行全市场或特定板块的宽度分析(Market Breadth Analysis)是研判市场情绪和趋势强弱的重要手段。通过 get_sort_msg 接口,我们可以轻松获取板块或行业的成员总数、上涨家数、下跌家数等关键统计指标。

一、接口介绍:get_sort_msg

get_sort_msg 接口仅在交易模块可用,用于获取板块、行业的涨幅排名及详细统计信息。

1. 核心入参

  • sort_type_grp: 板块或行业分类代码。例如:
    • 'XBHS.DY':地域板块
    • 'XBHS.GN':概念板块
    • 'XBHS.ZJHHY':证监会行业
    • 'XBHS.HY':行业分类
  • sort_field_name: 排序字段,如 'px_change_rate'(涨跌幅)。
  • sort_type: 排序方式(0 为升序,1 为降序)。
  • data_count: 返回的数据条数。

2. 核心返回字段

接口返回一个 list[dict],其中每个字典代表一个行业或板块,包含以下关键字段:

  • prod_code: 行业/板块代码
  • prod_name: 行业/板块名称
  • member_count: 成员个数(成分股总数)
  • rise_count: 上涨家数
  • fall_count: 下跌家数
  • px_change_rate: 行业/板块整体涨跌幅

二、Python 策略源码示例

以下是一个完整的 ptrade 策略示例。该策略在盘中定期获取概念板块(XBHS.GN)的数据,计算每个板块的上涨家数比例(上涨家数 / 成员总数),并筛选出上涨比例大于 60% 且成员数大于 10 的强势板块进行日志输出。

def initialize(context):
    # 初始化策略,设置基准
    set_benchmark('000300.SS')
    g.security = '600570.SS'  # 订阅一只股票以维持策略运行
    set_universe(g.security)
    
    # 每天 10:00 运行一次板块宽度分析
    run_daily(context, market_breadth_analysis, time='10:00')

def market_breadth_analysis(context):
    log.info("====== 开始进行板块市场宽度分析 ======")
    
    # 获取概念板块的涨幅排名信息,按涨跌幅降序排序
    sort_data = get_sort_msg(sort_type_grp='XBHS.GN', sort_field_name='px_change_rate', sort_type=1, data_count=100)
    
    if not sort_data:
        log.warning("未能获取到板块排序数据")
        return
        
    for block in sort_data:
        name = block.get('prod_name')
        code = block.get('prod_code')
        member_count = block.get('member_count', 0)
        rise_count = block.get('rise_count', 0)
        fall_count = block.get('fall_count', 0)
        
        # 过滤成员数过少的板块
        if member_count <= 10:
            continue
            
        # 计算上涨家数比例
        rise_ratio = round((rise_count / member_count) * 100, 2) if member_count > 0 else 0.0
        
        # 筛选出上涨比例大于 60% 的强势板块
        if rise_ratio >= 60.0:
            log.info("强势板块: %s (%s) | 成员总数: %d | 上涨家数: %d | 下跌家数: %d | 上涨比例: %s%%" % 
                     (name, code, member_count, rise_count, fall_count, rise_ratio))

def handle_data(context, data):
    pass

三、如何利用该数据做全市场宽度分析?

  1. 识别虚假繁荣(指数失真)
    有时大盘指数因权重股拉升而上涨,但如果通过 get_sort_msg 发现多数板块的 rise_count 远低于 fall_count(即上涨比例极低),说明市场赚钱效应差,属于“赚了指数不赚钱”的虚假繁荣,应当控制仓位。
  2. 寻找共振板块
    当某个板块的整体涨幅居前,且其 rise_ratio(上涨比例)极高(例如超过 80%),说明该板块呈现普涨格局,行业板块内个股共振强烈,是极佳的短期热点追逐目标。
  3. 多空力量对比
    通过统计所有板块的平均上涨比例,可以构建全市场的“腾落指数(ADL)”或“多空宽度指标”,作为大盘见顶或见底的辅助量化信号。