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

QMT平台如何在回测中根据合约的 PriceTick 设置自定义滑点?

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

问题描述

qmt 精细化回测:如何利用最小变动价位 (PriceTick) 自定义滑点?
qmt 怎么在回测中根据合约的 PriceTick 设置自定义滑点?

解决方案

QMT精细化回测:如何利用最小变动价位 (PriceTick) 自定义滑点?

在量化策略回测中,**滑点(Slippage)是模拟真实交易中冲击成本和排队成交偏差的关键参数。不同的品种(如股票、股指期货、商品期货)其最小变动价位(PriceTick)**各不相同。如果统一设置固定数值的滑点,回测结果会失真。

本文将教你如何在 QMT 平台中,动态获取当前标的的 PriceTick,并以此为基准设置自定义滑点。


1. 核心 API 介绍

要实现基于 PriceTick 的动态滑点设置,我们需要结合使用以下两个 QMT API:

(1) 获取合约详情:ContextInfo.get_instrumentdetail(stockcode)

该函数返回一个字典,其中包含合约的详细属性。我们主要使用其 PriceTick 字段:

  • PriceTick:最小变动价位(例如:上证50ETF期权为 0.0001,沪深300股指期货为 0.2,普通A股为 0.01)。

(2) 设定回测滑点:ContextInfo.set_slippage(slippageType, slippage)

该函数用于设定策略回测的滑点:

  • slippageType:滑点类型。
    • 0:tick跳数设置滑点(最适合基于 PriceTick 的设置)。
    • 1:按照固定值(价格)设置滑点。
    • 2:价格比例设置滑点。
  • slippage:滑点值。

2. Python 代码实现

以下是一个完整的 QMT 策略示例。在 init 初始化函数中,我们获取主图品种的 PriceTick,并将其设置为 1个Tick 的滑点值。

#coding:gbk

def init(ContextInfo):
    # 1. 获取当前运行主图的合约代码
    stock_code = ContextInfo.stockcode
    
    # 2. 获取该合约的详细信息
    detail = ContextInfo.get_instrumentdetail(stock_code)
    
    # 3. 提取最小变动价位 PriceTick
    price_tick = detail.get('PriceTick', 0.01) # 缺省默认为 0.01
    print(f"当前合约 {stock_code} 的最小变动价位 (PriceTick) 为: {price_tick}")
    
    # 4. 设置自定义滑点
    # 方法 A:直接使用 tick 跳数设置(推荐)
    # 设置滑点为 1 个 Tick 变动价位
    ContextInfo.set_slippage(0, 1) 
    
    # 方法 B:使用固定价格值设置
    # 假设我们希望滑点为 2 个最小变动价位(例如:沪深300期货滑点设为 0.4 元)
    custom_slippage_value = price_tick * 2
    ContextInfo.set_slippage(1, custom_slippage_value)
    
    print(f"已成功设置回测滑点。当前滑点价格偏差为: {custom_slippage_value} 元")

def handlebar(ContextInfo):
    # 策略核心逻辑
    pass

3. 最佳实践建议

  1. 多品种策略处理:如果是多股/多合约策略,建议在 handlebar 中根据当前下单的标的动态计算滑点,或者在 init 中对股票池(Universe)中的每个标的进行 PriceTick 评估,取折中值设置。
  2. 滑点类型选择
    • 对于股指期货/商品期货,推荐使用 slippageType=0(Tick跳数),通常设置 12 个 Tick 作为滑点。
    • 对于高价股与低价股混杂的股票策略,推荐使用 slippageType=2(价格比例,如万分之五),以适应不同股价的冲击成本。