🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 平台如何配置子账户及处理实盘/模拟盘中途追加资金?

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

问题描述

关于subportfolio的两点问题

1,subportfolios 的配置,比如增加子账户,或调整子账户的投资金额,是不是只能在 initialize 中调用?如果对已经在模拟盘或实盘运行的程序,是不是只能重启模拟盘,而不能通过after_code_change中修改来实现?
2,一创实盘运行中的策略,如果中途增加资金转入后,如何体现在subportfolios 中?

解决方案

关于您在 JoinQuant(聚宽)平台使用 subportfolio(子账户)时遇到的问题,根据官方 API 文档,解答如下:

1. 关于 subportfolios 的配置与修改时机

是的,set_subportfolios 只能在 initialize 函数中调用。

  • 初始化限制:官方文档明确指出,set_subportfolios 用于初始化或者修改 subportfolios 的配置,只能在 initialize 中调用,且每个 SubPortfolioConfig 中 cash 的和应该等于总的初始资金。
  • 模拟盘/实盘修改:对于已经在运行的模拟盘或实盘,initialize 函数在整个生命周期中只执行一次。即使您修改了代码,触发了 after_code_changed,也不能after_code_changed 中调用 set_subportfolios 来增加新的子账户或重新分配初始资金结构。如果必须增加新的子账户,通常只能重新创建一个模拟盘。
  • 动态调整资金:如果您只是想在已有的子账户之间调整资金,不需要重启模拟盘,可以在代码中(如定时运行函数或 after_code_changed 中)使用 transfer_cash(from_pindex, to_pindex, cash) 函数来实现子账户间的资金划转。

2. 运行中途增加资金转入的处理方法

如果在策略运行中途(模拟盘或实盘)有外部资金转入或转出,需要使用 inout_cash 函数来将其体现在 subportfolios 中。

  • API 用法inout_cash(cash, pindex=0)
    • cash:转入或转出的金额。正数表示入金(增加资金),负数表示出金(减少资金)。
    • pindex:指定子账户的序号(从 0 开始)。例如,要给第二个子账户追加资金,设为 pindex=1
  • 收益计算影响:调用 inout_cash 后,当日的出入金会从当日开始记入成本,并用于计算收益。也就是说,当日结束计算收益时的本金会自动包含这笔追加的资金,从而保证收益率计算的准确性。

示例代码

# 假设中途向默认子账户(pindex=0)追加了 100,000 元
inout_cash(100000, pindex=0)

(注:根据聚宽官方公告,一创聚宽实盘接口已于 2023 年 12 月 29 日停止维护,但上述 inout_cash 的逻辑在聚宽的模拟交易和支持的其他环境中依然适用。)