问题描述
API中,create_backtest函数的示例二:“在研究中指定回测用策略代码:“,algorithm_id = "xxxx",此处的 "xxxx"应该用什么代替?用自己的策略ID吗?那上面的code=''''''''又是什么作用?这个例子不是用code=''''''''里面的代码来进行回测吗?为什么还要策略ID?
解决方案
在 JoinQuant (聚宽) 平台的 API 中,create_backtest 函数用于在研究环境(Jupyter Notebook)中动态创建并运行回测。针对您关于 code 和 algorithm_id 的疑问,以下是详细的解答:
1. code 参数的作用是什么?
code 参数允许您直接以字符串的形式传入策略的 Python 源代码。
在没有 code 参数的情况下,create_backtest 会默认读取您在网页端策略编辑器中写好的代码来运行回测。但是,如果您在研究环境中进行因子测试或参数寻优,频繁去网页端修改代码会非常麻烦。通过 code 参数,您可以直接在研究环境中动态生成或修改策略代码,并立即提交回测,极大地提高了投研效率。
2. algorithm_id = "xxxx" 应该用什么代替?
是的,这里的 "xxxx" 应该替换为您自己在聚宽平台上创建的某个策略的真实 ID。
您可以在聚宽网页端进入“我的策略”,点击任意一个策略进入编辑页面,查看浏览器地址栏的 URL。例如 URL 为 https://www.joinquant.com/algorithm/index/edit?algorithmId=1a2b3c4d5e,那么 1a2b3c4d5e 就是您的 algorithm_id。
3. 既然用了 code 里的代码回测,为什么还要提供 algorithm_id?
这是一个非常好的问题。原因在于聚宽平台的底层架构设计:
- 策略(Algorithm)作为容器:在聚宽的系统中,任何一个“回测(Backtest)”都不能孤立存在,它必须依附于一个“策略(Algorithm)”实体。
algorithm_id就是用来指定这个回测应该挂载到哪个策略名下。 - 代码覆盖机制:当您同时传入
algorithm_id和code时,系统的处理逻辑是:在指定的algorithm_id策略名下创建一个新的回测,但在执行时,忽略该策略原本保存在网页端的代码,转而强制执行您通过code参数传入的代码。
总结
algorithm_id:决定了回测结果保存在哪里(归属问题)。code:决定了回测实际运行什么逻辑(执行问题)。
实际操作建议:
为了保持环境整洁,建议您在网页端专门创建一个名为“研究环境专用回测”的空策略,获取其 algorithm_id。以后在研究环境中使用 create_backtest 并传入 code 时,统一使用这个 ID。这样所有的动态回测记录都会集中在这个策略下,方便管理和查看。