3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台的回测模式中,设置滑点(Slippage)主要有两种方式:通过策略编辑器界面设置和通过Python 代码设置。
如果同时在界面和代码中进行了设置,代码中的设置优先级更高,会覆盖界面的设置。
以下是详细的设置方法说明:
在策略代码的 init(ContextInfo) 函数中,使用 ContextInfo.set_slippage(slippageType, slippage) 接口进行设置。这种方式可以确保策略逻辑与参数绑定,便于移植和版本管理。
ContextInfo.set_slippage(slippageType, slippage)
0:按 tick 跳数设置(例如设置 1,代表滑 1 个最小变动价位)。1:按 **固定值(价格)**设置(例如设置 0.01,代表每股滑 0.01 元)。2:按 价格比例设置(例如设置 0.001,代表按成交价的 0.1% 计算滑点)。# -*- coding: gbk -*-
def init(ContextInfo):
# 方式1:按固定价格设置滑点
# 设置滑点为 0.02 元(即买入贵 0.02,卖出便宜 0.02)
ContextInfo.set_slippage(1, 0.02)
# 方式2:按比例设置滑点(注释掉上方代码使用此行)
# 设置滑点为千分之一 (0.1%)
# ContextInfo.set_slippage(2, 0.001)
# 方式3:按跳数设置滑点(注释掉上方代码使用此行)
# 设置滑点为 2 个 tick (如股票最小变动 0.01,则滑 0.02)
# ContextInfo.set_slippage(0, 2)
print("滑点设置完成")
def handlebar(ContextInfo):
# 策略逻辑
pass
如果不希望修改代码,可以在 QMT 客户端的策略编辑器界面中直接配置:
在回测过程中,您可以使用 ContextInfo.get_slippage() 来获取当前生效的滑点设置,以确保配置正确。
def handlebar(ContextInfo):
# 获取当前滑点设置
# 返回值为字典,包含 'slippage_type' 和 'slippage'
current_slippage = ContextInfo.get_slippage()
print(f"当前滑点设置: {current_slippage}")
Q: set_slippage 函数在实盘模式下有效吗?
A: 无效。ContextInfo.set_slippage 仅在回测模式下生效。在实盘或模拟交易中,成交价格取决于市场的真实撮合情况,无法强制设定滑点,但可以通过限价单(Limit Order)或算法交易来控制滑点成本。
Q: 如果我在界面设置了滑点,代码里也写了 set_slippage,哪个生效?
A: 代码中的设置生效。代码中调用的 ContextInfo.set_slippage 优先级高于策略编辑器界面中的回测参数设置。
Q: 滑点是如何影响回测结果的?
A: 滑点模拟了真实交易中的冲击成本。
Q: 股票回测一般设置多少滑点比较合理?
A: 这取决于策略的资金规模和交易频率。对于普通资金规模的日线策略,通常设置为 1跳 (Type 0, Value 1) 或 万分之五到千分之一 (Type 2, Value 0.0005 - 0.001) 较为常见。高频策略通常需要设置更严格的滑点。