Backtrader 文档学习- Broker - Slippage
1.概述
回测无法保证真实的市场条件。无论市场模拟有多好,在真实市场条件下都可能发生滑点。这意味着:
- 请求的价格可能无法与真实市场的价格匹配
集成的回测broker支持滑点。以下参数可以传递给broker ,具体参数见前一章。
2.How it works
滑点是如何工作的
为了决定何时应用滑点,考虑订单执行类型:
- Close 不适用滑点
此订单与close价格匹配,此价格是当天的最后一个价格。滑点不可能发生,因为订单只能在会话的最后一个tick发生,是一个唯一的价格,没有容差。 - Market 应用滑点
请检查slip_open是否打开,设置为True。因为Market订单将与下一个K线的开盘价格匹配。 - Limit 应用滑点,遵循以下逻辑:
- 如果匹配价格将是开盘价格,则根据参数slip_open,应用滑点。如果应用,则价格永远不会比请求的limit价格更低(差)。
- 如果匹配价格不是limit价格,则应用滑点,并将其限制在high/low上。在这种情况下,slip_mlimit参数决定是否会在超过上限时发生匹配 。
- 如果匹配价格是limit价格,则不用滑点 。
- Stop 一旦订单被触发,则适用与Market订单相同的逻辑
- StopLimit 一旦订单被触发,则适用与Limit订单相同的逻辑
滑点试图在模拟和可用数据的限制内,提供最真实的可能回测交易方法 。
3.Configuring slippage
每次运行时,cerebro引擎都会为每个运行实例化一个broker,并使用默认参数。有两种方法可以更改设置操作:
使用方法配置滑点:
- 配置百分比的滑点
BackBroker.set_slippage_perc(perc, slip_open=True, slip_limit=True,
slip_match=True, slip_out=False)
- 配置固定点的滑点
BackBroker.set_slippage_fixed(fixed, slip_open=True, slip_limit=True,
slip_match=True, slip_out=False)
替换经纪人,如下所示:
import backtrader as bt
cerebro = bt.Cerebro()
#0.5%的百分比滑点设置
cerebro.broker = bt.brokers.BackBroker(slip_perc=0.005) # 0.5%
4. 示例
包含一个使用订单执行类型市场和使用信号的多头/空头方法的示例。
应该允许理解逻辑, 无滑点运行和供以后参考的初始图:
(1)无滑点
python ./slippage.py
01 2005-03-22 SELL Size: -1 / Price: 3040.55
02 2005-04-11 BUY Size: +1 / Price: 3088.47
03 2005-04-11 BUY Size: +1 / Price: 3088.47
04 2005-04-19 SELL Size: -1 / Price: 2948.38
05 2005-04-19 SELL Size: -1 / Price: 2948.38
06 2005-05-19 BUY Size: +1 / Price: 3034.88
07 2005-05-19 BUY Size: +1 / Price: 3034.88
08 2005-08-26 SELL Size: -1 / Price: 3258.45
09 2005-08-26 SELL Size: -1 / Price: 3258.45
10 2005-09-13 BUY Size: +1 / Price: 3353.61
11 2005-09-13 BUY Size: +1 / Price: 3353.61
12 2005-10-19 SELL Size: -1 / Price: 3330.00
13 2005-10-19 SELL Size: -1 / Price: 3330.00
14 2005-11-14 BUY Size: +1 / Price: 3405.94
15 2005-11-14 BUY Size: +1 / Price: 3405.94
16 2006-01-26 SELL Size: -1 / Price: 3578.92
17 2006-01-26 SELL Size: -1 / Price: 3578.92
18 2006-02-03 BUY Size: +1 / Price: 3677.05
19 2006-02-03 BUY Size: +1 / Price: 3677.05
20 2006-04-20 SELL Size: -1 / Price: 3820.93
21 2006-04-20 SELL Size: -1 / Price: 3820.93
22 2006-05-02 BUY Size: +1 / Price: 3839.24
23 2006-05-02 BUY Size: +1 / Price: 3839.24
24 2006-05-16 SELL Size: -1 / Price: 3711.46
25 2006-05-16 SELL Size: -1 / Price: 3711.46
26 2006-07-04 BUY Size: +1 / Price: 3664.59
27 2006-07-04 BUY Size: +1 / Price: 3664.59
28 2006-07-27 SELL Size: -1 / Price: 3649.29
29 2006-07-27 SELL Size: -1 / Price: 3649.29
30 2006-07-28 BUY Size: +1 / Price: 3671.71
31 2006-07-28 BUY Size: +1 / Price: 3671.71
32 2006-12-04 SELL Size: -1 / Price: 3935.81
33 2006-12-04 SELL Size: -1 / Price: 3935.81
34 2006-12-19 BUY Size: +1 / Price: 4121.01
35 2006-12-19 BUY Size: +1 / Price: 4121.01
看第一个成交的原始数据:
2005-03-22,3040.55,3053.18,3021.66,3050.44,0,0
用的是开盘价成交 。