@Test
  public void getMaximumNumberOfTradingDaysRequired() {
    final int daysGradient = 7;

    final SimpleMovingAverageGradientSignals smaGradient =
        new SimpleMovingAverageGradientSignals(
            lookback, daysGradient, GradientType.NEGATIVE, MATH_CONTEXT);

    assertEquals(lookback + daysGradient, smaGradient.getRequiredNumberOfTradingDays());
  }
  @Test
  public void signalsFlat() {
    final TradingDayPrices[] data = createTradingPrices();
    final int daysGradient = data.length - lookback;

    final SimpleMovingAverageGradientSignals smaGradient =
        new SimpleMovingAverageGradientSignals(1, daysGradient, GradientType.FLAT, MATH_CONTEXT);

    final List<IndicatorSignal> signals = smaGradient.calculateSignals(data);

    assertNotNull(signals);
    assertEquals(2, signals.size());
    assertEquals(data[11].getDate(), signals.get(0).getDate());
    assertEquals(data[13].getDate(), signals.get(1).getDate());
  }
  @Test
  public void signalsNegative() {
    final TradingDayPrices[] data = createTradingPrices();
    final int daysGradient = data.length - 1 - lookback;

    final SimpleMovingAverageGradientSignals smaGradient =
        new SimpleMovingAverageGradientSignals(
            lookback, daysGradient, GradientType.NEGATIVE, MATH_CONTEXT);

    final List<IndicatorSignal> signals = smaGradient.calculateSignals(data);

    assertNotNull(signals);
    assertEquals(5, signals.size());
    assertEquals(data[15].getDate(), signals.get(0).getDate());
    assertEquals(data[16].getDate(), signals.get(1).getDate());
    assertEquals(data[17].getDate(), signals.get(2).getDate());
    assertEquals(data[18].getDate(), signals.get(3).getDate());
    assertEquals(data[19].getDate(), signals.get(4).getDate());
  }