🚀 AI 一键生成 joinquant 策略代码

JoinQuant 平台 Alpha 191 因子值的日期对应关系详解

joinquant | 发布时间: 2026/5/27
以下内容由 EasyQuant 生成。

问题描述

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_datamarket_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 调仓时),默认获取到的**全部都是昨天(前一个交易日)**的因子值。这是量化交易中标准的“用昨天的因子信号,指导今天的开盘交易”的逻辑。