class_docstr: By John Ehlers and Ric Way
  
  The zero-lag indicator (ZLIndicator) is a variation of the EMA
  which modifies the EMA by trying to minimize the error (distance price -
  error correction) and thus reduce the lag
  
  Formula:
    - EMA(data, period)
  
    - For each iteration calculate a best-error-correction of the ema (see
      the paper and/or the code) iterating over ``-bestgain`` ->
      ``+bestgain`` for the error correction factor (both incl.)
  
    - The default moving average is EMA, but can be changed with the
      parameter ``_movav``
  
      .. note:: the passed moving average must calculate alpha (and 1 -
                alpha) and make them available as attributes ``alpha`` and
                ``alpha1`` in the instance
  
  See also:
    - http://www.mesasoftware.com/papers/ZeroLag.pdf
code: def __init__(self):
      self.ema = MovAv.EMA(period=self.p.period)
      self.limits = [-self.p.gainlimit, self.p.gainlimit + 1]
  
      # To make mixins work - super at the end for cooperative inheritance
      super(ZeroLagIndicator, self).__init__()
  
file_path: backtrader/backtrader/indicators/zlind.py
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import backtrader
  from backtrader.utils.py3 import MAXINT
  from .None import MovingAverageBase, MovAv
label_desc: Use image node_id 2 to create a new ZeroLagIndicator object from inherited base classes: MovingAverageBase with example: obj = ZeroLagIndicator()