🚀 AI 一键生成 joinquant 策略代码

JoinQuant 数据查询:使用 get_industry 批量查询股票所属行业

joinquant | 发布时间: 2025/12/19
以下内容由 EasyQuant 生成。

问题描述

如何批量查询一组股票所属的行业分类?

解决方案

在 JoinQuant 聚宽平台中,批量查询一组股票所属的行业分类主要使用 get_industry 函数。该函数支持传入一个股票代码列表,并返回这些股票在不同行业标准(如申万、聚宽、证监会)下的分类信息。

以下是具体的实现方法和代码示例。

核心函数说明

get_industry(security, date=None)

  • security: 标的代码列表,例如 ['000001.XSHE', '600519.XSHG']
  • date: 查询日期。默认为 None(回测中为当前回测日期,研究中为最新日期)。如果需要查询历史上的行业分类(因为行业分类可能会变更),可以指定具体日期。
  • 返回值: 一个字典(Dict),Key 是股票代码,Value 是包含各行业分类信息的字典。

代码实现

以下代码展示了如何批量查询股票列表,并提取出“申万一级行业”和“聚宽一级行业”名称。

# -*- coding: utf-8 -*-
from jqdata import *

def get_batch_industries():
    # 1. 定义需要查询的股票列表
    security_list = [
        '000001.XSHE', # 平安银行
        '600519.XSHG', # 贵州茅台
        '000002.XSHE', # 万科A
        '300750.XSHE'  # 宁德时代
    ]
    
    # 2. 调用 get_industry 函数
    # date=None 默认获取当前日期的行业分类
    results = get_industry(security=security_list, date=None)
    
    # 3. 遍历并打印结果
    print(f"{'股票代码':<15} | {'申万一级行业':<15} | {'聚宽一级行业':<15}")
    print("-" * 50)
    
    for stock in security_list:
        # 获取该股票的行业数据
        ind_data = results.get(stock)
        
        if ind_data:
            # 提取申万一级行业名称 (sw_l1)
            sw_name = ind_data.get('sw_l1', {}).get('industry_name', '无数据')
            
            # 提取聚宽一级行业名称 (jq_l1)
            jq_name = ind_data.get('jq_l1', {}).get('industry_name', '无数据')
            
            print(f"{stock:<15} | {sw_name:<15} | {jq_name:<15}")
        else:
            print(f"{stock:<15} | 数据缺失")

# 在研究环境中直接运行,或在回测的 initialize 中调用
get_batch_industries()

返回数据结构详解

get_industry 返回的字典结构如下所示,包含多种分类标准:

  • sw_l1 / sw_l2 / sw_l3: 申万一、二、三级行业。
  • jq_l1 / jq_l2: 聚宽一、二级行业。
  • zjw: 证监会行业分类。

单只股票的返回值示例:

{
    '000001.XSHE': {
        'sw_l1': {'industry_code': '801780', 'industry_name': '银行I'},
        'sw_l2': {'industry_code': '801192', 'industry_name': '银行II'},
        'jq_l1': {'industry_code': 'HY007', 'industry_name': '金融指数'},
        'zjw':   {'industry_code': 'J66', 'industry_name': '货币金融服务'}
        # ... 其他层级
    }
}

Q&A

Q: get_industry 函数支持查询历史日期的行业分类吗?
A: 支持。通过设置 date 参数(例如 date='2018-06-01'),可以获取该日期当时生效的行业分类。这对于回测非常重要,因为股票的行业归属可能会随时间发生变更。

Q: 如果传入的股票代码已经退市,还能查到行业吗?
A: 可以。只要该股票在指定的 date 日期是上市状态或有历史数据记录,通常可以查到当时的行业分类。如果 date 设为最新日期查询已退市很久的股票,可能会返回 None 或空数据。

Q: 如何获取系统中所有支持的行业列表?
A: 可以使用 get_industries(name='sw_l1') 函数来获取所有申万一级行业的代码和名称列表,参数 name 支持 sw_l1, jq_l1, zjw 等。

Q: 为什么有时候查询结果中某些行业标准(如 sw_l3)是空的?
A: 并非所有股票都有细分的行业分类,或者某些行业标准(如申万)在特定时期进行了调整。此外,新上市的股票可能需要几天时间才会更新行业分类数据。建议在代码中加入 .get({}, '无数据') 这样的容错处理。