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

joinquant 子账户资金管理:如何使用 inout_cash 在指定 pindex 进行动态出入金

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 子账户资金管理:inout_cash 在指定 pindex 上的动态出入金

Question: 如何在运行过程中为指定的子账户(pindex)单独追加或划转资金?

解决方案

JoinQuant 子账户资金管理:指定 pindex 的动态出入金与资金划转

在 JoinQuant(聚宽)量化平台中,当策略包含多个交易品种(例如同时操作股票与期货)或需要多仓位独立管理时,通常会通过 set_subportfolios 创建多个子账户(SubPortfolio)。本文将详细介绍如何在运行过程中对指定的子账户(pindex)进行资金的追加、提现及子账户间的资金划转。


一、初始化多子账户 (set_subportfolios)

initialize 函数中,可以使用 set_subportfolios 来划分初始资金与交易类型。子账户按照索引 pindex 依次为 0, 1, 2...


二、为指定子账户出入金 (inout_cash)

使用 inout_cash(cash, pindex=0) 函数,可以向特定的子账户追加(入金)或划出(出金)资金。

1. API 参数说明

  • cash: 浮点数,正数表示入金,负数表示出金。
  • pindex: 子账户索引,从 0 开始。默认值为 0

2. 计息与成本说明

  • 当日出入金会即时影响该子账户的可用资金(available_cash)。
  • 当日出入金从当日开始记入成本,用于计算收益(当日结束计算收益时的本金包含当日出入金金额)。

3. 代码示例

def market_open(context):
    # 查看子账户 1 (期货账户) 的当前可用资金
    log.info('子账户1当前可用资金:', context.subportfolios[1].available_cash)
    
    # 为子账户 1 单独追加 100,000 元保证金
    inout_cash(100000, pindex=1)
    log.info('追加资金后子账户1可用资金:', context.subportfolios[1].available_cash)
    
    # 从子账户 0 (股票账户) 提取 50,000 元
    inout_cash(-50000, pindex=0)

三、子账户间资金划转 (transfer_cash)

如果需要在不同子账户之间直接分配资金,可以使用 transfer_cash 函数。

1. API 参数说明

transfer_cash(from_pindex, to_pindex, cash)

  • from_pindex: 转出资金的子账户索引。
  • to_pindex: 转入资金的子账户索引。
  • cash: 划转金额(须为正数)。

2. 代码示例

# 从子账户 0 转移 500,000 元至子账户 1
transfer_cash(from_pindex=0, to_pindex=1, cash=500000)

四、注意事项与常见问题

  1. 索引有效性pindex 必须在创建的子账户范围内(0 至 len(context.subportfolios)-1),否则会触发越界报错。
  2. 出金金额限制:进行出金操作(cash < 0)时,划出金额不能超过该子账户当前的可用资金(available_cash),否则可能导致下单资金不足或失败。
  3. 账户类型匹配:给指定 pindex 下单时,请确保标的类型与子账户类型一致(如股票订单发送到 type='stock' 的子账户,期货发送到 type='futures' 的子账户)。