zainali5120
2020-10-08 c24fc100ef9966495dc706e110fc37f13e003448
src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java
@@ -62,7 +62,7 @@
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        long firstTimeOfToday = calendar.getTimeInMillis();
        String period = "1min";
        logger.info("initializeThumb from {} to {}", firstTimeOfToday, nowTime);
        //logger.info("initializeThumb from {} to {}", firstTimeOfToday, nowTime);
        List<Candlestick> lines = service.findAllKLine(this.symbol, firstTimeOfToday, nowTime, period);
        coinThumb = new CoinThumb();
        synchronized (coinThumb) {
@@ -202,7 +202,7 @@
                    //处理K线
                    processTrade(currentKLine, exchangeTrade);
                    //处理今日概况信息
                    logger.debug("处理今日概况信息");
                    //logger.debug("处理今日概况信息");
                    handleThumb(exchangeTrade);
                    //存储并推送成交信息
                    handleTradeStorage(exchangeTrade);
@@ -212,7 +212,7 @@
    }
    public void processTrade(Candlestick kLine, ExchangeTrade exchangeTrade) {
        if (kLine.getClose().compareTo(BigDecimal.ZERO) == 0) {
        if (kLine.getClose()==null || kLine.getClose().compareTo(BigDecimal.ZERO)==0) {
            //第一次设置K线值
            kLine.setOpen(exchangeTrade.getPrice());
            kLine.setHigh(exchangeTrade.getPrice());
@@ -224,15 +224,19 @@
            kLine.setClose(exchangeTrade.getPrice());
        }
        kLine.setCount(kLine.getCount() + 1);
        kLine.setVolume(kLine.getVolume().add(exchangeTrade.getAmount()));
        if(kLine.getVolume()==null){
            kLine.setVolume(BigDecimal.ZERO);
        }
        kLine.setAmount(kLine.getVolume().add(exchangeTrade.getAmount()));
        BigDecimal turnover = exchangeTrade.getPrice().multiply(exchangeTrade.getAmount());
       // kLine.setTurnover(kLine.getTurnover().add(turnover));
        kLine.setVolume(kLine.getVolume().add(turnover));
        //kLine.setTimestamp(System.currentTimeMillis());
    }
    public void handleTradeStorage(ExchangeTrade exchangeTrade) {
        for (MarketHandler storage : handlers) {
            storage.handleTrade(symbol, exchangeTrade, coinThumb);
        }
//        for (MarketHandler storage : handlers) {
//            storage.handleTrade(symbol, exchangeTrade, coinThumb);
//        }
    }
    public void handleKLineStorage(Candlestick kLine) {
@@ -243,7 +247,7 @@
    }
    public void handleThumb(ExchangeTrade exchangeTrade) {
        logger.info("handleThumb symbol = {}", this.symbol);
        //logger.info("handleThumb symbol = {}", this.symbol);
        synchronized (coinThumb) {
            if (coinThumb.getOpen().compareTo(BigDecimal.ZERO) == 0) {
                //第一笔交易记为开盘价
@@ -265,7 +269,7 @@
                coinThumb.setChg(change.divide(coinThumb.getLow(), 4, BigDecimal.ROUND_UP));
            }
            if ("USDT".equalsIgnoreCase(baseCoin)) {
                logger.info("setUsdRate", exchangeTrade.getPrice());
               // logger.info("setUsdRate", exchangeTrade.getPrice());
                coinThumb.setUsdRate(exchangeTrade.getPrice());
            } else {
@@ -304,7 +308,7 @@
        calendar.add(field, -range);
        String fromTime = df.format(calendar.getTime());
        long startTick = calendar.getTimeInMillis();
        System.out.println("time range from " + fromTime + " to " + endTime);
        //System.out.println("time range from " + fromTime + " to " + endTime);
        List<ExchangeTrade> exchangeTrades = service.findTradeByTimeRange(this.symbol, startTick, endTick);
        Candlestick kLine = new Candlestick();
@@ -340,7 +344,7 @@
           kLine.setLow(coinThumb.getClose());
           kLine.setHigh(coinThumb.getClose());
        }
        logger.info("generate " + range + rangeUnit + " kline in {},data={}", df.format(new Date(kLine.getTimestamp())), JSON.toJSONString(kLine));
        //logger.info("generate " + range + rangeUnit + " kline in {},data={}", df.format(new Date(kLine.getTimestamp())), JSON.toJSONString(kLine));
        service.saveKLine(symbol,period, kLine);
        // 生成一个对应的新K线 后续的交易会更新这个最新K线数据
        Candlestick newKline = new Candlestick();
@@ -352,11 +356,14 @@
        newKline.setOpen(kLine.getClose());
        newKline.setVolume(BigDecimal.ZERO);
        newKline.setHigh(kLine.getClose());
        calendar.add(field, 2*range);
        newKline.setTimestamp(calendar.getTimeInMillis());
        currentKlineMap.put(period,newKline);
        // 存储昨日K线
        if("day".equals(rangeUnit)){
            redisUtils.set("NEKK/USDT",kLine);
            System.out.println("存储日K线");
            redisUtils.set("ROC/USDT",kLine);
        }
    }