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

如何在QMT中设置不同的滑点类型(跳数、固定值、比例)以契合真实市场冲击?

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

问题描述

QMT 回测精操:基于 slippageType 的跳数与价格比例滑点微调
如何在 QMT 中设置不同的滑点类型(跳数、固定值、比例)以契合真实市场冲击?

解决方案

QMT回测精操:基于 slippageType 的滑点微调指南

在量化回测中,**滑点(Slippage)**是模拟真实交易中市场冲击成本、流动性损耗及交易延迟的关键参数。如果回测不设置滑点,策略表现往往会过于理想化。

QMT 平台提供了强大的滑点设置接口 ContextInfo.set_slippage(slippageType, slippage)。本文将详细介绍如何通过微调该函数的参数,完美契合不同的市场冲击场景。


1. QMT 滑点接口定义

接口用法

ContextInfo.set_slippage(slippageType, slippage)

参数说明

  • slippageType (滑点类型)
    • 0tick跳数设置滑点。即按照标的资产的最小变动价位(Tick Size)的倍数来计算滑点。常用于期货回测。
    • 1按照固定值(价格)设置滑点。无论标的价格是多少,每笔交易扣除固定的价格绝对值(如 0.01 元)。常用于股票回测。
    • 2价格比例设置滑点。按照成交价格的一定比例计算滑点(如 0.02%)。适合价格波动范围大或跨高低价股的策略。
  • slippage (滑点值):对应的数值(跳数、价格绝对值或比例系数)。

核心注意点

  1. 该函数仅支持回测模式,在实盘/模拟运行模式下无意义。
  2. 必须在初始化函数 init(ContextInfo) 中进行设置才能生效。
  3. 代码中设置的滑点会覆盖策略编辑器回测参数面板中的手动设置。

2. 三种滑点类型的应用场景与代码示例

场景一:Tick跳数滑点(slippageType = 0)

  • 适用对象:商品期货、股指期货等流动性极佳、报价连续但有排队等待损耗的品种。
  • 逻辑:若设置滑点为 1 跳,当股指期货当前价格为 3500 点,最小变动单位为 0.2 点时,买入时实际成交价将变为 3500.2 点。
#coding:gbk
def init(ContextInfo):
    # 设置滑点类型为 0(Tick跳数),滑点值为 1 跳
    ContextInfo.set_slippage(0, 1.0)
    print("已设置回测滑点为:1 Tick")

def handlebar(ContextInfo):
    pass

场景二:固定价格滑点(slippageType = 1)

  • 适用对象:A股股票。A股最小报价单位通常为 0.01 元,通过设置固定价格滑点,可以模拟无法在最优价成交、被迫向上一档或两档吃单的情况。
  • 逻辑:若设置固定滑点为 0.02 元,买入价为 10.00 元时,实际成交价按 10.02 元计算。
#coding:gbk
def init(ContextInfo):
    # 设置滑点类型为 1(固定价格),滑点值为 0.02 元
    ContextInfo.set_slippage(1, 0.02)
    print("已设置回测滑点为固定价格:0.02 元")

def handlebar(ContextInfo):
    pass

场景三:价格比例滑点(slippageType = 2)

  • 适用对象:高价股与低价股混合的股票池,或者价格波动剧烈的加密货币/海外资产。比例滑点能更合理地反映资金规模对不同价格标的的冲击成本。
  • 逻辑:若设置比例滑点为 0.001(即万分之十),买入 100 元的股票时滑点为 0.1 元,买入 10 元的股票时滑点为 0.01 元。
#coding:gbk
def init(ContextInfo):
    # 设置滑点类型为 2(价格比例),滑点值为 0.001 (0.1%)
    ContextInfo.set_slippage(2, 0.001)
    print("已设置回测滑点为价格比例:0.1%")

def handlebar(ContextInfo):
    pass

3. 获取当前策略的滑点设置

在回测运行过程中,如果需要动态检查或记录当前的滑点配置,可以使用 ContextInfo.get_slippage() 接口:

#coding:gbk
def init(ContextInfo):
    ContextInfo.set_slippage(1, 0.01) # 设置固定价格滑点 0.01 元

def handlebar(ContextInfo):
    # 获取当前策略设定的滑点字典
    slippage_dict = ContextInfo.get_slippage()
    # 返回格式通常为:{'slippage_type': 1, 'slippage': 0.01}
    if ContextInfo.barpos == 0:
        print("当前回测滑点配置:", slippage_dict)

通过合理微调 slippageType,您的 QMT 回测结果将更具实战参考价值,有效避免“回测林志玲,实盘罗玉凤”的量化陷阱。