🚀 AI 一键生成 qmt 策略代码

QMT 平台如何设置回测手续费与印花税?

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

问题描述

回测时怎么设置手续费和印花税?

解决方案

在 QMT 量化交易平台中,设置回测的手续费和印花税主要有两种方式:一种是通过策略编辑器界面的“回测参数”面板进行设置,另一种是通过 Python 代码init 函数中调用 API 进行设置。

通常建议使用 代码设置,因为这样可以确保策略在不同机器或环境下运行时,费率参数保持一致,且代码设置的优先级高于界面设置。

以下是详细的设置方法和代码示例。

方法一:使用 Python 代码设置(推荐)

在策略的初始化函数 init(ContextInfo) 中,使用 ContextInfo.set_commission() 接口进行设置。

1. 函数说明

ContextInfo.set_commission(commissionType, commissionList)

  • commissionType (int): 手续费类型。
    • 0: 按金额比例计算(默认,如股票万三则填 0.0003)。
    • 1: 按固定值计算(按每手或每股收取固定金额)。
  • commissionList (list): 包含 6 个浮点数的列表,顺序固定如下:
    1. open_tax: 买入印花税
    2. close_tax: 卖出印花税
    3. open_commission: 开仓手续费(买入佣金)
    4. close_commission: 平仓手续费(卖出佣金)
    5. close_tdaycommission: 平今手续费(期货专用,股票通常填 0)
    6. min_commission: 单笔最低手续费(如股票通常为 5 元)

2. 代码示例

以下代码展示了如何设置典型的 A 股股票费率(假设:卖出印花税千分之 0.5,买卖佣金万分之 3,最低佣金 5 元):

# -*- coding: gbk -*-

def init(ContextInfo):
    # 1. 设置股票池等基础信息
    ContextInfo.set_universe(['600000.SH'])
    
    # 2. 设置回测费率
    # 参数含义:[买入印花税, 卖出印花税, 买入佣金, 卖出佣金, 平今佣金, 最低佣金]
    # 注意:此处费率仅为示例,请根据实际需求调整
    # 卖出印花税设为 0.0005 (0.05%)
    # 买卖佣金设为 0.0003 (万三)
    # 最低佣金设为 5 元
    commission_list = [0.0, 0.0005, 0.0003, 0.0003, 0.0, 5.0]
    
    # 第一个参数 0 表示按金额比例计算
    ContextInfo.set_commission(0, commission_list)
    
    print("回测费率设置完成")

def handlebar(ContextInfo):
    # 策略逻辑
    pass

3. 简易设置模式

如果你只传入一个浮点数参数,系统会将开仓、平仓、平今手续费都设为该值,其他税费设为 0。

def init(ContextInfo):
    # 仅设置统一的佣金比例为万分之三,不包含印花税和最低佣金
    ContextInfo.set_commission(0.0003)

方法二:通过界面设置

如果你不想写代码,也可以在 QMT 客户端的界面中设置:

  1. 打开策略编辑器
  2. 在右侧面板找到 【回测参数】 标签页。
  3. 在列表中找到以下项目进行填写:
    • 手续费类型:选择“按交易额比例”或“按固定值”。
    • 买入印花税 / 卖出印花税
    • 买入佣金 / 卖出佣金
    • 最低佣金
  4. 点击保存或运行回测。

注意:如果代码中调用了 set_commission,则代码中的设置会覆盖界面上的设置


常见问题 Q&A

Q: 为什么我在界面上改了费率,回测结果没变?
A: 请检查你的代码 init 函数中是否写了 ContextInfo.set_commission。代码的优先级高于界面,如果代码中写死了费率,界面修改将无效。

Q: 期货回测怎么设置?
A: 期货通常没有印花税,但有平今仓手续费。设置 commissionList 时,前两项(印花税)设为 0,重点设置第 3、4、5 项(开仓、平仓、平今手续费)。如果是按手收费,记得将 commissionType 设为 1。

Q: set_commission 支持实盘吗?
A: 不支持。该函数仅在回测模式下生效。实盘交易时,手续费由柜台系统根据你的资金账号实际费率自动结算,策略端无法修改。

Q: 如何查看回测中实际扣除的费用?
A: 回测结束后,可以在回测结果面板的“交易明细”中查看每一笔交易的“手续费”一栏,或者通过代码 get_trade_detail_data 获取交易明细进行核对。