量化交易学习(三十一)backtrader文档——策略类(2)
今天这篇是backtrader文档的学习笔记。主要介绍了策略类的概念。
官方文档链接:https://www.backtrader.com/docu/strategy/
如何买入/卖出/平仓
用Buy方法和Sell生成订单。调用时,它们返回一个可用于参考的Order(或子类)实例。该订单具有唯一ref标识符,可用于比较。
注意:特定broker实现的Order子类可以携带broker提供的附加唯一标识符。
要创建订单,请使用以下参数:
- data(默认:None)
对于那些要被创建订成单的数据,如果为None,那么采用系统中的第一个数据self.datas[0] 或 self.data0(也可简写为self.data)
- size(默认:None)
用于订单的数据单位的大小(正)。
如果为None则将通过getsizer获取的sizer实例来确定大小。
- price(默认:None)
订单的报价(如果不符合最小报价单位要求,实时经纪商可能会对实际格式施加限制)
None可以用于Market和Close订单(市场决定价格)
对于Limit、Stop和StopLimit订单,该值决定了触发点(在Limit订单下,显然是订单的触发价)
- plimit(默认:None)
仅适用于StopLimit订单。这是触发止损后设置隐式限价单的价格(在price已使用的情况下)
-
exectype(默认:None)
可能的值:
-
Order.Market或者None。市价订单将以下一个可用价格执行。在回测中,它将是下一个价格柱的开盘价
-
Order.Limit。只能在给定价格或更好的价格下执行的订单
-
Order.Stop。像Order.Market订单一样在price价格触发并执行的订单
-
Order.StopLimit。在price价格处触发并作为以pricelimit价格为隐式限价订单执行的订单
-
-
valid(默认:None)
可能的值:
-
None:这会生成一个不会过期的订单(又名取消前有效)并保留在市场中直到匹配或取消。实际上,经纪人倾向于施加时间限制,但这通常距离很远,以至于无法将其视为未到期
-
datetime.datetime或datetime.date实例:该日期将用于生成在给定日期时间之前有效的订单(又名有效日期)
-
Order.DAY或0或timedelta():将生成直到会话结束为止那天有效的订单(又称当日订单)
-
numeric value:假设这是一个与matplotlib编码中的日期时间相对应的值(由backtrader所使用的),并将用于生成到该时间为止有效的订单(good til date)
-
-
tradeid(默认:0)
这是一个内部值,backtrader用于跟踪同一资产的重叠交易。当通知订单状态更改时,tradeid会发送回策略。
**kwargs
:可选的broker实现的额外参数。backtrader将kwargs传递给创建的订单对象
示例:如果直接支持的 4 种订单执行类型还不够,例如在Interactive Brokers 的情况下,可以将以下内容作为kwargs传递:
1 | orderType='LIT', lmtPrice=10.0, auxPrice=9.8 |
这将覆盖backtrader创建的设置并生成触及价格为 9.8、限价为 10.0 的LIMIT IF TOUCHED订单。
信息位:
- 策略的长度始终等于主数据 ( datas[0]) 的长度,可以通过len(self)获得长度
如果正在重播数据或正在传递实时数据并且同一时间点(长度)的新报价到达,则可以在不更改长度的情况下调用next方法
成员属性:
- env:该策略类所在的cerebro实体
- datas:已传递到 cerebro 的数据源数组
- data/data0是 datas[0] 的别名
- dataX是 datas[X] 的别名
如果已分配数据源,也可以按名称访问(请参阅参考资料)
- dnames:通过名称(使用[name]或使用.name符号)访问数据源的替代方法
例如,如果像这样重新采样数据:
1 | ... |
稍后在策略中,我们可以为每个指标创建如下所示的指标:
1 | ... |
-
broker:引用与此策略相关的经纪人(从 cerebro 收到)
-
stats:列表/命名元组序列,包含 cerebro 为此策略创建的观察者
-
analyzers:列表/命名元组序列,包含 cerebro 为此策略创建的分析器
-
position:实际上是一个给出当前data0仓位的属性。
有检索所有数据源仓位的方法(请参阅参考资料)
成员属性(用于统计/观察者/分析者):
-
_orderspendingnext
:调用next方法之前通知策略的订单列表 -
_tradespendingnext
:调用next方法之前通知策略的交易列表 -
_orders
:已通知的订单列表。一个订单可以在列表中出现多次,具有不同的状态和不同的执行位。该列表有助于保留订单历史。 -
_trades
:已通知的交易列表。就像订单一样,一笔交易可以在列表中出现多次。
注意:请记住,prenext,nextstart和next可以在同一时间点多次调用(当使用每日时间范围时,ticks可以更新每日柱的价格)
这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记