问题描述
请问get_factor_kanban_values可以在回测中使用吗,是不是只能取最新数据?
解决方案
您好!关于 get_factor_kanban_values 函数的使用,解答如下:
1. 是否只能取最新数据?
是的。 get_factor_kanban_values 函数主要用于获取因子看板的综合评估数据。从 API 的参数设计可以看出,它并没有提供 date、start_date 或 end_date 等用于指定历史时间的参数。因此,每次调用该函数时,返回的都是系统最新计算好的因子看板数据(返回的 DataFrame 中包含 date 列,表示数据的更新日期)。
2. 可以在回测中使用吗?
强烈不建议在回测中使用。
由于该函数只能获取最新数据,如果您在回测中调用它,无论您的回测逻辑时间(context.current_dt)运行到历史的哪一天,它返回的始终是现实世界中最新的数据。这会导致严重的未来函数问题(即在历史时刻使用了未来的信息),从而使得回测结果完全失真,没有任何参考价值。
3. 回测中获取因子数据的正确替代方案
如果您需要在回测策略中根据历史的因子值进行选股或调仓,请使用 get_factor_values 函数。
get_factor_values 支持传入时间参数,可以严格按照回测的当前时间获取历史因子数据,完美避免未来函数。使用示例如下:
from jqfactor import get_factor_values
def handle_data(context, data):
# 获取沪深300成分股
stocks = get_index_stocks('000300.XSHG', date=context.current_dt)
# 获取过去1天的因子值,严格使用 context.previous_date 避免未来数据
factor_data = get_factor_values(
securities=stocks,
factors=['Skewness60', 'DEGM'],
end_date=context.previous_date,
count=1
)
# 提取具体的因子值进行后续逻辑处理
skewness_df = factor_data['Skewness60']
# ... 您的选股逻辑 ...
总结: get_factor_kanban_values 适合在研究环境中用于因子分析、筛选和策略前期的评估;而在回测和模拟交易的代码中,请务必使用 get_factor_values 来获取截面或时间序列的因子数据。