public void calTrendMaMonitor(String code, List<Indicator> indicatorList) {
    List<ProdIndex> prodIndexList = prodIndexBuss.queryAscByCode(code);

    indicatorList
        .stream()
        .forEach(
            indicator -> {
              TrendMaMonitor trendMaMonitor1 =
                  trendMaMonitorRepos.findByCodeAndTrend(code, indicator.getName());
              TrendMaMonitor trendMaMonitor2 = new TrendMaMonitor();
              trendMaMonitor2.setTrend(indicator.getName());
              trendMaMonitor2.setCode(code);
              TrendMaMonitor trendMaMonitor =
                  trendMaMonitor1 == null ? trendMaMonitor2 : trendMaMonitor1;
              prodIndexList
                  .stream()
                  .forEach(
                      prodIndex -> {
                        indicator.push(prodIndex.getDt(), prodIndex.getPrice());
                        if (indicator.getLine().isEmpty()) {
                          return;
                        }
                        Price maPrice = indicator.getLine().get(indicator.getLine().size() - 1);
                        calTrendMaMonitor(
                            trendMaMonitor,
                            prodIndex.getDt(),
                            prodIndex.getPrice(),
                            maPrice.getP());
                      });
              trendMaMonitorRepos.save(trendMaMonitor);
            });
    trendMaMonitorRepos.flush();
  }
  public ProdMA calProdMovingAverage(String code, int month, List<Indicator> indicatorList) {
    List<ProdIndex> prodIndexList = prodIndexBuss.queryAscByCode(code);

    Date d = null;
    if (month > 0) {
      Calendar cal = Calendar.getInstance();
      cal.add(Calendar.MONTH, Math.negateExact(month));
      d = cal.getTime();
    }
    final Date start = d;

    List<Price> priceList = new ArrayList<>();
    List<Price> volList = new ArrayList<>();
    prodIndexList
        .stream()
        .filter(
            prodIndex -> {
              if (month > 0 && prodIndex.getDt().compareTo(start) < 0) {
                return false;
              } else {
                return true;
              }
            })
        .forEach(
            prodIndex -> {
              priceList.add(new Price(prodIndex.getDt(), prodIndex.getPrice()));
              volList.add(new Price(prodIndex.getDt(), new BigDecimal(prodIndex.getVol())));
            });
    Series prodIndexLine = new Series(code, code, priceList);
    Series volLine = new Series(code, code, volList);
    List<Series> mvAvgLineList =
        indicatorList
            .stream()
            .map(
                indicator -> {
                  prodIndexList
                      .stream()
                      .forEach(
                          prodIndex -> {
                            indicator.push(prodIndex.getDt(), prodIndex.getPrice());
                          });
                  if (month < 0) {
                    return new Series("", indicator.getName(), indicator.getLine());
                  } else {
                    return new Series(
                        "",
                        indicator.getName(),
                        indicator
                            .getLine()
                            .stream()
                            .filter(price -> price.getD().compareTo(start) >= 0)
                            .collect(Collectors.toList()));
                  }
                })
            .collect(Collectors.toList());
    return new ProdMA(code, prodIndexLine, volLine, mvAvgLineList);
  }