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

joinquant 期货平今仓指南:LimitOrderStyle 与 close_today 结合应用

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

问题描述

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

Title: joinquant 期货平今仓指南:LimitOrderStyle 与 close_today 结合应用

Question: 在 joinquant 中对上期所合约进行平今仓挂单时应该如何设置参数?

解决方案

joinquant 期货平今仓指南:LimitOrderStyle 与 close_today 结合应用

在 JoinQuant(聚宽)量化交易平台中,对上海期货交易所(XSGE)、上海国际能源交易中心(XINE)以及中国金融期货交易所(CCFX)的期货合约进行交易时,区分**平今仓(平当天开的仓位)平昨仓(平历史持有的仓位)**非常重要。由于上期所等交易所对平今仓和平昨仓收取的手续费率不同(例如部分品种平今仓免手续费或高额手续费),正确设置交易参数是策略成本控制的关键。


1. 核心参数详解

1.1 LimitOrderStyle(limit_price)

  • 作用:指定订单为限价单 style。当需要挂单而非市价撮合时使用。
  • 用法LimitOrderStyle(3600.0) 表示以 3600.0 的价格提交限价委托。

1.2 close_today 参数

  • 作用:控制平仓时是否优先或仅平今仓。
  • 布尔值设置
    • close_today=True只平今仓。若当前持有的今仓数量不足,订单将被直接废单(拒绝)。
    • close_today=False(默认):优先平昨仓,昨仓不足的部分再平今仓。

注意close_today 字段仅对上海国际能源中心(XINE)、上海期货交易所(XSGE)、中金所(CCFX)生效。如果在其他不支持区分平今/平昨的交易所标的上设置,系统将会报错。


2. 上期所平今仓限价挂单示例代码

以螺纹钢期货合约(如 RB1909.XSGE)为例,以下代码展示了如何在 initialize 中初始化期货账户,并在平仓时结合 LimitOrderStyleclose_today=True 提交限价平今单:

import jqdata

def initialize(context):
    # 1. 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 2. 必须开启动态复权模式
    set_option('use_real_price', True)
    
    # 3. 设置策略子账户为期货账户
    init_cash = context.portfolio.starting_cash
    set_subportfolios([SubPortfolioConfig(cash=init_cash, type='futures')])
    
    # 4. 设置交易运行时间及参考标的
    run_daily(market_open, time='every_bar', reference_security='RB9999.XSGE')

def market_open(context):
    security = 'RB1909.XSGE'
    pindex = 0
    
    # 假设需要对多单进行限价平今仓挂单
    # 目标:平掉 1 手多单,指定限价为 3700.0,且只平今仓
    limit_price = 3700.0
    
    # 检查当前多仓今仓数量(today_amount)是否足够
    long_positions = context.subportfolios[pindex].long_positions
    if security in long_positions:
        position = long_positions[security]
        if position.today_amount >= 1:
            # 下单平今仓多单
            order(
                security=security,
                amount=-1,                             # 卖出平仓,数量为负数
                style=LimitOrderStyle(limit_price),    # 设置限价单风格
                side='long',                           # 操作多单仓位
                pindex=pindex,                         # 子账户仓位索引
                close_today=True                       # 开启平今字段
            )
            log.info("提交限价平今仓订单:%s, 价格: %f" % (security, limit_price))

3. 常见下单函数平今仓配置对比

除了 order 按手数下单 API 外,JoinQuant 提供的其他下单 API 均支持 styleclose_today 参数:

API 函数 作用描述 限价平今仓调用示例 说明
order() 按指定手数下单 order('RB1909.XSGE', -1, LimitOrderStyle(3700), side='long', close_today=True) amount < 0 表示平仓
order_target() 目标手数下单 order_target('RB1909.XSGE', 0, LimitOrderStyle(3700), side='long', close_today=True) 将多头持仓平至 0 手
order_value() 按保证金金额下单 order_value('RB1909.XSGE', -50000, LimitOrderStyle(3700), side='long', close_today=True) 平掉指定保证金价值的仓位
order_target_value() 目标保证金下单 order_target_value('RB1909.XSGE', 0, LimitOrderStyle(3700), side='long', close_today=True) 将多头保证金调整至 0

4. 最佳实践与注意事项

  1. 验资与持仓检查:在设置 close_today=True 前,务必确认当前持仓对象的 today_amount(今日开仓数)大等于待平仓数量,否则订单将被交易所或回测撮合引擎判定为废单(Rejected)。
  2. 未完成订单清理:如果之前已有挂单未成交,再次使用 order_targetorder_target_value 会自动撤销该标的先前未完成的订单。
  3. 手续费结算差异:平昨仓与平今仓的手续费计算不同,分别取 OrderCost 中设置的 close_commission(平昨)与 close_today_commission(平今)费率。