@Cacheable(value = "KLineBuss.querySeriesByCode") public Series querySeriesByCode(String code, int month) { Futures prod = productBuss.queryFuturesByCode(code); if (prod == null) { return Series.EMPTY; } else { List<KLine> kLineList = null; if (month < 0) { kLineList = this.queryAscByCode(code); } else { Calendar cal = Calendar.getInstance(); Date endDt = cal.getTime(); cal.add(Calendar.MONTH, -month); Date startDt = cal.getTime(); kLineList = kLineRepos.findByCodeAndDtBetweenOrderByDtAsc(code, startDt, endDt); } List<Price> prices = kLineList .stream() .map( kLine -> { return new Price(kLine.getDt(), kLine.getEndPrice()); }) .collect(Collectors.toList()); return new Series(prod.getCode(), prod.getName(), prices); } }
public ProdDailyPrice queryProdDailyPrice(String code, int month) { Futures prod = productBuss.queryFuturesByCode(code); if (prod == null) { return null; } else { List<KLine> kLineList = null; List<ProdIndex> indexList = null; if (month < 0) { // 所有 kLineList = kLineRepos.findByCodeOrderByDtAsc(code); indexList = prodIndexRepos.findByCodeOrderByDtAsc(code); } else { // 指定月数 Calendar cal = Calendar.getInstance(); Date endDt = cal.getTime(); cal.add(Calendar.MONTH, -month); Date startDt = cal.getTime(); kLineList = kLineRepos.findByCodeAndDtBetweenOrderByDtAsc(code, startDt, endDt); indexList = prodIndexRepos.findByCodeAndDtBetweenOrderByDtAsc(code, startDt, endDt); } List<Price> mainPriceList = kLineList .stream() .map( kLine -> { return new Price(kLine.getDt(), kLine.getEndPrice()); }) .collect(Collectors.toList()); List<Price> indexPriceList = indexList .stream() .map( index -> { return new Price(index.getDt(), index.getPrice()); }) .collect(Collectors.toList()); return new ProdDailyPrice(prod.getCode(), prod.getName(), mainPriceList, indexPriceList); } }
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); }