3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 量化交易平台中,设置回测的手续费和印花税主要有两种方式:一种是通过策略编辑器界面的“回测参数”面板进行设置,另一种是通过 Python 代码在 init 函数中调用 API 进行设置。
通常建议使用 代码设置,因为这样可以确保策略在不同机器或环境下运行时,费率参数保持一致,且代码设置的优先级高于界面设置。
以下是详细的设置方法和代码示例。
在策略的初始化函数 init(ContextInfo) 中,使用 ContextInfo.set_commission() 接口进行设置。
ContextInfo.set_commission(commissionType, commissionList)
0: 按金额比例计算(默认,如股票万三则填 0.0003)。1: 按固定值计算(按每手或每股收取固定金额)。以下代码展示了如何设置典型的 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
如果你只传入一个浮点数参数,系统会将开仓、平仓、平今手续费都设为该值,其他税费设为 0。
def init(ContextInfo):
# 仅设置统一的佣金比例为万分之三,不包含印花税和最低佣金
ContextInfo.set_commission(0.0003)
如果你不想写代码,也可以在 QMT 客户端的界面中设置:
注意:如果代码中调用了 set_commission,则代码中的设置会覆盖界面上的设置。
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 获取交易明细进行核对。