3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化策略回测中,**滑点(Slippage)**是模拟真实交易中冲击成本和市场流动性损耗的关键参数。如果回测不设置滑点,回测结果往往会过于理想化。QMT(Quantitative Trading System)平台提供了强大的自定义滑点功能,允许开发者在 Python 代码中灵活设定不同的滑点类型。
在 QMT 中,我们主要通过 ContextInfo.set_slippage() 函数来设定回测滑点。该函数仅在回测模式下生效。
ContextInfo.set_slippage(slippageType, slippage)
slippageType (滑点类型):
0:tick 跳数设置滑点(按照最小变动价位的倍数计算)。1:按照固定值(价格)设置滑点(如每笔交易固定多支出 0.01 元)。2:价格比例设置滑点(按照成交价格的百分比计算,如 0.001 代表千分之一)。slippage (滑点值):对应的数值(float 类型)。以下是在 QMT 策略的 init 初始化函数中设置不同滑点类型的具体示例:
假设我们希望每次买入时价格高报 0.01 元,卖出时低报 0.01 元:
#coding:gbk
def init(ContextInfo):
# 设置滑点类型为 1(固定价格),滑点值为 0.01 元
ContextInfo.set_slippage(1, 0.01)
print("已设置固定价格滑点:0.01元")
适用于高价股或波动较大的品种,按成交价的比例(如万分之五)计算滑点:
#coding:gbk
def init(ContextInfo):
# 设置滑点类型为 2(价格比例),滑点值为 0.0005(万分之五)
ContextInfo.set_slippage(2, 0.0005)
print("已设置价格比例滑点:万分之五")
适用于期货等按 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}
ContextInfo.set_slippage() 设置。若两处同时设置,代码中的设置值将覆盖面板设置。set_slippage 仅对历史回测模式有效。在实盘或模拟盘运行模式下,该设置不会影响真实的委托报单价。