🚀 AI 一键生成 joinquant 策略代码

JoinQuant聚宽平台:不关闭模拟盘动态调整资金的方法(附代码)

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

问题描述

模拟盘的模拟资金怎么改?

我想把模拟盘里的资金调整一下,在不关闭模拟策略的情况下怎么改模拟资金呢?谢谢

解决方案

在 JoinQuant (聚宽) 平台上,如果您希望在不关闭当前模拟盘的情况下调整模拟资金,可以通过结合使用 after_code_changed 回调函数和 inout_cash 资金调整函数来实现。

核心原理

  1. after_code_changed(context):模拟盘在每天的交易时间结束后会休眠,第二天开盘时会恢复。如果在恢复时发现策略代码发生了修改,系统会在恢复时自动执行一次这个函数。这非常适合用来在运行中途修改模拟盘状态。
  2. inout_cash(cash, pindex=0):用于账户转入或转出资金。正数为入金,负数为出金。当日的出入金从当日开始记入成本,用于计算收益。

具体操作步骤

第一步:修改策略代码
在您的策略代码中,添加或修改 after_code_changed 函数,在其中调用 inout_cash

例如,如果您想给模拟盘增加 100,000 元,请在代码末尾添加以下内容:

def after_code_changed(context):
    # 增加 100,000 元资金
    inout_cash(100000, pindex=0)
    log.info("已成功追加资金 100,000 元,当前可用资金为:", context.portfolio.available_cash)

如果您想减少 50,000 元,则传入负数:

def after_code_changed(context):
    # 减少 50,000 元资金
    inout_cash(-50000, pindex=0)
    log.info("已成功转出资金 50,000 元,当前可用资金为:", context.portfolio.available_cash)

第二步:保存策略并等待生效
修改代码并保存后,不需要做其他操作。等待第二天模拟盘开盘前(系统从休眠中恢复时),系统检测到代码变更,就会自动执行 after_code_changed 函数,完成资金的调整。

第三步:清理代码(重要!)
在资金调整成功生效(第二天)后,强烈建议您再次修改代码,将 inout_cash 这行代码注释掉或删除。否则,如果您未来因为其他原因再次修改代码,触发了 after_code_changed,系统会再次执行出入金操作,导致资金计算错误。

def after_code_changed(context):
    # 资金调整已完成,注释掉以防重复执行
    # inout_cash(100000, pindex=0)
    pass

注意事项

  • 收益计算:使用 inout_cash 进行出入金后,当日的出入金会记入成本,系统会自动调整收益率的计算基数(即本金会包含当日出入金金额),因此不会导致收益率曲线出现不合理的暴涨或暴跌。
  • 多仓位支持:如果您使用了 set_subportfolios 设置了多个子账户,可以通过修改 pindex 参数(如 pindex=1)来指定给哪个子账户进行出入金。