🚀 AI 一键生成 ptrade 策略代码

PTrade API 详解:如何使用 get_stock_blocks 获取股票所属的行业与概念板块?

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

问题描述

如何查询一只股票属于哪些行业板块和概念板块?

解决方案

在PTrade中,查询一只股票属于哪些行业板块(如证监会行业、聚源行业)和概念板块,主要使用 get_stock_blocks 函数。

以下是详细的接口说明、代码示例及返回数据解析。

1. 核心函数说明

get_stock_blocks(stock_code)

  • 描述:获取指定股票所属的板块详细信息,包括行业、概念、地域等。
  • 参数stock_code (str),股票代码(如 '600570.SS')。
  • 返回值:返回一个字典 (dict),键(Key)代表板块类型,值(Value)是包含板块代码和名称的列表。

2. 策略代码示例

以下代码展示了如何在策略中获取并打印“恒生电子”所属的所有板块信息:

def initialize(context):
    # 设置要查询的股票,例如:恒生电子
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 获取股票所属板块信息
    # 注意:该函数获取的是当前最新的板块数据
    blocks_info = get_stock_blocks(g.security)
    
    # 打印原始返回数据
    log.info("股票 %s 的完整板块信息:" % g.security)
    log.info(blocks_info)
    
    # 解析并分别打印不同类型的板块
    if blocks_info:
        # 1. 获取聚源行业 (HY)
        if 'HY' in blocks_info:
            hy_list = blocks_info['HY']
            log.info("【聚源行业】: %s" % str(hy_list))
            
        # 2. 获取证监会行业 (ZJHHY)
        if 'ZJHHY' in blocks_info:
            zjh_list = blocks_info['ZJHHY']
            log.info("【证监会行业】: %s" % str(zjh_list))
            
        # 3. 获取概念板块 (GN)
        if 'GN' in blocks_info:
            gn_list = blocks_info['GN']
            # 遍历打印所有概念
            gn_names = [item[1] for item in gn_list]
            log.info("【概念板块】: %s" % ", ".join(gn_names))
            
        # 4. 获取地域板块 (DY)
        if 'DY' in blocks_info:
            dy_list = blocks_info['DY']
            log.info("【地域板块】: %s" % str(dy_list))

3. 返回数据结构解析

get_stock_blocks 返回的字典中,常见的 Key 及其含义如下:

Key (键) 含义 示例数据 说明
HY 聚源行业 [['710200.XBHS', '计算机应用']] 常用行业分类标准
ZJHHY 证监会行业 [['I65000.XBHS', '软件和信息技术服务业']] 官方行业分类
GN 概念板块 [['003596.XBHS', '融资融券'], ...] 包含多个概念,如人工智能、区块链等
DY 地域板块 [['DY1172.XBHS', '浙江板块']] 公司所在地
HGT 沪港通 [['HGTHGT.XBHK', '沪股通']] 是否属于沪港通标的

数据格式注意:
Value 是一个列表的列表,格式为 [[板块代码, 板块名称], [板块代码, 板块名称], ...]

4. 注意事项

  1. 未来函数风险(回测中)
    get_stock_blocks 获取的是**当下(最新)**的板块归属数据。如果在回测模式下使用(例如回测 2015 年的数据),它返回的仍然是该股票在当前(例如 2024 年)所属的板块。

    • 风险点:如果某股票在 2015 年不属于“人工智能”概念,但现在属于,回测时会误认为它在 2015 年就是人工智能股。因此在回测中使用需谨慎。
  2. 代码后缀
    传入的 stock_code 必须包含后缀(如 .SS.SZ),否则可能无法正确匹配。


Q&A

Q1: 如何获取某个行业(例如“白酒”)下的所有股票代码?
A1: 使用 get_industry_stocks(industry_code) 接口。首先你需要通过 get_stock_blocks 查到“白酒”对应的行业代码(例如聚源行业代码),然后传入该接口获取成分股列表。

Q2: get_stock_blocks 可以在 initialize 中调用吗?
A2: 可以,但通常建议在 handle_databefore_trading_start 中调用,或者在 initialize 中调用一次并存储在全局变量 g 中,以避免重复查询。

Q3: 为什么查询不到某些新上市股票的板块信息?
A3: 板块数据的更新依赖于数据商(如聚源)的维护。新股上市后,数据商需要一定时间进行分类和打标签,因此可能存在短暂的数据延迟。

Q4: 返回的板块代码后缀 .XBHS 是什么意思?
A4: 这是 PTrade 内部用于标识板块指数的后缀,代表该代码是一个板块索引,而非具体的个股交易代码。