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

qmt 平台如何自定义策略回测滑点?(附 Python 源码)

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

问题描述

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

Title: qmt 回测高级教程:如何自定义策略回测的滑点?

Question: qmt 如何在代码中设定不同滑点类型?

解决方案

qmt 回测高级教程:如何自定义策略回测的滑点?

在量化策略回测中,**滑点(Slippage)**是模拟真实交易中冲击成本和市场流动性损耗的关键参数。如果回测不设置滑点,回测结果往往会过于理想化。QMT(Quantitative Trading System)平台提供了强大的自定义滑点功能,允许开发者在 Python 代码中灵活设定不同的滑点类型。


一、QMT 滑点设置核心 API

在 QMT 中,我们主要通过 ContextInfo.set_slippage() 函数来设定回测滑点。该函数仅在回测模式下生效

1. 函数原型

ContextInfo.set_slippage(slippageType, slippage)

2. 参数说明

  • slippageType (滑点类型)
    • 0tick 跳数设置滑点(按照最小变动价位的倍数计算)。
    • 1按照固定值(价格)设置滑点(如每笔交易固定多支出 0.01 元)。
    • 2价格比例设置滑点(按照成交价格的百分比计算,如 0.001 代表千分之一)。
  • slippage (滑点值):对应的数值(float 类型)。

二、三种滑点类型的代码实现

以下是在 QMT 策略的 init 初始化函数中设置不同滑点类型的具体示例:

1. 按照固定价格设置滑点(最常用)

假设我们希望每次买入时价格高报 0.01 元,卖出时低报 0.01 元:

#coding:gbk

def init(ContextInfo):
    # 设置滑点类型为 1(固定价格),滑点值为 0.01 元
    ContextInfo.set_slippage(1, 0.01)
    print("已设置固定价格滑点:0.01元")

2. 按照价格比例设置滑点

适用于高价股或波动较大的品种,按成交价的比例(如万分之五)计算滑点:

#coding:gbk

def init(ContextInfo):
    # 设置滑点类型为 2(价格比例),滑点值为 0.0005(万分之五)
    ContextInfo.set_slippage(2, 0.0005)
    print("已设置价格比例滑点:万分之五")

3. 按照最小变动单位(Tick跳数)设置滑点

适用于期货等按 Tick 变动的品种,比如设置滑点为 1 个 Tick:

#coding:gbk

def init(ContextInfo):
    # 设置滑点类型为 0(Tick跳数),滑点值为 1 跳
    ContextInfo.set_slippage(0, 1.0)
    print("已设置Tick跳数滑点:1跳")

三、如何在策略中获取当前滑点设置?

handlebar 运行过程中,如果需要检查或打印当前的滑点设置,可以使用 ContextInfo.get_slippage() 接口:

#coding:gbk

def init(ContextInfo):
    ContextInfo.set_slippage(1, 0.02) # 设置 0.02 元固定滑点

def handlebar(ContextInfo):
    # 仅在最后一根 K 线打印滑点信息
    if ContextInfo.is_last_bar():
        slippage_dict = ContextInfo.get_slippage()
        print("当前回测滑点配置:", slippage_dict)
        # 输出结果类似于: {'slippage_type': 1, 'slippage': 0.02}

四、注意事项

  1. 优先级:滑点既可以在 QMT 策略编辑器的“回测参数”面板中手动设置,也可以在代码中通过 ContextInfo.set_slippage() 设置。若两处同时设置,代码中的设置值将覆盖面板设置
  2. 实盘与模拟盘:滑点设置函数 set_slippage 仅对历史回测模式有效。在实盘或模拟盘运行模式下,该设置不会影响真实的委托报单价。