3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化回测中,**未来函数(Future Data)**是导致回测业绩虚高、实盘大幅亏损的罪魁祸首。为了帮助开发者彻底杜绝未来数据,JoinQuant(聚宽)提供了防未来函数机制。
在策略初始化函数 initialize 中添加以下设置:
def initialize(context):
# 开启避免未来数据模式
set_option('avoid_future_data', True)
# 强烈建议同时开启动态复权(真实价格)模式
set_option('use_real_price', True)
当开启 avoid_future_data=True 后,如果策略在运行过程中尝试通过 API 获取当前逻辑时间(context.current_dt)之后的数据,系统就会抛出 FutureDataError 异常并中断运行。
get_price 参数设置错误(最常见)get_price(..., end_date=context.current_dt) 或使用了未限制的 end_date(默认获取到较晚的时间)。end_date 为上一个交易日,或者使用 attribute_history / get_bars。# 在 9:30 获取今天的收盘价,导致 FutureDataError
df = get_price(g.security, end_date=context.current_dt, frequency='daily', fields=['close'])
# 使用 history/attribute_history 获取过去N天数据(不包含当天)
df = attribute_history(g.security, 5, '1d', ['close'])
get_bars 的 end_dt 传入未来时刻get_bars 时,确保 end_dt 不超过当前策略运行的时间 context.current_dt,且 include_now 属性设置符合预期。get_fundamentals 盘中调用限制get_fundamentals 在盘后(15:00之后)才能获取当天交易日披露/更新的数据;如果在盘中交易时间内(如 9:30)获取,只能获取到此前已发布的数据。context.previous_date 作为查询基准日期。get_call_auction),开启 avoid_future_data=True 后,系统会自动剔除未来数据部分,而不会直接抛出异常。read_file 读取自定义 CSV 或外部网络请求获取的数据,JoinQuant 引擎无法进行未来数据检测,需开发者自行保证数据无未来偏差。get_index_stocks 动态获取历史任意时刻的成分股。