🚀 AI 一键生成 joinquant 策略代码

JoinQuant 中如何为不同类型的资产(股票、期货)设置不同的手续费?

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

问题描述

怎样才能为股票和期货设置不一样的交易手续费?

解决方案

在 JoinQuant(聚宽)平台中,要为股票和期货设置不同的交易手续费,需要在 initialize(context) 函数中多次调用 set_order_cost 函数,并通过 type 参数来区分标的类型。

核心方法

使用 set_order_cost(cost, type, ref=None) 函数。

  1. cost: 传入 OrderCost 对象,设置具体的费率(印花税、佣金、最低佣金等)。
  2. type: 指定资产类型。
    • 'stock': 股票
    • 'index_futures': 金融期货(如股指期货)
    • 'futures': 商品期货
  3. ref (可选): 如果需要针对特定合约设置,可使用此参数。

代码示例

以下代码展示了如何在初始化函数中分别为股票(包含印花税和最低佣金)和金融期货(无印花税,无最低佣金,有平今仓优惠或惩罚)设置不同的费率。

# -*- coding: utf-8 -*-
def initialize(context):
    # 1. 设置股票手续费
    # 股票类每笔交易时的手续费是:
    # 买入时佣金万分之三
    # 卖出时佣金万分之三 + 千分之一印花税
    # 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(
        open_tax=0,             # 买入印花税
        close_tax=0.001,        # 卖出印花税
        open_commission=0.0003, # 买入佣金
        close_commission=0.0003,# 卖出佣金
        close_today_commission=0, # 平今仓佣金(股票不适用,设为0)
        min_commission=5        # 最低佣金
    ), type='stock')

    # 2. 设置金融期货手续费 (以股指期货为例)
    # 期货类每笔交易时的手续费是:
    # 买卖万分之零点二三
    # 平今仓万分之二十三 (假设平今仓较贵的情况)
    # 期货无印花税,通常无最低佣金限制
    set_order_cost(OrderCost(
        open_tax=0, 
        close_tax=0, 
        open_commission=0.000023, 
        close_commission=0.000023, 
        close_today_commission=0.0023, 
        min_commission=0
    ), type='index_futures')
    
    # 3. 设置商品期货手续费 (如果策略涉及商品期货)
    set_order_cost(OrderCost(
        open_tax=0,
        close_tax=0,
        open_commission=0.0001,
        close_commission=0.0001,
        close_today_commission=0.0001,
        min_commission=0
    ), type='futures')

参数详解 (OrderCost)

  • open_tax: 买入时印花税(股票通常为0)。
  • close_tax: 卖出时印花税(股票通常为0.001,即千分之一)。
  • open_commission: 开仓(买入)佣金。
  • close_commission: 平昨仓(卖出)佣金。
  • close_today_commission: 平今仓佣金。对于股票该项无效;对于期货,某些品种平今仓手续费可能与平昨不同(例如股指期货平今仓通常较贵,而某些商品期货平今仓可能免费)。
  • min_commission: 最低佣金(股票通常为5元,期货通常为0)。

常见问题 Q&A

Q: 如果我想对某个具体的期货合约(如 IF1709)单独设置手续费怎么办?
A: 可以在调用 set_order_cost 时,将 type 设置为对应的品种类型(如 'index_futures'),并将 ref 参数设置为具体的合约代码 'IF1709'

Q: type='futures'type='index_futures' 有什么区别?
A: 'index_futures' 专门指代金融期货(如沪深300 IF、中证500 IC 等);'futures' 通常指代商品期货。如果您的策略同时交易这两类,建议分别设置。

Q: 设置了手续费后,回测结果中的收益是扣除手续费后的吗?
A: 是的,回测系统会在每笔交易成交时根据您设置的 OrderCost 自动扣除相应的费用,最终的收益曲线是净收益。