量化交易学习(三十七)backtrader文档——观察者(2)
今天这篇是backtrader文档的学习笔记。主要介绍了观察者。
开发观察者
Broker
观察者的实现如上一篇文中所示。为了创建有意义的观察者,实现需要使用以下信息:
self._owner
当前正在执行的策略
这样,观察者可以获取策略中的任何内容
-
策略中可能有用的默认内部事物:
broker
-> 属性提供对策略创建订单所依据的经纪商实例的访问权限。
如
Broker
中所示,现金和投资组合价值是通过调用getcash
方法和getvalue
方法获取的。_orderspending
-> 列出由策略创建且经纪商已向策略通知事件的订单。
BuySell
观察者遍历列表查找已执行(全部或部分)的订单,以创建给定时间点(索引 0)的平均执行价格_tradespending
-> 交易列表(一组已完成的买入/卖出或卖出/买入对),由买入/卖出订单编制而成
观察者显然可以通过self._owner.stats
访问其他观察者。
自定义订单观察者
标准的BuySell
观察者只关心已执行的操作。我们可以创建一个观察者,显示订单何时创建以及是否过期。
为了保证可见性,图像不会沿着价格绘制,而是在单独的轴上绘制。
1 | from __future__ import (absolute_import, division, print_function, |
自定义观察者只关心买入订单,因为这是一种仅买入以试图获利的策略。卖单是市价单,将立即执行。
Close-SMA CrossOver 策略更改为:
-
创建一个当信号发出时,价格低于收盘价 1.0% 的限价订单
-
有效期为 7(日历)天
由此产生的图表。
从新的子图(红色方块)中可以看出,有几个订单已经过期,我们还可以看出,“创建”和“执行”之间恰好有几天的时间。
最后是应用新观察者的策略的代码:
1 | from __future__ import (absolute_import, division, print_function, |
保存/保留统计数据
截至目前,backtrader尚未实现任何机制来跟踪将观察者的值存储到文件中。最好的方法是:
- 在策略的start方法中打开文件
- 在策略的next方法中将值记录下来
考虑到DrawDown
观察者,可以这样做:
1 | class MyStrategy(bt.Strategy): |
要保存索引 0 的值,当处理完所有观察者后,可以将写入文件的自定义观察者添加为系统的最后一个观察者,以将值保存到 csv 文件。
注意:Writer 方法可以自动执行此任务。
这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记