🚀 AI 一键生成 joinquant 策略代码

JoinQuant聚宽平台“编译运行”与“运行回测”有什么区别?为什么运行回测更慢?

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

问题描述

编译运行和运行回测有什么区别吗

运行回测比编译运行慢呀,两个有区别?

解决方案

在 JoinQuant(聚宽)量化平台上,**“编译运行”“运行回测”**确实存在显著的区别。这也是为什么您会感觉到“运行回测”比“编译运行”慢的原因。以下是两者的核心区别解析:

1. 运行模式与底层标识不同

根据聚宽 API 文档中 context.run_params.type 的定义,两者的底层运行方式是不同的:

  • 编译运行:底层标识为 'simple_backtest'(简单回测)。
  • 运行回测:底层标识为 'full_backtest'(完整回测)。

2. 核心目的与速度差异

  • 编译运行(速度快):主要目的是快速调试代码。它旨在帮助开发者快速检查代码是否存在语法错误、逻辑漏洞或 API 调用错误(如 NameErrorSecurityNotExist 等)。为了追求速度,它通常会省略大量复杂的图表渲染和指标计算。
  • 运行回测(速度慢):主要目的是全面评估策略表现。它会执行完整的历史回测流程,不仅要逐日/逐分钟撮合交易,还要在回测结束后计算并绘制完整的收益曲线、基准收益曲线,列出每日持仓、每日交易记录,并计算一系列复杂的风险指标(如年化收益、Alpha、Beta、夏普比率、最大回撤等)。这些庞大的计算和数据渲染量导致了其运行速度相对较慢。

3. 性能分析功能(Profile)的支持

如果您在策略中使用了聚宽的性能分析 API enable_profile() 来排查代码耗时:

  • 只有在点击“运行回测”时,才能在回测结果页面看到详细的性能分析结果(如每个函数的执行次数、耗时比例等)。
  • 在“编译运行”模式下,是无法查看性能分析报告的。

💡 开发者建议

为了提高量化策略的开发效率,建议采用以下工作流:

  1. 编写与调试阶段:频繁使用**“编译运行”**,或者选取一个非常短的时间段(如一周或一个月),快速排查代码 Bug。
  2. 策略评估阶段:当代码逻辑确认无误后,再点击**“运行回测”**,选取较长的时间周期(如 3-5 年),以获取完整的风险指标和收益图表,客观评价策略的有效性。