3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台中,关于策略的 algorithmId 以及它对 create_backtest 函数的影响,可以从以下几个方面来理解:
algorithmId 是变化的吗?通常情况下,同一个策略的 algorithmId 是固定不变的。它是该策略在聚宽平台数据库中的唯一标识符。
如果您发现每次点进策略时 algorithmId 都在变化,可能是以下原因:
algorithmId 应该是固定的。create_backtest 函数的影响会有直接影响。
在研究环境中使用 create_backtest 函数时,algorithm_id 参数用于告诉系统你要运行哪个策略的代码。
algorithmId,系统可能会找不到策略,或者运行的是旧版本的代码。algorithm_id 是您当前想要回测的那个策略的准确 ID(从该策略编辑页的 URL 中 ?algorithmId=xxxx 获取)。code 参数代替 algorithm_id如果您觉得每次去获取 algorithmId 很麻烦,或者担心 ID 变化导致回测出错,强烈建议您使用 create_backtest 函数的 code 参数。
根据 JoinQuant API 文档,create_backtest 支持直接传入策略代码字符串,这样就可以完全脱离对 algorithmId 的依赖。
示例代码:
from jqdata import *
# 1. 将您的策略代码写成一个长字符串
my_strategy_code = """
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
run_daily(market_open, time='09:30')
def market_open(context):
log.info('运行回测')
# 您的策略逻辑...
"""
# 2. 设置回测参数(注意这里不需要 algorithm_id)
params = {
"start_date": "2023-01-01",
"end_date": "2023-12-31",
"frequency": "day",
"initial_cash": 100000,
}
# 3. 创建回测
# 注意:这里直接将 my_strategy_code 传给 code 参数
created_bt_id = create_backtest(code=my_strategy_code, **params)
print("创建的回测 ID:", created_bt_id)
总结:
为了保证研究环境中批量回测或自动化回测的稳定性,推荐直接将策略代码作为字符串通过 code 参数传入 create_backtest,这样既直观又不会受到 algorithmId 变化的任何影响。