class_docstr: Moving Average Convergence/Divergence (MACD) Signal line
  https://en.wikipedia.org/wiki/MACD
  
  A technical indicator originally developed by Gerald Appel in the late
  1970's. MACD shows the relationship between two moving averages and
  reveals changes in the strength, direction, momentum, and duration of a
  trend in a stock's price.
  
  **Default Inputs:** :data:`zipline.pipeline.data.EquityPricing.close`
  
  Parameters
  ----------
  fast_period : int > 0, optional
      The window length for the "fast" EWMA. Default is 12.
  slow_period : int > 0, > fast_period, optional
      The window length for the "slow" EWMA. Default is 26.
  signal_period : int > 0, < fast_period, optional
      The window length for the signal line. Default is 9.
  
  Notes
  -----
  Unlike most pipeline expressions, this factor does not accept a
  ``window_length`` parameter. ``window_length`` is inferred from
  ``slow_period`` and ``signal_period``.
code: def __new__(
      cls,
      fast_period=12,
      slow_period=26,
      signal_period=9,
      *args,
      **kwargs,
  ):
      if slow_period <= fast_period:
          raise ValueError(
              "'slow_period' must be greater than 'fast_period', but got\n"
              "slow_period={slow}, fast_period={fast}".format(
                  slow=slow_period,
                  fast=fast_period,
              )
          )
  
      return super(
          MovingAverageConvergenceDivergenceSignal, cls
      ).__new__(
          cls,
          fast_period=fast_period,
          slow_period=slow_period,
          signal_period=signal_period,
          window_length=slow_period + signal_period - 1,
          *args,
          **kwargs,
      )
  
imports: from __future__ import division
  from numpy import abs, average, clip, diff, dstack, inf
  from numexpr import evaluate
  from zipline.pipeline.data import EquityPricing
  from zipline.pipeline.factors import CustomFactor
  from zipline.pipeline.mixins import SingleInputMixin
  from zipline.utils.input_validation import expect_bounded
  from zipline.utils.math_utils import nanargmax, nanargmin, nanmax, nanmean, nanstd, nanmin
  from zipline.utils.numpy_utils import rolling_window
  from .basic import exponential_weights
  from .basic import LinearWeightedMovingAverage, MaxDrawdown, SimpleMovingAverage, VWAP, WeightedAverageValue
label_desc: Use image node_id 1 for calling the MovingAverageConvergenceDivergenceSignal obj's underlying member method code with example usage: obj.__new__(cls, fast_period, slow_period, signal_period) and returns: super