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

如何在 joinquant 中使用 SubPortfolioConfig 配置股票与融资融券多子账户?

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

问题描述

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

Title: joinquant 融资融券实战:SubPortfolioConfig 账户多仓位初始化

Question: 如何在 joinquant 中配置同时支持股票和信用交易的多子账户?

解决方案

joinquant 融资融券实战:SubPortfolioConfig 账户多仓位初始化

在聚宽(JoinQuant)平台进行量化交易时,默认的账户仓位类型为普通股票与基金账户(type='stock')。若要进行融资融券(信用交易)或期货交易,必须在 initialize 初始化函数中,使用 set_subportfoliosSubPortfolioConfig 来配置对应的子账户。


一、核心 API 介绍

1. set_subportfolios 函数

用于初始化或修改策略的子账户配置。注意:该函数只能在 initialize 中调用,且所有子账户初始资金(cash)的总和必须等于策略的总初始资金 context.portfolio.starting_cash

2. SubPortfolioConfig(cash, type) 参数说明

  • cash: 该子仓位的初始资金量。
  • type: 子仓位可操作标的的类型,支持以下取值:
    • 'stock': 股票和场内基金账户
    • 'stock_margin': 融资融券账户
    • 'futures': 商品期货与股指期货账户
    • 'index_futures': 金融期货账户

二、配置同时支持股票与融资融券的多子账户示例

下面的代码演示了如何在 initialize 函数中将总初始资金一分为二,分别配置为普通股票账户(subportfolios[0])和融资融券账户(subportfolios[1]):

import jqdata

def initialize(context):
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 设定基准
    set_benchmark('000300.XSHG')
    
    # 获取初始资金并平分为两份
    init_cash = context.portfolio.starting_cash / 2
    
    # 初始化多子账户:
    # subportfolios[0] -> 普通股票账户
    # subportfolios[1] -> 融资融券账户
    set_subportfolios([
        SubPortfolioConfig(cash=init_cash, type='stock'),
        SubPortfolioConfig(cash=init_cash, type='stock_margin')
    ])
    
    # 设置融资融券利率及保证金比率(可选)
    set_option('margincash_interest_rate', 0.08)  # 融资年利率 8%
    set_option('margincash_margin_rate', 1.0)      # 融资保证金比率 100%
    
    # 定时运行函数
    run_daily(market_open, time='every_bar')

def market_open(context):
    # 普通账户买入股票(指定 pindex=0)
    order('000001.XSHE', 100, pindex=0)
    
    # 信用账户融资买入股票(指定 pindex=1)
    margincash_open('000001.XSHE', 100, pindex=1)

三、注意事项

  1. 默认账户限制:如果策略未调用 set_subportfolios,默认仅有 subportfolios[0],且类型为普通股票账户(stock),此时直接调用 margincash_open 等融资融券 API 将会报错。
  2. 下单指定 pindex:在多仓位架构下,执行买卖或融资融券操作时(如 order, margincash_open, margincash_close 等),请务必通过 pindex 参数明确指定对应的子账户序号(从 0 开始)。
  3. 资金转移:如果需要在不同的子账户之间调拨资金,可以使用 transfer_cash(from_pindex, to_pindex, cash) 函数实现即时到账的资金划转。