3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化策略回测中,**滑点(Slippage)是模拟真实交易中冲击成本和排队成交偏差的关键参数。不同的品种(如股票、股指期货、商品期货)其最小变动价位(PriceTick)**各不相同。如果统一设置固定数值的滑点,回测结果会失真。
本文将教你如何在 QMT 平台中,动态获取当前标的的 PriceTick,并以此为基准设置自定义滑点。
要实现基于 PriceTick 的动态滑点设置,我们需要结合使用以下两个 QMT API:
ContextInfo.get_instrumentdetail(stockcode)该函数返回一个字典,其中包含合约的详细属性。我们主要使用其 PriceTick 字段:
PriceTick:最小变动价位(例如:上证50ETF期权为 0.0001,沪深300股指期货为 0.2,普通A股为 0.01)。ContextInfo.set_slippage(slippageType, slippage)该函数用于设定策略回测的滑点:
slippageType:滑点类型。
0:tick跳数设置滑点(最适合基于 PriceTick 的设置)。1:按照固定值(价格)设置滑点。2:价格比例设置滑点。slippage:滑点值。以下是一个完整的 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
handlebar 中根据当前下单的标的动态计算滑点,或者在 init 中对股票池(Universe)中的每个标的进行 PriceTick 评估,取折中值设置。slippageType=0(Tick跳数),通常设置 1 或 2 个 Tick 作为滑点。slippageType=2(价格比例,如万分之五),以适应不同股价的冲击成本。