3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)的模拟交易中,替换代码后 after_code_changed 并不是在替换代码的同时立即运行的,而是在第二天模拟盘进程恢复(重启)时运行。
根据 JoinQuant API 文档的说明,模拟盘的运行机制如下:
after_code_changed(context) 函数,那么就会在恢复过程中执行该函数。g 和 context,然后如果代码有变动就会执行 after_code_changed,最后执行 process_initialize。由于模拟盘重启后不再执行 initialize 函数(initialize 在整个模拟盘生命周期中只执行一次),如果你在替换代码时修改了 initialize 中的某些全局变量(例如更换了要交易的股票 g.stock = '000002.XSHE'),这些修改在第二天重启时是不会生效的(系统会直接读取昨天保存的 g.stock 的旧值)。
因此,你必须将需要修改的变量状态写在 after_code_changed 中:
def after_code_changed(context):
# 在这里修改模拟盘中已经持久化保存的变量
g.stock = '000002.XSHE'
log.info("代码已更新,目标股票已切换为 000002.XSHE")
after_code_changed 也会被默认执行一次(在 process_initialize 之前)。