🚀 AI 一键生成 qmt 策略代码

如何通过 QMT API 设置回测的初始资金、手续费和滑点?

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

问题描述

如何在代码里设置回测时的手续费率和滑点?

解决方案

在 QMT 的 Python 策略代码中,设置回测时的手续费率和滑点需要在 init(ContextInfo) 函数中调用相应的 API 方法。

以下是具体的设置方法和代码示例:

1. 设置滑点 (set_slippage)

使用 ContextInfo.set_slippage(slippageType, slippage) 函数。

  • slippageType (滑点类型):
    • 0: 按 tick 跳数设置(例如设置为 1,代表滑 1 个最小变动单位)。
    • 1: 按固定值(价格)设置(例如设置为 0.01,代表滑 0.01 元)。
    • 2: 按价格比例设置(例如设置为 0.001,代表滑 0.1%)。
  • slippage (滑点值): 具体的数值。

2. 设置手续费 (set_commission)

使用 ContextInfo.set_commission(commissionType, commissionList) 函数。

  • commissionType (手续费类型):
    • 0: 按成交额比例计算(股票常用)。
    • 1: 按每手/每股固定值计算。
  • commissionList (费率列表): 这是一个包含 6 个元素的列表,顺序固定如下:
    [买入印花税, 卖出印花税, 开仓佣金, 平仓佣金, 平今佣金, 最低佣金]

完整代码示例

# -*- coding: gbk -*-

def init(ContextInfo):
    # --- 设置滑点 ---
    # 示例:设置为按固定价格滑点,滑点值为 0.02 元
    # 参数1:类型 (1=固定值)
    # 参数2:数值
    ContextInfo.set_slippage(1, 0.02)

    # --- 设置手续费 ---
    # 示例:股票交易费率设置
    # 买入印花税:0
    # 卖出印花税:0.001 (千分之一)
    # 开仓佣金(买入):0.0003 (万分之三)
    # 平仓佣金(卖出):0.0003 (万分之三)
    # 平今佣金:0 (股票通常不区分平今,期货才用)
    # 最低佣金:5.0 (单笔最低5元)
    
    # 列表顺序:[open_tax, close_tax, open_commission, close_commission, close_tdaycommission, min_commission]
    commission_list = [0.0, 0.001, 0.0003, 0.0003, 0.0, 5.0]
    
    # 参数1:类型 (0=按比例)
    # 参数2:费率列表
    ContextInfo.set_commission(0, commission_list)

    print("回测费率与滑点设置完成")

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

注意事项

  1. 生效范围:这些设置仅在回测模式下生效。在实盘或模拟盘模式下,交易费用由柜台实际扣除,代码中的设置不会影响实际账户资金。
  2. 优先级:如果在策略编辑器的界面上也设置了回测参数(如“回测参数”面板),代码中 init 函数里的设置优先级通常高于界面设置(以代码为准)。
  3. 简写方式ContextInfo.set_commission 如果只传入一个数值参数(例如 ContextInfo.set_commission(0.0003)),系统会将开仓、平仓、平今佣金都设为该值,其余设为 0。

Q&A

Q: QMT代码中设置的手续费会影响实盘交易吗?
A: 不会。set_commissionset_slippage 函数仅在回测模式(Backtest)下用于模拟计算净值和盈亏。实盘交易的手续费完全由券商柜台系统根据您的账户费率实际结算。

Q: 如何设置期货的按手数收取手续费?
A: 将 set_commission 的第一个参数 commissionType 设置为 1。例如:ContextInfo.set_commission(1, [0, 0, 5, 5, 0, 0]) 表示开仓和平仓每手收取 5 元(假设单位是元)。

Q: 滑点类型设置为 0 (tick跳数) 是什么意思?
A: 设置为 0 表示按照最小变动价位(Price Tick)来计算滑点。例如,某股票最小变动价位是 0.01 元,如果设置滑点值为 2 且类型为 0,则实际滑点金额为 2 * 0.01 = 0.02 元。这对于不同价格段或不同品种(如期货)的策略回测非常有用,因为它能自动适应品种的最小跳动单位。