3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期货量化交易回测和实盘模拟中,平今仓(close_today)与平昨仓(close_yesterday)的交易手续费差异往往显著影响策略的净值表现(例如股指期货平今仓手续费通常远高于平昨仓)。JoinQuant(聚宽)平台提供了 set_order_cost 函数与 OrderCost 对象,支持灵活且精细化地配置不同品种的平今与平昨佣金。
set_order_cost 与 OrderCostOrderCost 参数说明在配置期货手续费时,主要使用以下字段:
open_commission: 开仓佣金(比率或固定金额)close_commission: 平昨仓佣金close_today_commission: 平今仓佣金min_commission: 最低佣金(期货通常设为 0)open_tax / close_tax: 印花税(期货不收取,设为 0)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'
)
在编写交易逻辑调用下单函数(如 order、order_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)
close_today_commission 或 close_commission 计算扣费。