public BigDecimal calculate(Formula fomular, UnitDataGroup unitDataGroup) { BigDecimal result = fomular.getConstant(); for (Multinomial multinomial : fomular.getMultinomials()) { UnitData unit = unitDataGroup.getUnitData(multinomial.getCode()); if (unit == null || unit == UnitData.DUMMY) { return null; } else { result = result.add(multinomial.getCoefficient().multiply(unit.getPrice())); } } return result.setScale(2, RoundingMode.FLOOR); }
public BigDecimal calculate(Formula fomular, KLineGroup group) { BigDecimal result = fomular.getConstant(); for (Multinomial multinomial : fomular.getMultinomials()) { KLine kLine = group.getkLineMap().get(multinomial.getCode()); if (kLine == null) { return null; } else { result = result.add(multinomial.getCoefficient().multiply(kLine.getEndPrice())); } } return result.setScale(2, RoundingMode.FLOOR); }
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); }
@Override protected void execute() throws Exception { Formula formula = Formula.create() .putConstant("162.31") .putMultinomial(ProdEnum.JiaoTan, "1") .putMultinomial(ProdEnum.JiaoMei, "-1.60584"); dataProcessor.testEndPriceFormula("2014-01-01", "2016-09-02", formula); }
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()); }
public List<Series> compareProd(Futures f1, Futures f2) { Series s1 = dailyPriceBuss.querySeriesByCode(f1.getCode(), -1); Series s2 = dailyPriceBuss.querySeriesByCode(f2.getCode(), -1); Formula formula = Formula.create() .putConstant(BigDecimal.ZERO) .putMultinomial(f1.getCode(), "1") .putMultinomial(f2.getCode(), "-1"); List<Price> diffPriceList = this.calculateKLine(formula, dailyPriceBuss.queryAllGroup()); String diffName = f1.getName() + "-" + f2.getName(); Series diffSeries = new Series("", diffName, diffPriceList); return Arrays.asList(s1, s2, diffSeries); }
public List<Price> calculateUnitData(String expression, List<UnitDataGroup> groupList) { return calculateUnitData(Formula.parse(expression), groupList); }
public List<Price> calculateKLine(String expression, List<KLineGroup> groupList) { return calculateKLine(Formula.parse(expression), groupList); }