3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)的最新官方 API 文档中,get_industries 函数确实是支持 date 参数的,其标准定义为 get_industries(name, date=None)。传入 date 可以返回该日期当天存在的行业。
如果您在调用 get_industries(name='sw_l3', date=context.previous_date) 时遇到了 TypeError: get_industries() got an unexpected keyword argument 'date' 的错误,通常是由以下几种原因导致的:
jqdatasdk,且该库的版本较老,尚未包含支持 date 参数的更新。date 参数的 API。如果您是在本地 Python 环境中使用 jqdatasdk,请打开命令行终端,运行以下命令升级到最新版本:
pip install -U jqdatasdk
升级后重启 Python 内核即可。
如果您在无法升级底层 API 的环境中(如券商版聚宽),可以通过不传 date 参数获取所有历史行业列表,然后利用返回的 DataFrame 中的 start_date 字段自行进行日期过滤。
get_industries 返回的 DataFrame 包含 index (行业代码), name (行业名称), start_date (开始日期)。
替代代码示例:
import pandas as pd
from jqdata import *
def get_industries_by_date(name, target_date):
# 1. 不传 date 参数,获取该分类下历史上所有的行业
df = get_industries(name=name)
# 2. 将 target_date 转换为 pandas 的 Timestamp 以便比较
target_dt = pd.to_datetime(target_date)
# 3. 过滤出 start_date 小于等于目标日期的行业
# 注意:有些行业的 start_date 可能为空,需要做填充或丢弃处理
df['start_date'] = pd.to_datetime(df['start_date'])
valid_industries = df[df['start_date'] <= target_dt]
return valid_industries
# 在策略的 handle_data 或其他函数中使用:
# target_date = context.previous_date
# my_industries = get_industries_by_date(name='sw_l3', target_date=target_date)
# print(my_industries)
通过这种方式,即使底层 API 不支持 date 参数,您依然可以准确获取到指定日期当时有效的行业列表,从而避免 TypeError 报错。