基本使用
cerebro会自动加入三个观察者,即Broker、Trades、BuySell。 这样通过 cerebro.plot() 输出图形时,图形界面会输出三部分。
自定义观察者对象
# 取消自定义观察者
cerebro = bt.Cerebro(stdstats=False)
# 手动添加观察者
cerebro.addobserver(OrderObserver)
在策略中访问Observers
在策略类中访问观察者的方法是通过策略的属性 stats,比如:broker观察者含有两根线,value和cash
def next(self):
value = self.stats.broker.value[0]
cash = self.stats.broker.cash[0]
开发新的Observers
主要步骤:
1、继承Observer
2、声明所需的线和参数
3、使用内置属性self._owner(代表持有此观察者的策略实例)访问策略里其它对象的信息
4、当策略的next方法执行完成后,就会执行观察者的next方法,进行统计计算
关于 self._owner
相当于策略类中的self
常用:
self._owner.broker.getvalue() # 获取市值
self._owner.broker.getcash() # 获取现金
self._owner._orderspending # 已创建的订单列表,broker已向策略发出相关事件
self._owner.tradespending # 交易列表
self._owner.stats.XXX... # 访问XXX观察者对象的信息
'''自定义Observer类'''
# 统一语法
from __future__ import (absolute_import, division, print_function, unicode_literals)
import datetime
import backtrader as bt
from logger import lg
from feed import feed
import backtrader.indicators as btind
class OrderObserver(bt.observers.Observer):
lines = (
'created',
'expired'
)
plotinfo = dict(
plot