前言
在量化策略开发中,行业轮动、概念选股、地域板块轮动都是非常经典的策略逻辑。想要按板块维度筛选标的,首先需要获取每只股票对应的板块属性。手动单只查询效率极低,也无法批量处理股票池数据。
在 PTrade 量化平台中,get_stock_blocks 函数可以一键查询单只股票的全部板块归属,涵盖行业、地域、概念、指数成分等多个维度,是板块类策略开发的必备基础工具。本文就带大家全面掌握这个函数的语法、返回值结构与实战用法。
一、函数核心功能
get_stock_blocks 的核心作用是:输入单只股票代码,返回该股票所属的全量板块信息,包括行业分类、地域归属、热门概念、所属指数等多个维度。
可以通俗理解为股票的「身份档案」:输入股票代码,就能调出它的全部标签属性,方便我们按板块维度对股票进行分类、筛选与标签化处理。
二、语法与参数说明
2.1 调用格式
get_stock_blocks(stock_code)
2.2 参数说明
函数仅需传入 1 个必填参数:
stock_code:字符串类型,目标股票代码,必须携带市场后缀,沪市股票后缀为.SS,深市为.SZ。例如工商银行需写为"601398.SS",不能只写"601398"。
2.3 返回值结构
函数返回一个嵌套字典,包含多个分类键,每个键对应一类板块信息。其中最核心的 5 类标签如下:
| 字典键 | 标签类型 | 说明 | 示例 |
|---|---|---|---|
HY | 行业板块 | 股票所属的行业分类 | ["银行业"] |
DY | 地域板块 | 股票注册地对应的地区分类 | ["北京板块"] |
GN | 概念板块 | 股票关联的市场热门概念 | ["融资融券", "沪股通", "国企改革"] |
HGT | 特殊市场板块 | 沪股通 / 深股通等特殊市场标识 | ["沪股通"] |
ZS | 指数成分 | 股票所属的全部指数,每项为 [指数代码, 指数名称] | [["000300.HSZS", "沪深300"], ["000016.HSZS", "上证50"]] |
三、基础用法示例
3.1 查询单只股票完整板块信息
直接传入股票代码,获取全量板块字典,适合快速校验个股的全部属性。
# 查询工商银行的所属全部板块
blocks = get_stock_blocks("601398.SS")
print(blocks)
返回结果为嵌套字典,包含指数、行业、地域、概念等全量信息,片段示例:
{
'ZS': [
['000001.HSZS', '上证指数'],
['000300.HSZS', '沪深300'],
['000016.HSZS', '上证50'],
['000134.HSZS', '上证银行'],
...
],
'HY': ['银行业'],
'DY': ['北京板块'],
'GN': ['融资融券', '沪股通', '央企改革', ...]
}
3.2 提取纯净板块名称(去除代码)
默认返回的指数板块包含指数代码,日常策略开发中我们通常只需要名称,可以通过列表推导式快速提取:
# 查询贵州茅台的板块信息
blocks = get_stock_blocks("600519.SS")
# 分类提取纯净名称
hy_list = blocks.get('HY', []) # 行业板块
dy_list = blocks.get('DY', []) # 地域板块
gn_list = blocks.get('GN', []) # 概念板块
index_list = [item[1] for item in blocks.get('ZS', [])] # 所属指数名称
print("行业板块:", hy_list)
print("地域板块:", dy_list)
print("概念板块(前5个):", gn_list[:5])
运行输出示例:
行业板块: ['白酒II']
地域板块: ['贵州板块']
概念板块(前5个): ['融资融券', '转融券标的', '国企改革', '沪股通', '证金持股']
四、策略实战完整代码
场景 1:开盘前查询个股完整板块属性
在策略初始化时指定标的,开盘前自动查询并打印其完整板块信息,适合个股基本面校验与标签核对。
def initialize(context):
"""策略初始化:指定查询标的"""
log.info("策略启动,准备查询工商银行所属板块")
g.stock = "601398.SS" # 工商银行股票代码
def before_trading_start(context, data):
"""开盘前执行:查询并打印全量板块信息"""
# 调用函数获取板块字典
stock_blocks = get_stock_blocks(g.stock)
# 打印完整结果
log.info(f"{g.stock} 的所属板块信息:")
log.info(stock_blocks)
def handle_data(context, data):
"""盘中交易逻辑(此处留空)"""
pass
场景 2:批量标注股票池的板块标签
实际选股中,我们常需要对整个股票池批量添加板块属性。以下代码结合 get_index_stocks,实现对沪深 300 成分股的批量板块标注。
def initialize(context):
log.info("策略启动,批量获取沪深300成分股板块标签")
g.index_code = "000300.XBHS"
def before_trading_start(context, data):
# 1. 获取沪深300成分股列表
stock_pool = get_index_stocks(g.index_code)
# 2. 遍历股票池,提取行业与核心概念
log.info("沪深300成分股板块标签(前5只):")
for stock in stock_pool[:5]:
blocks = get_stock_blocks(stock)
# 容错处理:退市股返回None
if blocks is None:
log.info(f"{stock} | 已退市,无板块信息")
continue
hy = blocks.get('HY', ['无'])[0]
gn_top3 = blocks.get('GN', [])[:3]
log.info(f"{stock} | 行业:{hy} | 核心概念:{gn_top3}")
def handle_data(context, data):
pass
五、新手避坑指南
-
股票代码必须补全后缀 传入的股票代码必须携带
.SS或.SZ市场后缀,仅输入数字代码会无法正常返回结果。 -
退市股票返回 None 如果查询标的已退市,函数会直接返回
None。批量处理股票池时建议增加判空逻辑,避免触发程序报错。 -
回测存在板块漂移风险 函数默认返回当前最新的板块分类。在历史回测场景下,股票的行业、概念归属可能与历史时点存在差异(例如个股后期主营业务变更、新增概念标签),对板块时效性要求高的策略需注意该偏差。
-
板块分类标准不绝对统一 行业、概念板块的划分没有全市场统一标准,不同量化平台的分类结果可能存在细节差异,策略开发时以 PTrade 平台内部分类为准即可。
六、总结
get_stock_blocks 是 PTrade 中板块分析的核心基础函数,虽然用法简单,但却是行业轮动、概念选股、风格轮动等策略的底层支撑。熟练掌握这个函数,可以快速完成股票标签化、板块筛选、行业分布统计等常见需求,大幅提升策略开发效率。
风险提示
本文仅为量化 API 技术功能分享,不构成任何投资建议。量化交易存在市场风险、策略失效风险、系统运行风险等,投资者需结合自身风险承受能力谨慎参与。