For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
Unable to use LinePlotterIndicator
-
I calculated an indicator externally and add it to the datafeed extending Pandas datafeed.
Now I want to show in the chart this indicator.# Create a Stratey class FTB3Strategy(bt.Strategy): params = ( ('slots', 1), ) def __init__(self): for d in self.datas: bt.LinePlotterIndicator(d.ss, name='SS') # to show date/time progress self.trace = 0
Error Trace:
<ipython-input-66-1fe598047c76> in __init__(self) 20 for d in self.datas: ---> 21 bt.LinePlotterIndicator(d.ss, name='SS') 22 # to show date/time progress 23 self.trace = 0 ~\AppData\Local\Continuum\anaconda3\lib\site-packages\backtrader\indicator.py in __call__(cls, *args, **kwargs) 51 def __call__(cls, *args, **kwargs): 52 if not cls._icacheuse: ---> 53 return super(MetaIndicator, cls).__call__(*args, **kwargs) 54 55 # implement a cache to avoid duplicating lines actions ~\AppData\Local\Continuum\anaconda3\lib\site-packages\backtrader\metabase.py in __call__(cls, *args, **kwargs) 84 def __call__(cls, *args, **kwargs): 85 cls, args, kwargs = cls.doprenew(*args, **kwargs) ---> 86 _obj, args, kwargs = cls.donew(*args, **kwargs) 87 _obj, args, kwargs = cls.dopreinit(_obj, *args, **kwargs) 88 _obj, args, kwargs = cls.doinit(_obj, *args, **kwargs) ~\AppData\Local\Continuum\anaconda3\lib\site-packages\backtrader\indicator.py in donew(cls, *args, **kwargs) 154 super(MtLinePlotterIndicator, cls).donew(*args, **kwargs) 155 --> 156 _obj.owner = _obj.data.owner._clock 157 _obj.data.lines[0].addbinding(_obj.lines[0]) 158 ~\AppData\Local\Continuum\anaconda3\lib\site-packages\backtrader\lineseries.py in __getattr__(self, name) 459 # in this object if we set an attribute in this object it will be 460 # found before we end up here --> 461 return getattr(self.lines, name) 462 463 def __len__(self): AttributeError: 'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst' object has no attribute '_clock'
Am I doing something wrong?
Thanks -
@ernegraf I've found a workaround/solution using a dummy line (instantiating abstract line):
def __init__(self): dummy_lines = dict() for d in self.datas: dummy_lines[d._name] = d.ss * 1.0 bt.LinePlotterIndicator(dummy_lines[d._name], name='SS:'+d._name, subplot=False, plotmaster=d) # to show date/time progress self.trace = 0
-
@ernegraf said in Unable to use LinePlotterIndicator:
Am I doing something wrong?
You were trying to plot pure "data" lines. The
LinePlotterIndicator
was conceived to plot things that are created as temporary operations inside theStrategy
, but which you don't want to wrap/package as anIndicator
@ernegraf said in Unable to use LinePlotterIndicator:
dummy_lines[d._name] = d.ss * 1.0
With this action you convert the pure data lines into a temporary line which can be a target for
LinePlotterIndicator