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

如何在 QMT 中动态设置买卖印花税与开平仓手续费?(ContextInfo.set_commission 精讲)

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

问题描述

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

Title: qmt 动态手续费设置:ContextInfo.set_commission 接口精讲

Question: 如何在 qmt 中通过代码设置不同的买卖印花税和开平仓手续费?

解决方案

如何在 QMT 中动态设置买卖印花税与开平仓手续费?

在量化策略回测与交易中,准确设置手续费和印花税是评估策略真实收益率的关键。QMT(迅投量化交易系统)提供了 ContextInfo.set_commission() 接口,允许开发者通过 Python 代码灵活配置印花税、开平仓佣金及最低佣金。


1. 接口方法与参数说明

ContextInfo.set_commission(commissionType, commissionList)

注意:该设置仅在回测模式下生效。如果在策略代码与图形界面同时设置了回测参数,以代码中设置的值为准

参数解析:

  1. commissionType (int):手续费计算类型

    • 0:按成交金额比例(默认)
    • 1:按每手/每股固定金额
  2. commissionList (list):包含 6 个数值的列表,顺序如下:
    [open_tax, close_tax, open_commission, close_commission, close_tdaycommission, min_commission]

    • open_tax:买入印花税(股票买入一般为 0)
    • close_tax:卖出印花税(如 0.0005 表示 0.05%)
    • open_commission:开仓/买入手续费(如 0.0003 表示万三)
    • close_commission:平仓/卖出(平昨)手续费
    • close_tdaycommission:平今手续费(期货常用)
    • min_commission:单笔最低佣金(如 5 表示最低 5 元)

注:如果只向 set_commission 传入一个浮点数参数(例如 ContextInfo.set_commission(0.0003)),QMT 会默认将该值赋给 open_commissionclose_commissionclose_tdaycommission,其余税费默认为 0。


2. 经典配置代码示例

必须在 init(ContextInfo) 初始化函数中完成手续费与印花税的设置。

示例一:中国 A 股标准费率(买入万三、卖出万三+减半印花税万五、最低佣金 5 元)

def init(ContextInfo):
    # 1. 设定股票池
    ContextInfo.set_universe(['600000.SH'])
    
    # 2. 设置 A 股手续费
    open_tax = 0            # 买入印花税 0
    close_tax = 0.0005      # 卖出印花税 0.05%(万五)
    open_comm = 0.0003      # 买入佣金万三
    close_comm = 0.0003     # 卖出佣金万三
    close_today_comm = 0    # 平今佣金(股票为 0)
    min_comm = 5            # 单笔最低佣金 5 元
    
    commission_list = [open_tax, close_tax, open_comm, close_comm, close_today_comm, min_comm]
    
    # 0 代表按金额比例计算
    ContextInfo.set_commission(0, commission_list)
    
def handlebar(ContextInfo):
    pass

示例二:期货费率设置(平今优先/平今免费或加倍)

def init(ContextInfo):
    # 设置期货费率:开仓万分之零点五,平昨万分之零点五,平今万分之1.5
    # 类型选择 0(按金额比例)
    ContextInfo.set_commission(0, [0, 0, 0.00005, 0.00005, 0.00015, 0])
    
def handlebar(ContextInfo):
    pass

3. 查询当前费率设置

可以通过 ContextInfo.get_commission() 获取当前策略生效的手续费字典,用于验证设置是否正确:

def handlebar(ContextInfo):
    if ContextInfo.is_last_bar():
        comm_info = ContextInfo.get_commission()
        print("当前手续费配置:", comm_info)

总结

通过在 init 函数中调用 ContextInfo.set_commission(0, [open_tax, close_tax, open_commission, close_commission, close_tdaycommission, min_commission]),您可以精准还原真实交易中的各项税费成本,避免回测结果出现“回测暴富,实盘亏损”的偏差。