code: def test_MACD_window_length_generation(self, seed):
      rng = RandomState(seed)
  
      signal_period = rng.randint(1, 90)
      fast_period = rng.randint(signal_period + 1, signal_period + 100)
      slow_period = rng.randint(fast_period + 1, fast_period + 100)
      ewma = MovingAverageConvergenceDivergenceSignal(
          fast_period=fast_period,
          slow_period=slow_period,
          signal_period=signal_period,
      )
      assert_equal(
          ewma.window_length,
          slow_period + signal_period - 1,
      )
  
imports: from __future__ import division
  from nose_parameterized import parameterized
  from six.moves import range
  import numpy
  import pandas
  import talib
  from numpy.random import RandomState
  from zipline.lib.adjusted_array import AdjustedArray
  from zipline.pipeline.data import USEquityPricing
  from zipline.pipeline.factors import BollingerBands, Aroon, FastStochasticOscillator, IchimokuKinkoHyo, LinearWeightedMovingAverage, RateOfChangePercentage, TrueRange, MovingAverageConvergenceDivergenceSignal, AnnualizedVolatility, RSI
  from zipline.testing import check_allclose, parameter_space
  from zipline.testing.fixtures import ZiplineTestCase
  from zipline.testing.predicates import assert_equal
  from .base import BaseUSEquityPipelineTestCase
label_desc: Use image node_id 2 for calling the MovingAverageConvergenceDivergenceTestCase obj's underlying member method code with example usage: obj.test_MACD_window_length_generation(seed) without return types