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

JoinQuant 平台多仓位交易实战:使用 order_target_value 指定 pindex 进行目标价值下单

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

问题描述

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

Title: joinquant 多仓位交易实战:指定 pindex 参数进行 order_target_value 下单

Question: 在拥有多个子账户时,如何在 joinquant 中向指定仓位(pindex)下达目标价值订单?

解决方案

JoinQuant 平台多仓位交易实战:使用 order_target_value 指定 pindex 进行目标价值下单

在 JoinQuant(聚宽)量化交易平台中,当策略需要同时操作多种资产(例如股票与期货混合策略、多策略组合等)时,通常需要划分多个子账户(SubPortfolio)。本文将详细讲解如何初始化多仓位,并通过 order_target_value 结合 pindex 参数向指定的子账户下达目标价值订单。


1. 什么是 pindex 与多仓位管理?

默认情况下,策略仅有一个子账户 subportfolios[0]。如果你需要将资金划分为不同的独立仓位(例如仓位 0 跑股票策略,仓位 1 跑期货策略),可以在 initialize 函数中使用 set_subportfolios 进行初始化。

  • pindex:表示子账户(subportfolio)的索引序号,从 0 开始。例如:
    • pindex=0:代表第 1 个子账户
    • pindex=1:代表第 2 个子账户

2. API 参数说明:order_target_value

order_target_value 函数用于将指定标的调整到目标总价值(价值 = 最新价 × 数量 × 保证金率 × 乘数)。

函数签名:

order_target_value(security, value, style=None, side='long', pindex=0, close_today=False)

关键参数:

  • security:标的代码(如 '000001.XSHE''IF1412.CCFX')。
  • value:目标调整价值。设为 0 代表清仓。
  • side'long'(多单)或 'short'(空单),默认为 'long'
  • pindex:指定的子账户序号,默认为 0。如果创建了多个子账户,必须显式传入对应的 pindex 索引。

3. 实战示例代码

以下示例演示如何创建两个子账户(股票账户与期货账户),并分别在指定的 pindex 下使用 order_target_value 下单:

import jqdata

def initialize(context):
    # 1. 设定基准与真实价格模式
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 2. 初始化多仓位:将资金平分为 2 份
    init_cash = context.portfolio.starting_cash / 2
    set_subportfolios([
        SubPortfolioConfig(cash=init_cash, type='stock'),   # pindex = 0: 股票账户
        SubPortfolioConfig(cash=init_cash, type='futures')  # pindex = 1: 期货账户
    ])
    
    # 定时运行
    run_daily(trade, time='9:30')

def trade(context):
    # 股票标的与期货标的
    stock = '000001.XSHE'
    future = 'IF2309.CCFX'
    
    # --- 在子账户 0 (股票账户) 下单 ---
    # 调整平安银行的股票持仓价值到 100,000 元
    order_target_value(stock, 100000, pindex=0)
    log.info("已向 pindex=0 (股票账户) 下达目标价值 100,000 元的订单: %s" % stock)
    
    # --- 在子账户 1 (期货账户) 下单 ---
    # 调整股指期货多单保证金价值到 50,000 元
    order_target_value(future, 50000, side='long', pindex=1)
    log.info("已向 pindex=1 (期货账户) 下达多单目标价值 50,000 元的订单: %s" % future)

    # --- 平仓示例 ---
    # 若要清仓 pindex=0 中的股票:
    # order_target_value(stock, 0, pindex=0)

4. 注意事项与常见错误

  1. 索引溢出报错:如果策略只初始化了 1 个仓位(默认情况),传入 pindex=1 会抛出异常提示仓位不存在。
  2. 账户类型匹配
    • 股票/基金订单必须下到 type='stock' 的仓位;
    • 期货订单必须下到 type='futures'type='index_futures' 的仓位,否则会导致委托失败。
  3. 未完成订单处理:调用 order_target_value 时,若该标的在对应 pindex 存在未完成的挂单,系统会自动取消先前未完成的订单。