🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 平台如何正确理解财务数据获取的时间逻辑?避免未来函数

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

问题描述

本人愚钝,还是不太明白哪个时间不一样,我是不是该这样理解:6.23日K1取的是开盘9:30的数据,而6.24日K2取的是6.23日收盘15:00的数据?

解决方案

您好!理解财务数据的时间逻辑确实是量化回测中非常关键的一步,这直接关系到策略是否包含了**“未来函数”**。

您的理解有一点偏差。在 JoinQuant 平台中,财务数据(如财报、市值等)的获取并不是精确到当天的 9:30 或 15:00,而是基于**“按天(收盘后)”**的逻辑来严格对齐的。

为了让您彻底明白,我们可以用一句话来总结核心原则:“在今天的任何交易时刻(无论是9:30还是14:50),你只能看到昨天及以前已经公开的财务数据。”

详细原理解析

1. get_fundamentals 函数的默认逻辑

当您在回测中调用 get_fundamentals 查询财务数据,且不传入 date 参数时:

  • 回测模块的默认行为:系统会自动将查询日期设定为 context.current_dt前一天
  • 为什么这样做? 因为在实际交易中,今天(T日)盘中交易时,您只能确切知道昨天(T-1日)收盘后已经发布的财报和市值数据。今天盘中或盘后才发布的数据,在今天交易时是未知的。

2. 举个具体的例子(以6月23日和6月24日为例)

假设某上市公司在 6月23日晚上(盘后) 发布了最新的季度财报。

  • 场景 A:回测运行到 6月23日 09:30

    • 此时 context.current_dt 是 6月23日。
    • 系统默认查询的是 6月22日 能看到的最新财报。
    • 结果:您获取不到6月23日晚上才发布的最新财报,获取到的依然是上一季度的旧财报。这是完全符合现实的。
  • 场景 B:回测运行到 6月24日 09:30

    • 此时 context.current_dt 是 6月24日。
    • 系统默认查询的是 6月23日 能看到的最新财报。
    • 结果:因为财报在6月23日已经发布,所以您在6月24日的回测中可以获取到这份最新的财报数据。

3. 因子库中的财务因子逻辑

如果您使用的是聚宽因子库(如在自定义因子中设置 dependencies = ['operating_revenue']):

  • 文档中明确指出:operating_revenue 表示每天可以看到的最新单季度数据
  • 如果财报在非交易日(如周六 10月21日)发布,那么在下周一(10月23日)的逻辑时间里,您就能获取到这份最新的财报数据。在10月20日(周五)及之前,获取到的都是旧数据。

总结

您不需要去纠结是 9:30 还是 15:00。您只需要记住:系统为了保护您的策略不使用未来数据,永远只给您提供“昨天及以前”已经确定的财务报表和市值信息。 这样回测出来的结果才是真实可信的。