下降
回溯测试不能保证真实的市场条件。无论市场模拟有多好,在真实的市场条件下,都可能发生滑动。这意味着:
- 请求的价格可能不匹配。
集成的回溯测试代理支持滑动。可以将以下参数传递给代理
- 
slip_perc(默认值:0.0)绝对术语的百分比(和正值),应用于推高/下调买入/卖出订单的价格注: - 
0.01是1%
- 
0.001是0.1%
 
- 
- 
slip_fixed(默认值:0.0)单位百分比(和正值),用于买卖订单上/下滑动价格注:若 slip_perc为非零,则其先于此。
- 
slip_open(默认值:False)订单执行是否打滑,具体使用下一条期初价格。一个例子是Market订单,该订单使用下一个可用的勾号执行,即:酒吧的开盘价。这也适用于其他一些执行,因为当移动到新条时,逻辑试图检测期初价格是否与请求的价格/执行类型匹配。 
- 
slip_match(默认为True)如果 True经纪人将提供匹配,以high/low价格封顶滑动,以防超过。如果 False经纪人不会将订单与当前价格匹配,并将在下一次迭代中尝试执行
- 
slip_limit(默认为True)Limit即使slip_match为False也会根据要求的准确匹配价格匹配订单。此选项控制该行为。 如果为 True,则Limit订单将通过封顶价格与limit/high/low价格匹配如果 False和滑动超过上限,则将不存在匹配
- 
slip_out(默认为False)即使价格在 high-low范围之外,也要提供打滑。
工作原理
为了决定何时应用打滑需要考虑订单执行类型:
- 
Close-无滑移应用此订单与 close价格匹配,此价格为当天最后一个价格。打滑不可能发生,因为订单只能在交易的最后一个滴答声发生,而且这是一个唯一的价格,没有任何容差。
- 
采用 Market-滑移请检查 slip_open异常。因为Market订单将与下一个酒吧的开盘价格匹配。
- 
Limit-滑移按此逻辑应用- 
如果匹配价格为期初价格,则根据参数 slip_open应用滑移。如果适用,价格将永远不会低于要求的limit价格
- 
如果匹配价格不是 limit价格,则在high/low处应用滑移封顶。在这种情况下,slip_mlimit适用于决定如果超过上限,是否会发生匹配
- 
如果匹配价格为 limit价格,则不应用打滑
 
