3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
get_bars 函数不能直接用于获取申万一级行业指数的行情数据。
根据 JoinQuant 官方 API 文档的说明:“目前不支持行业的行情数据,及指数的PE/股息率”。
在您的代码中,报错 ParamsError: 找不到标的801740 的原因如下:
get_industries(name="sw_l1") 返回的 index 是行业代码(例如 '801740' 代表申万的某个一级行业)。get_bars 函数的 security 参数期望接收的是标准的交易标的代码(如股票 '000001.XSHE'、标准指数 '000300.XSHG' 或期货合约等)。get_bars 接收到 '801740' 时,它会调用底层接口去查询该标的的信息,由于聚宽数据库中并没有将行业代码作为可直接查询 K 线行情的标的,因此抛出 ParamsError: 找不到标的 的异常。既然聚宽官方不直接提供行业指数的 OHLCV(开高低收量)行情数据,如果您需要分析某个行业的走势,可以通过获取该行业的所有成分股,然后自行加权计算行业指数来实现。
以下是计算行业指数(以等权重为例)的替代方案代码示例:
from jqdata import *
import pandas as pd
import datetime
# 1. 获取申万一级行业列表
sw_l1_industries = get_industries(name="sw_l1").index.tolist()
# 假设我们只计算第一个行业 '801180' (房地产I) 的走势
industry_code = sw_l1_industries[0]
# 2. 获取该行业下的所有成分股
stocks = get_industry_stocks(industry_code)
# 3. 获取这些成分股的行情数据
# 注意:为了避免停牌股影响,建议获取后进行数据清洗
df_close = get_bars(stocks, count=42, unit='1w',
fields=['close'], include_now=True,
df=True)['close'].unstack().T
# 4. 自行合成行业指数(这里以简单的等权重平均为例)
# 实际应用中,您可能需要根据市值 (market_cap) 进行加权平均
industry_index_close = df_close.mean(axis=1)
print(f"行业 {industry_code} 的等权重收盘价走势:")
print(industry_index_close)
进阶建议:
如果您需要更精确的行业指数(如市值加权),可以结合 get_valuation 函数获取成分股的 market_cap(总市值)或 circulating_market_cap(流通市值),然后将每日的个股收盘价按市值权重进行加权求和,从而拟合出真实的行业指数走势。