🚀 AI 一键生成 joinquant 策略代码

JoinQuant 期货实战:order 函数中 close_today=True 的正确用法

joinquant | 发布时间: 2025/12/22
以下内容由 EasyQuant 生成。

问题描述

期货下单时如何指定平今仓?

解决方案

在聚宽(JoinQuant)的期货策略中,可以通过在下单函数(如 orderorder_target 等)中设置 close_today 参数来指定是否“平今仓”。

1. 参数说明

  • 参数名: close_today
  • 类型: bool (布尔值)
  • 适用交易所: 上海期货交易所 (XSGE)、上海国际能源交易中心 (XINE)、中国金融期货交易所 (CCFX)。
    • 注:其他交易所(如大商所、郑商所)通常不区分平今和平昨的指令,遵循“先开先平”原则,设置此参数可能会报错或无效。

2. 参数逻辑

  • close_today=True: 只平今仓
    • 系统会强制平掉今日新开的仓位。
    • 如果今日仓位不足(即使有昨日老仓),订单会被废单(Rejected)。
  • close_today=False (默认值): 优先平昨仓
    • 系统会优先平掉昨日(及以前)的老仓位。
    • 如果昨仓不足,剩余部分会自动平今仓。

3. 代码示例

以下代码展示了如何在 orderorder_target 函数中使用该参数。

示例 A:使用 order 函数平今仓

假设当前持有 IF1912.CCFX 的多单,现在需要平掉 1手 今日开仓 的多单:

# amount为负数表示卖出(平仓),side='long'表示操作多头仓位
# close_today=True 表示强制平今仓
order('IF1912.CCFX', -1, side='long', close_today=True)

示例 B:使用 order_target 函数平今仓

假设当前持有 RB2001.XSGE 空单 5 手(其中今仓 2 手,昨仓 3 手),现在希望将空单持仓调整为 3 手(即平掉 2 手):

# 如果希望这平掉的2手必须是“今仓”:
# target=3,意味着要卖平2手。设置 close_today=True 强制平今
order_target('RB2001.XSGE', 3, side='short', close_today=True)

示例 C:优先平昨(默认行为)

如果希望优先平掉老仓位,不够再平今仓,只需设置 False 或不填:

# 优先平昨仓,昨仓不够时平今仓
order('IF1912.CCFX', -1, side='long', close_today=False)

4. 注意事项

  1. 手续费区别: 在某些品种(如股指期货)中,平今仓的手续费可能远高于平昨仓。正确设置 close_today 对控制交易成本非常重要。
  2. 方向 (side): 期货交易必须指定 side 参数('long''short'),否则系统默认为 'long'
    • 平多单:amount < 0, side='long'
    • 平空单:amount < 0, side='short' (注意:此处 amount 为负数代表减少持仓,即买入平空)
  3. 交易所限制: 如果对不支持平今指令的交易所(如大商所、郑商所)标的使用 close_today=True,回测或模拟交易可能会报错。

Q&A

Q: 如果我设置了 close_today=True 但是没有今仓,只有昨仓,会发生什么?
A: 订单会失败(废单)。系统会检测到可用今仓不足,不会去动用昨仓。

Q: order_valueorder_target_value 支持平今仓吗?
A: 支持。所有的下单函数(order, order_target, order_value, order_target_value)都支持 close_today 参数。

Q: 郑商所(XZCE)和大商所(XDCE)如何指定平今?
A: 这两个交易所的交易规则通常是“先开先平”(FIFO),不支持显式指定平今或平昨。在聚宽中对这两个交易所的标的下单时,建议不要设置 close_today 参数(使用默认值),系统和柜台会按照交易所规则自动处理。