3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易回测中,**未来函数(未来数据)**是导致回测收益虚高、实盘表现惨淡的“最大杀手”。聚宽(JoinQuant)平台提供了 avoid_future_data 选项,帮助开发者在回测阶段及时发现并剔除未来数据。以下是关于该选项的开启方法及检测机制的详细介绍。
avoid_future_data 模式?要开启避免未来数据模式,您需要在策略的初始化函数 initialize(context) 中调用 set_option 函数。该选项默认是关闭的(False)。
开启代码示例:
def initialize(context):
# 开启避免未来数据模式
set_option("avoid_future_data", True)
# 建议同时开启真实价格(动态复权)模式,以获得最真实的回测环境
set_option('use_real_price', True)
avoid_future_data 能检测和处理哪些未来数据?开启该功能后,系统主要针对以下两类未来数据进行检测和处理:
这类数据是指在回测中,用户通过包含时间参数的 API 尝试获取当前逻辑时间(context.current_dt)之后的数据。
get_bars 或 get_price 尝试获取当天 15:00 的分钟数据或收盘价。avoid_future_data=True 后,如果策略代码尝试获取未来时间段的数据,系统会直接抛出 FutureDataError 异常并中断回测,提醒您修改代码。这类数据是指由于 API 自身的机制,用户无法通过调整参数来主动规避的未来信息。
get_call_auction 获取集合竞价数据。avoid_future_data=True 后,系统不会抛出异常,而是自动将返回结果中的未来数据剔除掉,确保您的策略在当前时间点只能拿到已经发生的历史数据。avoid_future_data 的注意事项虽然 avoid_future_data 是一个非常实用的辅助工具,但它不是万能的,您在编写策略时仍需注意以下几点:
avoid_future_data 无法对其进行检测。您需要自行确保这些外部数据在回测时间点是可得的。get_fundamentals(查询财务数据)在盘后(15:00)才能获取当天交易日的数据,在当天收盘前只能获取以前的数据。