191因子值的日期
用alpha(code,benchmark='000300.XSHG',end_date=None, fq='pre', alpha=[])获取到的因子值是什么时间的?就是什么时候获取的是当天?什么时候获取的是昨天的?
问题描述
解决方案
在 JoinQuant 平台上获取 Alpha 191 因子值(或使用 get_factor_values 等因子获取函数)时,关于获取到的因子值对应的时间,主要取决于数据更新机制以及你所处的运行环境(回测/模拟 vs 研究环境)。
简单来说:因子值是基于日线收盘数据计算的,因此在盘中交易时,你只能获取到昨天(前一个交易日)的因子值。
以下是详细的规则解析:
1. 因子数据的底层更新机制
- 计算依赖:绝大多数 Alpha 191 因子依赖于股票的日线数据(开、高、低、收、量等)。T 日的因子值,必须等 T 日收盘后才能计算。
- 更新时间:根据聚宽官方文档说明,因子库的数据频率为天,每天 05:00 更新前一天的数据。
2. 回测与模拟交易环境
在回测或模拟交易中(例如在 handle_data 或 market_open 中调用):
- 默认情况(
end_date=None):系统为了避免未来函数,会自动将end_date设定为当前逻辑时间的前一个交易日。例如,当前回测时间是 2023-10-10 09:30,你获取到的因子值实际上是 2023-10-09(昨天) 收盘后计算出来的因子值。 - 指定
end_date:如果你强行指定end_date为当天(例如context.current_dt),由于当天的因子在盘中还未生成,系统通常会返回 NaN,或者自动回退到能获取到的最新数据(即昨天的数据)。
3. 研究环境(Jupyter Notebook)
在研究环境中调用时:
- 指定
end_date为历史某天:如果你指定end_date='2023-10-10',你获取到的就是 2023-10-10 这一天收盘后计算的因子值。 - 指定
end_date为今天(现实时间):- 如果你在今天盘中(如下午 2 点)运行,今天的因子还没算出来,获取会报错或返回空值/昨天的数据。
- 如果你在明天早上 5 点之后运行并指定
end_date为今天,你就能获取到今天收盘后的因子值。
总结
- 什么时候获取的是当天的? 只有在现实时间的第二天凌晨 05:00 之后,你才能在研究环境中通过指定
end_date为昨天,获取到“昨天”的因子值。在策略运行的盘中,永远无法获取当天的因子值(因为还没收盘)。 - 什么时候获取的是昨天的? 在回测和模拟交易的盘中(如 9:30 调仓时),默认获取到的**全部都是昨天(前一个交易日)**的因子值。这是量化交易中标准的“用昨天的因子信号,指导今天的开盘交易”的逻辑。