- 
- 
Stop-一旦触发订单,则应用与Market订单相同的逻辑
- 
StopLimit-一旦触发订单,则应用与Limit订单相同的逻辑
这种方法试图在模拟和可用数据的范围内提供最现实的可能方法
配置滑动
代理已经由大脑引擎为每次运行使用默认参数实例化。有两种方法可以改变行为:
- 
使用方法配置滑动 BackBroker.set_sliptage_perc(perc,slip_open=True,slip_limit=True,slip_match=True,slip_out=False)将滑动配置为基于百分比 BackBroker.set_slipation_fixed(固定,滑动打开=真,滑动限制=真,滑动匹配=真,滑动退出=假)将滑动配置为基于固定点 
- 
替换代理,如中所示: ```py import backtrader as bt cerebro = bt.Cerebro() cerebro.broker = bt.brokers.BackBroker(slip_perc=0.005) # 0.5% ``` 
实例
源包含使用订单执行类型Market的样本和使用信号的长/短方法。这应该允许我们理解逻辑。
无滑移运行和初始图,以供以后参考:
$ ./slippage.py --plot
01 2005-03-22 23:59:59 SELL Size: -1 / Price: 3040.55
02 2005-04-11 23:59:59 BUY  Size: +1 / Price: 3088.47
03 2005-04-11 23:59:59 BUY  Size: +1 / Price: 3088.47
04 2005-04-19 23:59:59 SELL Size: -1 / Price: 2948.38
05 2005-04-19 23:59:59 SELL Size: -1 / Price: 2948.38
06 2005-05-19 23:59:59 BUY  Size: +1 / Price: 3034.88
...
35 2006-12-19 23:59:59 BUY  Size: +1 / Price: 4121.01 
使用滑动进行相同的运行,配置1.5%:
$ ./slippage.py --slip_perc 0.015
01 2005-03-22 23:59:59 SELL Size: -1 / Price: 3040.55
02 2005-04-11 23:59:59 BUY  Size: +1 / Price: 3088.47
03 2005-04-11 23:59:59 BUY  Size: +1 / Price: 3088.47
04 2005-04-19 23:59:59 SELL Size: -1 / Price: 2948.38
05 2005-04-19 23:59:59 SELL Size: -1 / Price: 2948.38
06 2005-05-19 23:59:59 BUY  Size: +1 / Price: 3034.88
...
35 2006-12-19 23:59:59 BUY  Size: +1 / Price: 4121.01 
无变化。这是该场景的预期行为。
- 
执行类型: Market
- 
且 slip_open未设置为TrueMarket订单与下一个酒吧的开盘价格匹配,我们不允许open价格变动。
将运行设置slip_open设置为True:
$ ./slippage.py --slip_perc 0.015 --slip_open
01 2005-03-22 23:59:59 SELL Size: -1 / Price: 3021.66
02 2005-04-11 23:59:59 BUY  Size: +1 / Price: 3088.47
03 2005-04-11 23:59:59 BUY  Size: +1 / Price: 3088.47
04 2005-04-19 23:59:59 SELL Size: -1 / Price: 2948.38
05 2005-04-19 23:59:59 SELL Size: -1 / Price: 2948.38
06 2005-05-19 23:59:59 BUY  Size: +1 / Price: 3055.14
...
35 2006-12-19 23:59:59 BUY  Size: +1 / Price: 4121.01 
人们可以立即看到价格已经变动。分配的价格是最差的或与操作 35 相同。这不是复制粘贴错误
- 
2016-12-19 的 open和high是相同的。价格不能推到 high以上,因为这意味着返回一个不存在的价格。
当然,反向交易者允许在high-low范围外匹配slip_out。已激活的跑步:
$ ./slippage.py --slip_perc 0.015 --slip_open --slip_out
01 2005-03-22 23:59:59 SELL Size: -1 / Price: 2994.94
02 2005-04-11 23:59:59 BUY  Size: +1 / Price: 3134.80
03 2005-04-11 23:59:59 BUY  Size: +1 / Price: 3134.80
04 2005-04-19 23:59:59 SELL Size: -1 / Price: 2904.15
05 2005-04-19 23:59:59 SELL Size: -1 / Price: 2904.15
06 2005-05-19 23:59:59 BUY  Size: +1 / Price: 3080.40
...
35 2006-12-19 23:59:59 BUY  Size: +1 / Price: 4182.83 
匹配价格的匹配表达式是:OMG!(天哪!)。价格显然超出了范围。只需查看操作 35 即可,该操作已在4182.83处匹配。快速查看本文档中的图表可以发现,该资产从未接近该价格。
slip_match有True的违约,这意味着反向交易者提供了一个匹配,可以是上面看到的有上限或无上限价格。让我们禁用它:
$ ./slippage.py --slip_perc 0.015 --slip_open --no-slip_match
01 2005-04-15 23:59:59 SELL Size: -1 / Price: 3028.10
02 2005-05-18 23:59:59 BUY  Size: +1 / Price: 3029.40
03 2005-06-01 23:59:59 BUY  Size: +1 / Price: 3124.03
04 2005-10-06 23:59:59 SELL Size: -1 / Price: 3365.57
05 2005-10-06 23:59:59 SELL Size: -1 / Price: 3365.57
06 2005-12-01 23:59:59 BUY  Size: +1 / Price: 3499.95
07 2005-12-01 23:59:59 BUY  Size: +1 / Price: 3499.95
08 2006-02-28 23:59:59 SELL Size: -1 / Price: 3782.71
09 2006-02-28 23:59:59 SELL Size: -1 / Price: 3782.71
10 2006-05-23 23:59:59 BUY  Size: +1 / Price: 3594.68
11 2006-05-23 23:59:59 BUY  Size: +1 / Price: 3594.68
12 2006-11-27 23:59:59 SELL Size: -1 / Price: 3984.37
13 2006-11-27 23:59:59 SELL Size: -1 / Price: 3984.37 
起泡的藤壶!从 35 岁降到 13 岁。理由是:
如果滑动会将匹配价格推高到条的high或low以下,则停用slip_match将不允许匹配操作。似乎随着请求的滑动的1.5%,大约 22 个操作无法执行。
这些例子应该说明不同的滑动选项是如何协同工作的。


