量化交易学习(三十二)backtrader文档——信号策略
今天这篇是backtrader文档的学习笔记。主要介绍了信号策略的概念。
官方文档链接:https://www.backtrader.com/docu/signal_strategy/signal_strategy/
信号策略
使用信号而不编写策略也能操作backtrader。简单来说就是:
-
不用编写策略类、实例化指标、编写买入/卖出逻辑……
-
最终用户添加信号(无论什么指标),其余操作在后台完成
示例:
1 | import backtrader as bt |
上面的例子中没有定义信号。让我们定义一个非常愚蠢的信号,它会产生:
- Long信号:close价格是否高于简单移动平均线
- Short信号:close价格是否低于简单移动平均线
定义:
1 | class MySignal(bt.Indicator): |
现在完整了。当run执行时,Cerebro将负责实例化一个特殊的Strategy实例,该实例知道如何处理Signals。
常见问题解答
买入/卖出交易量是如何确定的?
cerebro实例会自动向策略添加 FixedSizer 的大小调整器。最终用户可以通过cerebro.addsizer来更改大小调整器
订单如何执行?
执行类型为Market且有效性为“取消前有效”的订单
信号技术细节
从技术和理论角度可以描述如下:
- 调用时返回另一个对象的可调用对象(仅一次)
在大多数情况下,这是类的实例化,但在这里不是
- 支持__getitem__接口。唯一请求的键/索引将是0
从实际的角度来看,看看上面的例子,信号是:
- 来自backtrader生态系统的线条对象,主要是一个指标(Indicator)
这在使用其他指标时很有帮助,例如在示例中使用简单移动平均线时。
信号指示(Signals Indications)
当通过signal[0]查询时,信号会提供指示,含义为:
-
0 -> long indication
-
< 0 -> short indication
-
== 0 -> 无指示
该示例使用 self.data - SMA 进行简单算术运算:
-
当 data 高于 SMA 时发出 long indication
-
当 data 低于 SMA 时发出 short indication
注意:对于未注明具体价格字段的data,参考价格以close为准。
信号类型
如上例所示,下面指示的常量可直接从主 backtrader 模块获取,如下所示:
1 | import backtrader as bt |
信号有 5 种类型,分为 2 组。
主要组别:
-
LONGSHORT: long 和 short indications 均取自该信号的指示
-
LONG:
- long 指示做多
- short 指示平多仓。但:
- 如果系统中有一个LONGEXIT(见下文)信号,它将用于平多仓
- 如果有SHORT信号且没有LONGEXIT信号,则在开空仓前先平多仓
-
SHORT:
- short 指示做空
- long 指示平空仓。但:
- 如果系统中有SHORTEXIT信号(见下文),它将用于平空仓
- 如果有LONG信号且没有SHORTEXIT信号,则将在开多仓前先平空仓
退出组:
这两个信号旨在覆盖其他信号并提供平多/空仓的标准
- LONGEXIT:short指示平多仓
- SHORTEXIT:long指示平空仓
订单累积与订单并发(Accumulation and Order Concurrency)
上面显示的示例信号将持续发出多头和空头指示,因为它只是从close价格中减去SMA的值,并且这将始终是> 0和< 0(等于0在数学上是可能的,但不太可能真正发生)
这将导致订单不断生成,从而产生两种情况:
-
Accumulation:即使已经进入市场,信号也会产生新订单,从而增加仓位
-
Concurrency:其他订单还没执行完成就会生成新订单
为了避免这种情况,默认行为是:
-
不积累
-
不允许并发
如果需要这两种行为中的任何一种,可以通过以下方式控制cerebro:
-
cerebro.signal_accumulate(True)(或False重新禁用它)
-
cerebro.signal_concurrency(True)(或False重新禁用它)
这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记