🚀 AI 一键生成 joinquant 策略代码

JoinQuant 如何获取特定概念板块的成分股列表?

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

问题描述

如何获取某个概念板块(例如锂电池)的所有股票代码?

解决方案

在 JoinQuant(聚宽)平台中,获取某个概念板块(如“锂电池”)的所有股票代码,主要分为两步:

  1. 查找概念代码:使用 get_concepts() 获取所有概念板块列表,找到“锂电池”对应的代码(通常以 GN 开头)。
  2. 获取成分股:使用 get_concept_stocks(concept_code) 获取该板块下的股票列表。

以下是具体的代码实现示例:

代码实现

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

def get_stocks_by_concept_name(name_keyword):
    """
    根据概念名称关键字获取股票列表
    """
    # 1. 获取所有概念板块信息
    # 返回一个 DataFrame,索引(index)是概念代码,name列是概念名称
    all_concepts = get_concepts()
    
    # 2. 查找包含关键字(如'锂电池')的概念
    # 使用 str.contains 进行模糊匹配,防止名称有细微差别
    target_concepts = all_concepts[all_concepts['name'].str.contains(name_keyword)]
    
    if target_concepts.empty:
        print(f"未找到包含 '{name_keyword}' 的概念板块。")
        return []
    
    print(f"找到相关概念板块信息:\n{target_concepts}")
    
    # 3. 获取第一个匹配项的股票代码(通常会有多个相关概念,这里取第一个作为示例)
    # 实际使用中,建议根据打印出的 target_concepts 确认你需要具体的 concept_code
    concept_code = target_concepts.index[0] 
    concept_name = target_concepts.iloc[0]['name']
    
    print(f"\n正在获取板块【{concept_name} ({concept_code})】的成分股...")
    
    # 4. 获取该板块下的所有股票代码
    # date参数默认为None,表示获取当前日期的成分股;回测中会自动跟随回测日期
    stock_list = get_concept_stocks(concept_code, date=None)
    
    return stock_list

# --- 调用示例 ---
# 查找“锂电池”相关的股票
lithium_stocks = get_stocks_by_concept_name('锂电池')

print(f"\n获取到的股票数量: {len(lithium_stocks)}")
print(f"前10只股票代码: {lithium_stocks[:10]}")

关键函数说明

  1. get_concepts()

    • 功能:获取所有概念板块的列表。
    • 返回值pandas.DataFrame,其中 index 是概念代码(如 GN038),name 列是概念名称。
  2. get_concept_stocks(concept_code, date=None)

    • 功能:获取指定概念板块的成分股。
    • 参数
      • concept_code:概念板块代码(字符串),例如 'GN038'
      • date:查询日期。默认为 None。在研究中默认为今天;在回测中默认为回测当天的日期(避免未来函数)。
    • 返回值:包含股票代码的 list

常见问题 (Q&A)

Q: 为什么我直接输入中文名称无法获取股票?
A: get_concept_stocks 函数只接受概念代码(如 'GNxxx')作为参数,不接受中文名称。因此必须先通过 get_concepts() 找到中文名称对应的代码。

Q: 如何查看某个股票属于哪些概念板块?
A: 可以使用 get_concept(security, date=None) 函数。例如 get_concept('000001.XSHE') 会返回平安银行所属的所有概念板块代码和名称。

Q: 获取的数据是实时的吗?
A: 在回测环境中,数据会根据回测时间动态变化(例如某只股票在2018年才被纳入锂电池板块,在2017年的回测中就不会包含它),这有效避免了未来函数。在研究环境中,默认获取的是最新数据。