问题描述
解决方案
在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. 注意事项
-
未来函数风险(回测中):
get_stock_blocks获取的是**当下(最新)**的板块归属数据。如果在回测模式下使用(例如回测 2015 年的数据),它返回的仍然是该股票在当前(例如 2024 年)所属的板块。- 风险点:如果某股票在 2015 年不属于“人工智能”概念,但现在属于,回测时会误认为它在 2015 年就是人工智能股。因此在回测中使用需谨慎。
-
代码后缀:
传入的stock_code必须包含后缀(如.SS或.SZ),否则可能无法正确匹配。
Q&A
Q1: 如何获取某个行业(例如“白酒”)下的所有股票代码?
A1: 使用 get_industry_stocks(industry_code) 接口。首先你需要通过 get_stock_blocks 查到“白酒”对应的行业代码(例如聚源行业代码),然后传入该接口获取成分股列表。
Q2: get_stock_blocks 可以在 initialize 中调用吗?
A2: 可以,但通常建议在 handle_data 或 before_trading_start 中调用,或者在 initialize 中调用一次并存储在全局变量 g 中,以避免重复查询。
Q3: 为什么查询不到某些新上市股票的板块信息?
A3: 板块数据的更新依赖于数据商(如聚源)的维护。新股上市后,数据商需要一定时间进行分类和打标签,因此可能存在短暂的数据延迟。
Q4: 返回的板块代码后缀 .XBHS 是什么意思?
A4: 这是 PTrade 内部用于标识板块指数的后缀,代表该代码是一个板块索引,而非具体的个股交易代码。