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

JoinQuant 篮子交易实战:batch_submit_orders 批量委托与验资机制解析

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

问题描述

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

Title: joinquant 篮子交易实战:batch_submit_orders 批量委托与验资机制

Question: 在 joinquant 中如何构造参数并使用 batch_submit_orders 进行批量下单?

解决方案

JoinQuant 篮子交易实战:batch_submit_orders 批量委托与验资机制

在进行多股票组合调仓或指数跟踪策略时,逐笔发送订单不仅效率低下,还可能因网络延迟导致执行滑点变大。JoinQuant 聚宽平台提供了 batch_submit_orders API,用于实现高效的篮子交易(Batch Trading)。


一、batch_submit_orders API 概述

batch_submit_orders(orders) 函数允许策略一次性提交一系列标的的委托。引擎在处理时会统一对所有委托进行验资与验券:若其中任何一个委托校验失败,整个批量委托将全部失败

参数结构

参数 orders 是一个包含多个订单字典的列表(list of dict)。

订单字典支持的字段:

  • security (str): 标的代码,如 '000001.XSHE'
  • amount (int): 交易数量。正数表示买入/开多,负数表示卖出/平仓。
  • style (OrderStyle, 可选): 订单类型,默认为 None(即 MarketOrderStyle 市价单)。支持 LimitOrderStyle 限价单等。
  • side (str, 可选): 'long'(多单)或 'short'(空单),默认 'long'。股票/基金暂不支持开空单。
  • pindex (int, 可选): 子仓位编号,默认为 0
  • close_today (bool, 可选): 平今标记,主要用于上期所、中金所等期货交易。

返回值:

返回一个包含 Order 对象的列表(list)。若校验失败,整个方法会执行失败或返回空。


二、代码实战:构造参数与批量下单

以下示例展示了如何在策略调仓日将资金均分并使用 batch_submit_orders 进行批量购买:

import jqdata

def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    # 设定股票调仓股票池
    g.stocks = ['000001.XSHE', '600660.XSHG', '600000.XSHG']
    # 每日 09:30 调仓
    run_daily(rebalance, time='09:30')

def rebalance(context):
    # 1. 构造批量下单的订单列表
    orders_to_submit = []
    buy_amount = 100  # 每只买入 100 股
    
    for stock in g.stocks:
        order_info = {
            'security': stock,
            'amount': buy_amount,
            'style': MarketOrderStyle(),  # 使用市价单
            'side': 'long',
            'pindex': 0
        }
        orders_to_submit.append(order_info)
    
    # 2. 调用 batch_submit_orders 进行篮子委托
    log.info("开始批量提交订单,股票数量: %d" % len(orders_to_submit))
    submitted_orders = batch_submit_orders(orders_to_submit)
    
    # 3. 检查下单结果
    if submitted_orders:
        for order_obj in submitted_orders:
            log.info("订单创建成功: %s, 数量: %d, 状态: %s" % 
                     (order_obj.security, order_obj.amount, order_obj.status))
    else:
        log.error("批量订单提交失败(可能因验资验券未通过)")

三、验资验券机制与注意事项

  1. 原子性校验(全成功或全失败)

    • 系统会在下单前评估账户的总可用资金(available_cash)与持仓。如果篮子中所有买单所需的总保证金/资金超过账户当前可用资金,整个 batch_submit_orders 调用将直接被拒绝。
  2. 最小交易单位

    • 股票买入必须满足 A 股交易规则(100 股的整数倍,科创板除外)。如果调整后的下单量不合规,会导致整个批量订单校验失败。
  3. 未完成订单与状态

    • 非交易时间或盘前提交的批量订单,状态会暂存为 new,待开盘后自动转为 open 状态进入撮合流程。
    • 批量提交后,可通过 get_open_orders() 查询未完成订单,或使用 batch_cancel_orders(orders) 进行批量撤单。
  4. 多仓位管理(SubPortfolio)

    • 若在 initialize 中使用 set_subportfolios 创建了多个子账户,需在字典中准确指定 pindex 参数,避免向不支持该品种的仓位下单导致失败。