3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant 聚宽平台上,使用 set_option("avoid_future_data", True) 不能彻底规避所有的未来函数。它只是一个辅助工具,能够帮助你避免一些常见的、通过 API 时间参数引入的未来数据问题,但它不是万能的。
关于财报发布延迟的问题,是否会引入未来函数,取决于你查询财务数据时使用的参数,而不是仅仅依赖 avoid_future_data。
在聚宽中,查询财务数据通常使用 get_fundamentals 函数,它有两个关键的时间参数:date 和 statDate。
date 参数(推荐,无未来函数)如果你使用 date 参数(例如 date='2023-03-31'),系统会查找上市公司在 该日期之前(包括此日期)实际发布 的最新数据。
date 参数本身就不会产生未来函数,不需要依赖 avoid_future_data 来规避。statDate 参数(危险,极易产生未来函数)如果你使用 statDate 参数(例如 statDate='2023q1'),系统会直接返回 2023 年第一季度的财务报表数据。
2023q1 的数据,系统可能会把后来才发布的财报数据提前给你。avoid_future_data,也无法完全检测和拦截这种通过 statDate 强制获取特定季度财报的行为。avoid_future_data 的作用与局限性close),系统会抛出 FutureDataError 异常。statDate 查询财报:如上文所述,强制查询未发布的季度财报。set_option('use_real_price', False)),使用了基于未来某天的前复权价格进行撮合,这也会引入未来函数。为了在聚宽中彻底规避未来函数,你应该做到以下几点:
set_option('use_real_price', True),这是避免价格复权未来函数的基础。set_option("avoid_future_data", True),作为第一道防线。date 参数:在调用 get_fundamentals 时,尽量使用 date 参数(或不传时间参数,让其默认使用 context.current_dt 的前一天),坚决避免在回测中使用 statDate。