3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化策略回测与交易中,准确设置手续费和印花税是评估策略真实收益率的关键。QMT(迅投量化交易系统)提供了 ContextInfo.set_commission() 接口,允许开发者通过 Python 代码灵活配置印花税、开平仓佣金及最低佣金。
ContextInfo.set_commission(commissionType, commissionList)
注意:该设置仅在回测模式下生效。如果在策略代码与图形界面同时设置了回测参数,以代码中设置的值为准。
commissionType (int):手续费计算类型
0:按成交金额比例(默认)1:按每手/每股固定金额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_commission、close_commission 和 close_tdaycommission,其余税费默认为 0。
必须在 init(ContextInfo) 初始化函数中完成手续费与印花税的设置。
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
可以通过 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]),您可以精准还原真实交易中的各项税费成本,避免回测结果出现“回测暴富,实盘亏损”的偏差。