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

joinquant 篮子交易指南:如何使用 batch_submit_orders 进行批量一键下单?

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

问题描述

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

Title: joinquant 篮子交易指南:使用 batch_submit_orders 进行批量一键下单

Question: 如何在 joinquant 中使用 batch_submit_orders 对一篮子股票进行批量下单?

解决方案

joinquant 篮子交易指南:使用 batch_submit_orders 进行批量一键下单

在量化交易和投资组合管理中,我们经常需要对多只标的进行同时调仓或下单。JoinQuant(聚宽)提供了 batch_submit_orders API,能够帮助开发者实现一篮子股票或期货的批量委托下单。


1. 什么是 batch_submit_orders?

batch_submit_orders 是 JoinQuant 提供的篮子下单函数。通过传入一个包含多个订单参数字典的列表(list),对一系列标的进行批量委托。

校验与失败机制

在使用 batch_submit_orders 时,系统会对列表中的每一个委托进行验资验券。如果其中任意一个委托校验失败(如资金不足、持仓不足或标的停牌等),则整个批量委托都将失败,避免部分成交导致的组合权重偏离。


2. API 参数与数据结构

语法说明

orders_list = batch_submit_orders(orders)

参数 orders

orders 是一个由字典(dict)构成的列表,每个字典代表单笔订单的配置信息:

orders = [
    {
        'security': '000001.XSHE', # 标的代码
        'amount': 100,             # 交易数量:>0 为买入,<0 为卖出
        'style': None,             # 订单类型,同 order() 的 style 参数,默认 None(市价单)
        'side': 'long',            # 操作方向:'long' 多单 / 'short' 空单,默认 'long'
        'pindex': 0,               # 子仓位序号,默认为 0
        'close_today': False       # 平今字段(仅适用于上期所、能源中心、中金所)
    },
    ...
]

返回值

  • 执行成功后,返回一个包含 Order 对象的列表(list)。
  • 校验失败则返回空或抛出异常。

3. 代码示例:一篮子股票批量买入

以下示例展示了如何在聚宽策略中构建股票池,并使用 batch_submit_orders 进行批量买入:

import jqdata

def initialize(context):
    # 设置基准与真实价格模式
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 设定按天/按分钟运行
    run_daily(trade_basket, time='09:30')

def trade_basket(context):
    # 构建要买入的股票列表与目标数量
    basket_stocks = ['000001.XSHE', '600660.XSHG', '600000.XSHG']
    buy_amount = 100
    
    # 构造篮子下单参数
    orders = []
    for stock in basket_stocks:
        orders.append({
            'security': stock,
            'amount': buy_amount,
            'pindex': 0,
            'side': 'long'
        })
    
    # 执行批量篮子下单
    res_orders = batch_submit_orders(orders)
    
    if res_orders:
        log.info(f"篮子下单成功,共提交 {len(res_orders)} 笔订单")
    else:
        log.error("篮子下单失败(可能存在资金不足或标的停牌)")

4. 补充:配合批量撤单 batch_cancel_orders

如果在非交易时段或未完全撮合时提交了篮子订单,并在后续需要撤销未完成的订单,可以结合使用 batch_cancel_orders

def cancel_open_basket(context):
    # 获取当前未完成订单
    open_orders = get_open_orders()
    if open_orders:
        # 提取订单列表
        orders_to_cancel = list(open_orders.values())
        # 批量撤单
        batch_cancel_orders(orders_to_cancel)
        log.info(f"已批量撤销 {len(orders_to_cancel)} 笔未完成订单")

5. 注意事项

  1. 原子性校验:必须确保账户资金及持仓能完全满足篮子中所有标的的要求,否则全单失败。
  2. 科创板规则:若下单标的包含科创板股票,市价单需通过 MarketOrderStyle(limit_price) 指定保护价。
  3. 下单限制:回测和模拟交易中,每日下单的最大数量限制为 10000 笔。