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

JoinQuant 聚宽回测精度不准?提升回测真实度的核心技巧与数据避坑指南

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

问题描述

始终感觉回测的精度不是很准

始终感觉回测的精度不是很准。请教下大家感觉聚宽的数据到底怎么样? 需要特别注意些什么吗?

除了cost设置,滑点的设置!
大家给点看法,给点建议,谢谢!

解决方案

很多量化交易者在实盘或模拟盘中都会遇到“回测如神仙,实盘如狗屎”的情况。除了您已经提到的**交易税费(cost)滑点(slippage)**设置外,回测精度不准往往是由数据处理方式、撮合机制以及无意中引入的未来函数导致的。聚宽(JoinQuant)的数据整体质量在国内量化平台中属于第一梯队,但为了让回测尽可能贴近真实市场,您需要特别注意以下几个核心设置和底层逻辑:

1. 强烈建议开启“真实价格模式”(动态复权)

传统的“前复权”回测模式存在一个致命缺陷:它使用的是基于今天(回测当天)的复权因子计算出的历史价格。这意味着历史价格中包含了未来的分红派息信息,存在严重的未来函数,会导致回测买入数量和资金计算出现偏差。
解决方案:在 initialize 函数中务必开启真实价格模式:

set_option('use_real_price', True)

开启后,回测将使用历史当时的真实价格进行撮合成交,并在发生拆分或分红时,根据历史当时的复权因子自动调整账户持股数量和现金,完美规避复权导致的未来函数。

2. 限制成交量比例(流动性限制)

在回测中,如果您下了一个大单,系统默认可能会全部成交,但在真实市场中,大单会受到盘口流动性的限制,甚至造成巨大的冲击成本。
解决方案:使用 order_volume_ratio 限制每日/每分钟的最大成交量比例。例如,限制您的订单成交量不超过市场真实成交量的 25%:

set_option('order_volume_ratio', 0.25)

如果下单量超过该比例,市价单超出的部分会被撤单,限价单则会继续挂单等待撮合,这能极大提升大资金回测的真实度。

3. 严防“未来函数”

未来函数是回测精度不准的罪魁祸首。聚宽提供了一个实验性功能来帮助检测和规避部分未来数据:

set_option("avoid_future_data", True)

开启后,如果您尝试获取当前逻辑时间之后的数据,系统会报错或自动剔除未来数据。

4. 财务数据的“时间陷阱”

在使用 get_fundamentals 获取财务数据时,参数 datestatDate 的使用非常关键:

  • 推荐使用 date:传入 date 时,系统会查找该日期收盘后所能看到的最近发布的数据,这符合真实交易场景,没有未来函数。
  • 慎用 statDate:如果您指定了 statDate='2020q1',由于公司发布财报有滞后性(通常在4月底才发布完一季报),如果您在3月份的回测中使用了这个数据,就引入了未来函数。

5. 理解 K 线对齐与撮合机制

  • K线时间标识:聚宽的 K 线数据是后对齐的。例如,09:31 的一分钟 K 线,其数据时间为 09:25:00~09:30:59,包含了集合竞价的数据。如果您在 09:30 下单,实际上是在 09:31 的 Bar 结束时才完成撮合。
  • 限价单撮合:在分钟/天频率下,限价单会在 Bar 结束时按照 Bar 的最高/最低价尝试撮合。这种机制在波动剧烈的行情中可能会产生比实盘更乐观的成交结果。

6. 涨跌停板的撮合逻辑

在未启用盘口撮合(回测默认状态)时,如果标的“最新价+滑点”触及涨跌停板:

  • 跌停时,市价卖单会被撤销。
  • 涨停时,市价买单会被撤销。
    请检查您的策略日志,看看是否有大量在涨跌停板上“强行成交”的假象,这通常是因为没有正确处理涨跌停状态导致的。

总结:聚宽的数据本身是可靠的,回测的“不准”多半来源于策略对市场微观结构的简化。通过开启 use_real_price、限制 order_volume_ratio、严格使用 date 获取财务数据,并深入理解平台的 Bar 撮合机制,您可以将回测的真实度提升到一个全新的水平。