Esempio n. 1
0
 private void calTrendMaMonitor(
     TrendMaMonitor trendMaMonitor, Date date, BigDecimal prodPrice, BigDecimal maPrice) {
   if (trendMaMonitor.getCalDate() == null) {
     trendMaMonitor.setCalDate(date);
     trendMaMonitor.setProdPrice(prodPrice);
     trendMaMonitor.setMaPrice(maPrice);
     trendMaMonitor.setDiff(maPrice.subtract(prodPrice).divide(prodPrice, 4, RoundingMode.FLOOR));
     trendMaMonitor.setTrendDays(1);
   } else if (trendMaMonitor.getCalDate().before(date)) {
     BigDecimal lastDiff = trendMaMonitor.getDiff();
     BigDecimal diff = maPrice.subtract(prodPrice).divide(prodPrice, 4, RoundingMode.FLOOR);
     trendMaMonitor.setCalDate(date);
     trendMaMonitor.setProdPrice(prodPrice);
     trendMaMonitor.setMaPrice(maPrice);
     trendMaMonitor.setDiff(diff);
     if (diff.compareTo(BigDecimal.ZERO) == 0) {
       trendMaMonitor.setTrendDays(trendMaMonitor.getTrendDays() + 1);
       trendMaMonitor.setReturnDays(0);
     } else if (lastDiff.compareTo(BigDecimal.ZERO) == 0) {
       trendMaMonitor.setTrendDays(trendMaMonitor.getTrendDays() + 1);
       trendMaMonitor.setReturnDays(null);
     } else if (diff.compareTo(BigDecimal.ZERO) * lastDiff.compareTo(BigDecimal.ZERO) > 0) {
       trendMaMonitor.setTrendDays(trendMaMonitor.getTrendDays() + 1);
       BigDecimal absDiff = diff.abs();
       BigDecimal absLastDiff = lastDiff.abs();
       if (absLastDiff.compareTo(absDiff) > 0) {
         int returnDays =
             absDiff.divide(absLastDiff.subtract(absDiff), 0, RoundingMode.UP).intValue();
         trendMaMonitor.setReturnDays(returnDays);
       } else {
         trendMaMonitor.setReturnDays(null);
       }
     } else if (diff.compareTo(BigDecimal.ZERO) * lastDiff.compareTo(BigDecimal.ZERO) < 0) {
       trendMaMonitor.setTrendDays(1);
       trendMaMonitor.setReturnDays(0);
     }
   }
 }