3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!出现这个问题的原因在于 Alpha 191 因子函数的 code 参数用法不正确。
在 JoinQuant 的 jqlib.alpha191 库中,因子函数(如 alpha_001 等)的 code 参数需要接收一个股票代码的列表(list),而不是一个指数代码的字符串。如果您直接传入 '000905.XSHG',底层函数可能无法正确解析为您想要获取该指数的所有成分股,从而导致返回的股票列表与实际的中证500成分股不一致。
您应该先使用 get_index_stocks 获取指定日期的中证500成分股列表,然后再将这个列表传递给 Alpha 191 因子函数。同时,为了避免未来函数,建议在 get_index_stocks 中明确指定日期。
from jqlib.alpha191 import *
def handle_data(context, data):
# 1. 获取当前日期的中证500成分股列表
stocks = get_index_stocks('000905.XSHG', date=context.current_dt)
# 2. 将成分股列表传入 Alpha 191 因子函数(以 alpha_001 为例)
# 注意:这里假设您调用的具体因子函数名为 alpha_001
df_factor = alpha_001(code=stocks, end_date=context.current_dt)
# 3. 获取股价数据
for stock in stocks:
price = attribute_history(stock, count=117, unit='1d', fields=['open','close'], skip_paused=False, df=True, fq='pre')
# 在这里进行您的策略逻辑处理...
get_index_stocks 的日期参数:在回测中,get_index_stocks('000905.XSHG') 默认会使用 context.current_dt,这部分您的逻辑是正确的。但为了代码的严谨性,建议显式传入 date=context.current_dt。['000001.XSHE', '000002.XSHE', ...] 这样的列表格式。通过 stocks = get_index_stocks(...) 获取到的正是一个符合要求的列表。如果您使用的是聚宽的新版因子库,也可以使用 get_factor_values 函数来获取因子值,用法类似,同样需要传入股票列表。