🚀 AI 一键生成 joinquant 策略代码

JoinQuant 聚宽平台 get_price 与 Alpha 因子在不同时间点的取数逻辑解析

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

问题描述

get_price和alpha取数

用get_price在9:00和19:00取到的股价是一样的?不是说9:30开盘前取到的是昨天的吗?按此9:00取到的应是昨天的,19:00取到的是今天收盘后的当天数据。

另外,用alpha取的因子值分别在以上两个时间取的是什么时间的数据呢?

解决方案

在 JoinQuant 聚宽平台中,数据的获取逻辑与您所处的环境(回测/模拟交易 vs 投资研究)以及底层数据的更新机制密切相关。以下为您详细解答 get_pricealpha 因子在不同时间点的取数逻辑:

一、 关于 get_price 的取数逻辑

您提到在 9:00 和 19:00 用 get_price 取到的股价是一样的,这通常取决于您是否指定了 end_date 以及您运行代码的环境

  1. 在回测/模拟交易环境中

    • 引擎是基于逻辑时间(context.current_dt)运行的。如果您在 before_trading_start(默认 9:00 运行)调用 get_price 获取日线(1d)数据,由于当天的交易尚未产生,您获取到的最新数据确实是昨天的收盘数据。
    • 如果您在 after_trading_end(15:30 运行)或之后的逻辑时间调用,您获取到的将是今天的收盘数据。
  2. 在投资研究环境(Jupyter Notebook)中

    • 如果您没有指定 end_dateget_price 默认会获取到当前系统时间之前的数据。
    • 为什么 19:00 取到的可能和 9:00 一样? 根据聚宽官方文档说明:“我们当日的回测数据会在收盘后通过多数据源进行校验,并在 T+1(第二天)的 00:01 更新。” 虽然盘后(如 15:30 之后)会生成当天的初步行情数据,但经过严格校验的最终日线数据通常在次日凌晨入库。如果在某些特定情况下(或未指定精确到分钟的 end_date),系统可能默认返回已完全校验的 T-1 日数据。为了在 19:00 准确获取当天的收盘价,建议明确指定 end_date 为当天的日期(如 end_date='2023-10-25 15:00:00')。

二、 关于 alpha 因子的取数逻辑

对于聚宽因子库中的因子(包括 Alpha 101、Alpha 191 等),其更新机制与基础行情数据不同。

根据聚宽 API 文档说明:

“频率为天,每天 05:00 更新前一天数据”

这意味着,因子数据的计算需要依赖前一个交易日完整的收盘数据和财务数据,并在夜间进行批处理计算,直到次日凌晨 05:00 才更新完毕。

因此,无论您是在 9:00 还是 19:00 调用 alpha 因子取数函数(如 alpha_001get_factor_values):

  • 您取到的都是 T-1 日(昨天)的因子数据
  • 例如:假设今天是周二,您在周二的 9:00 或 19:00 请求当天的因子值,实际上底层返回的最新有效因子值都是周一收盘后计算出来的结果。两者在时间戳上是一致的。

总结建议

  • 获取行情 (get_price):在研究环境中,若想在盘后立即获取当天数据,请务必带上包含具体时分秒的 end_date 参数(如 15:00:00)。
  • 获取因子 (alpha):请牢记因子数据是 T+1 日凌晨 05:00 更新 T 日数据,日内任何时间获取的最新因子均为前一交易日的结果,不存在 9:00 和 19:00 的差异。