3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant (聚宽) 平台上,如果您希望在不关闭当前模拟盘的情况下调整模拟资金,可以通过结合使用 after_code_changed 回调函数和 inout_cash 资金调整函数来实现。
after_code_changed(context):模拟盘在每天的交易时间结束后会休眠,第二天开盘时会恢复。如果在恢复时发现策略代码发生了修改,系统会在恢复时自动执行一次这个函数。这非常适合用来在运行中途修改模拟盘状态。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)来指定给哪个子账户进行出入金。