public HedgingMonitor monitorHedging(Integer id) { Hedging hedging = hedgingRepo.findOne(id); Formula formula = Formula.parse(hedging.getExpression()); List<Price> realtimePrices = this.calculateUnitData(formula, realTimePriceBuss.queryAllAsc()); List<Price> klinePrices = this.calculateKLine(formula, dailyPriceBuss.queryAllGroup()); return new HedgingMonitor( id, hedging.getName(), formula.toString(), hedging.getStartDt(), hedging.getEndDt(), hedging.getDown(), hedging.getUp(), realtimePrices, klinePrices); }
public List<HedgingView> queryHedging() { UnitDataGroup realTime = realTimePriceBuss.queryLatest(); KLineGroup kline = dailyPriceBuss.queryLatest(); return hedgingRepo .findAll() .stream() .map( hedging -> { Formula f = Formula.parse(hedging.getExpression()); BigDecimal diffKline = this.calculate(f, kline); BigDecimal diffRealtime = this.calculate(f, realTime); BigDecimal diff = diffRealtime == null ? diffKline : diffRealtime; int mid = hedging.getMid(); int down = hedging.getDown(); int up = hedging.getUp(); BigDecimal complete = null; if (diff.compareTo(new BigDecimal(mid)) > 0) { complete = diff.subtract(new BigDecimal(mid)) .divide(new BigDecimal(up - mid), 4, RoundingMode.FLOOR); } else { complete = new BigDecimal(mid) .subtract(diff) .divide(new BigDecimal(mid - down), 4, RoundingMode.FLOOR); } return new HedgingView( hedging.getId(), hedging.getName(), f.toString(), complete, diffKline, diffRealtime, hedging.getUp(), hedging.getDown(), hedging.getMid(), hedging.getQ1(), hedging.getQ3()); }) .collect(Collectors.toList()); }