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

joinquant 中如何精细化配置期货平今仓与平昨仓手续费?

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

问题描述

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

Title: joinquant 手续费设置:set_order_cost 精细化配置期货平今仓与平昨仓佣金

Question: joinquant 中如何为商品期货和股指期货设置不同的平今仓与平昨仓手续费?

解决方案

joinquant 手续费设置:set_order_cost 精细化配置期货平今仓与平昨仓佣金

在期货量化交易回测和实盘模拟中,平今仓(close_today)与平昨仓(close_yesterday)的交易手续费差异往往显著影响策略的净值表现(例如股指期货平今仓手续费通常远高于平昨仓)。JoinQuant(聚宽)平台提供了 set_order_cost 函数与 OrderCost 对象,支持灵活且精细化地配置不同品种的平今与平昨佣金。


一、核心 API:set_order_costOrderCost

1. OrderCost 参数说明

在配置期货手续费时,主要使用以下字段:

  • open_commission: 开仓佣金(比率或固定金额)
  • close_commission: 平昨仓佣金
  • close_today_commission: 平今仓佣金
  • min_commission: 最低佣金(期货通常设为 0)
  • open_tax / close_tax: 印花税(期货不收取,设为 0)

2. set_order_cost 参数说明

set_order_cost(cost, type, ref=None)

  • cost: OrderCost 对象
  • type: 交易品种类型,期货常用 'futures'(商品及股指期货)或 'index_futures'(金融/股指期货)
  • ref: 参考代码,支持特定合约(如 'AU1709')或特定品种(如 'AU''IF'

二、如何精细化设置平今仓与平昨仓手续费

以下示例演示如何在 initialize 初始化函数中,分别为通用期货、股指期货(IF/IH/IC)以及具体品种(如黄金 AU)配置不同的平今与平昨手续费:

import jqdata

def initialize(context):
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 1. 设置所有商品期货默认手续费:
    # 开仓万0.5,平昨万0.5,平今万1.5
    set_order_cost(
        OrderCost(
            open_tax=0, 
            close_tax=0, 
            open_commission=0.00005, 
            close_commission=0.00005, 
            close_today_commission=0.00015, 
            min_commission=0
        ), 
        type='futures'
    )
    
    # 2. 设置股指期货(IF/IH/IC/IM)专属手续费:
    # 开仓万0.23,平昨万0.23,平今仓惩罚性费率万3.45
    set_order_cost(
        OrderCost(
            open_tax=0, 
            close_tax=0, 
            open_commission=0.000023, 
            close_commission=0.000023, 
            close_today_commission=0.000345, 
            min_commission=0
        ), 
        type='index_futures'
    )
    
    # 3. 单独针对特定品种(如 AU 黄金期货)设置按比例或按固定费率的平今平昨费用
    set_order_cost(
        OrderCost(
            open_tax=0, 
            close_tax=0, 
            open_commission=0.00002, 
            close_commission=0.00002, 
            close_today_commission=0, # 部分品种平今免收
            min_commission=0
        ), 
        type='futures', 
        ref='AU'
    )

三、下单函数中平今仓与平昨仓的控制

在编写交易逻辑调用下单函数(如 orderorder_target 等)时,可以通过 close_today 参数控制平仓指令:

  • close_today = True:强制只平今仓。若今仓不足,订单将作废。
  • close_today = False(默认):优先平昨仓,昨仓不足部分再平今仓。

代码示例:

def handle_data(context, data):
    # 示例:平掉 1 手沪深300指数期货多单,指定优先平今仓
    order('IF2309.CCFX', -1, side='long', close_today=True)

四、注意事项与常见问题

  1. 交易所区别:平今和平昨的区分仅在上海期货交易所(XSGE)、**上海国际能源交易中心(XINE)中国金融期货交易所(CCFX)**生效。其他交易所(如郑商所、大商所)不区分平今与平昨,按照先开先平处理。
  2. 平仓手续费扣除逻辑:订单成交时,系统会根据实际平掉的是今仓还是昨仓,分别应用 close_today_commissionclose_commission 计算扣费。
  3. 到期交割:期货持仓若持有至交割日,系统将按当天结算价平仓,交割平仓不收取手续费且无交易记录。