问题描述
怎么获取概念板块的历史数据?有AIP吗
解决方案
在 JoinQuant(聚宽)平台上,目前没有直接提供概念板块的历史行情数据(如开盘价、收盘价等)。但是,平台提供了丰富的 API 来获取概念板块的列表、成分股以及股票所属的概念,你可以通过获取成分股的历史行情来自行合成概念板块的历史数据。
以下是与概念板块相关的 API 及其使用方法:
1. 获取所有的概念板块列表
使用 get_concepts() 可以获取平台支持的所有概念板块列表。
from jqdata import *
# 获取所有的概念板块列表
concepts_df = get_concepts()
print(concepts_df.head())
返回值是一个 DataFrame,包含 index(概念代码)、name(概念名称)和 start_date(开始日期)。
2. 获取概念板块在历史某天的成分股
使用 get_concept_stocks(concept_code, date=None) 可以获取在给定日期某个概念板块的所有股票。
from jqdata import *
# 获取风电概念板块(假设代码为'SC0084')在 2019-04-16 的成分股
stocks = get_concept_stocks('SC0084', date='2019-04-16')
print(stocks)
3. 获取某只股票所属的概念板块
使用 get_concept(security, date=None) 可以查询某只股票在指定日期属于哪些概念板块。
from jqdata import *
# 查询平安银行在 2019-07-15 所属的概念板块
concept_dict = get_concept('000001.XSHE', date='2019-07-15')
print(concept_dict)
💡 替代方案:如何自行计算概念板块的历史行情?
既然没有直接的板块行情数据,你可以通过以下步骤自行计算(例如计算等权重的板块指数):
- 使用
get_concept_stocks获取某一天该概念板块的所有成分股。 - 使用
history或get_price获取这些成分股在当天的收盘价或涨跌幅。 - 对这些成分股的涨跌幅进行平均(等权平均)或按市值加权平均,从而得出该概念板块当天的整体表现。
示例代码(计算某概念板块当天的等权平均涨幅):
def get_concept_daily_return(concept_code, date):
# 获取当天的成分股
stocks = get_concept_stocks(concept_code, date=date)
if not stocks:
return 0.0
# 获取这些股票昨天和今天的收盘价
# 注意:为了避免停牌股的影响,实际应用中可能需要更严谨的处理
df = get_price(stocks, end_date=date, count=2, fields=['close'], panel=False)
# 计算每只股票的涨跌幅并求平均
# 这里仅提供一个简化的思路
pass
总结来说,虽然聚宽没有直接提供概念板块的 K 线图数据,但通过 get_concept_stocks 结合行情 API,你完全可以灵活地构建出所需的板块历史数据指标。