3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易和投资组合管理中,我们经常需要对多只标的进行同时调仓或下单。JoinQuant(聚宽)提供了 batch_submit_orders API,能够帮助开发者实现一篮子股票或期货的批量委托下单。
batch_submit_orders 是 JoinQuant 提供的篮子下单函数。通过传入一个包含多个订单参数字典的列表(list),对一系列标的进行批量委托。
在使用 batch_submit_orders 时,系统会对列表中的每一个委托进行验资验券。如果其中任意一个委托校验失败(如资金不足、持仓不足或标的停牌等),则整个批量委托都将失败,避免部分成交导致的组合权重偏离。
orders_list = batch_submit_orders(orders)
ordersorders 是一个由字典(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)。以下示例展示了如何在聚宽策略中构建股票池,并使用 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("篮子下单失败(可能存在资金不足或标的停牌)")
如果在非交易时段或未完全撮合时提交了篮子订单,并在后续需要撤销未完成的订单,可以结合使用 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)} 笔未完成订单")
MarketOrderStyle(limit_price) 指定保护价。