From 82dfeaa3fcf871cb604e82abcc8a6db7581e83a2 Mon Sep 17 00:00:00 2001 From: zainali5120 <512061637@qq.com> Date: Mon, 21 Sep 2020 00:59:54 +0800 Subject: [PATCH] 撮合交易代码提交 --- src/main/java/com/xcong/excoin/trade/CoinTrader.java | 50 +++++++++++++++++++++++++++----------------------- 1 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/xcong/excoin/trade/CoinTrader.java b/src/main/java/com/xcong/excoin/trade/CoinTrader.java index fc4a8fc..6c4f979 100644 --- a/src/main/java/com/xcong/excoin/trade/CoinTrader.java +++ b/src/main/java/com/xcong/excoin/trade/CoinTrader.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity; import com.xcong.excoin.modules.coin.service.OrderCoinService; import com.xcong.excoin.rabbit.producer.ExchangeProducer; @@ -37,8 +38,7 @@ //是否暂停交易 private boolean tradingHalt = false; private boolean ready = false; - //交易对信息 - //private ExchangeCoinPublishType publishType; + private String clearTime; private SimpleDateFormat dateTimeFormat; @@ -140,9 +140,16 @@ return; } // 如果 - if (exchangeOrder.getEntrustAmount().compareTo(BigDecimal.ZERO) <= 0 || exchangeOrder.getEntrustAmount().subtract(exchangeOrder.getDealAmount()).compareTo(BigDecimal.ZERO) <= 0) { - return; + if(OrderCoinsEntity.ORDERTYPE_BUY==exchangeOrder.getOrderType()){ + if (exchangeOrder.getEntrustAmount().compareTo(BigDecimal.ZERO) <= 0 || exchangeOrder.getEntrustAmount().subtract(exchangeOrder.getDealAmount()).compareTo(BigDecimal.ZERO) <= 0) { + return; + } + }else{ + if (exchangeOrder.getEntrustCnt().compareTo(BigDecimal.ZERO) <= 0 || exchangeOrder.getEntrustCnt().subtract(exchangeOrder.getDealCnt()).compareTo(BigDecimal.ZERO) <= 0) { + return; + } } + TreeMap<BigDecimal, MergeOrder> limitPriceOrderList; LinkedList<OrderCoinsEntity> marketPriceOrderList; @@ -403,6 +410,7 @@ availAmount = calculateTradedAmount(matchOrder, dealPrice); //计算成交量 取少的 BigDecimal tradedAmount = (availAmount.compareTo(needAmount) >= 0 ? needAmount : availAmount); + System.out.println("成交量:"+tradedAmount); //logger.info("dealPrice={},amount={}", dealPrice, tradedAmount); //如果成交额为0说明剩余额度无法成交,退出 if (tradedAmount.compareTo(BigDecimal.ZERO) == 0) { @@ -493,7 +501,6 @@ //orderCoinService.handleOrder(trades); // kafkaTemplate.send("exchange-trade", JSON.toJSONString(trades)); } - // 更新最新K线 TODO } } @@ -527,7 +534,7 @@ * @param buyTradePlate sellTradePlate */ public void sendTradePlateMessage(TradePlate buyTradePlate, TradePlate sellTradePlate) { - //防止并发引起数组越界,造成盘口倒挂 TODO + //防止并发引起数组越界,造成盘口倒挂 List<List<BigDecimal>> plate; List<BigDecimal> plateItem; TradePlateModel tradePlateModel = new TradePlateModel(); @@ -535,10 +542,10 @@ if (buyTradePlate != null && buyTradePlate.getItems() != null) { plate = new ArrayList<>(); LinkedList<TradePlateItem> items = buyTradePlate.getItems(); - for (TradePlateItem item : items) { + for (int i = items.size() - 1; i >= 0; i--) { plateItem = new ArrayList<>(2); - BigDecimal price = item.getPrice(); - BigDecimal amount = item.getAmount(); + BigDecimal price = items.get(i).getPrice(); + BigDecimal amount = items.get(i).getAmount(); plateItem.add(price); plateItem.add(amount); plate.add(plateItem); @@ -549,10 +556,10 @@ if (sellTradePlate != null && sellTradePlate.getItems() != null) { plate = new ArrayList<>(); LinkedList<TradePlateItem> items = sellTradePlate.getItems(); - for (TradePlateItem item : items) { + for (int i = items.size() - 1; i >= 0; i--) { plateItem = new ArrayList<>(2); - BigDecimal price = item.getPrice(); - BigDecimal amount = item.getAmount(); + BigDecimal price = items.get(i).getPrice(); + BigDecimal amount = items.get(i).getAmount(); plateItem.add(price); plateItem.add(amount); plate.add(plateItem); @@ -560,8 +567,7 @@ tradePlateModel.setSell(plate); } - // 盘口发生变化通知TODO - + // 盘口发生变化通知 exchangeProducer.sendPlateMsg(JSON.toJSONString(tradePlateModel)); } @@ -571,7 +577,7 @@ * @param */ public String sendTradePlateMessage() { - //防止并发引起数组越界,造成盘口倒挂 TODO + //防止并发引起数组越界,造成盘口倒挂 List<List<BigDecimal>> plate; List<BigDecimal> plateItem; TradePlateModel tradePlateModel = new TradePlateModel(); @@ -579,10 +585,10 @@ if (buyTradePlate != null && buyTradePlate.getItems() != null) { plate = new ArrayList<>(); LinkedList<TradePlateItem> items = buyTradePlate.getItems(); - for (TradePlateItem item : items) { + for (int i = items.size() - 1; i >= 0; i--) { plateItem = new ArrayList<>(2); - BigDecimal price = item.getPrice(); - BigDecimal amount = item.getAmount(); + BigDecimal price = items.get(i).getPrice(); + BigDecimal amount = items.get(i).getAmount(); plateItem.add(price); plateItem.add(amount); plate.add(plateItem); @@ -593,10 +599,10 @@ if (sellTradePlate != null && sellTradePlate.getItems() != null) { plate = new ArrayList<>(); LinkedList<TradePlateItem> items = sellTradePlate.getItems(); - for (TradePlateItem item : items) { + for (int i = items.size() - 1; i >= 0; i--) { plateItem = new ArrayList<>(2); - BigDecimal price = item.getPrice(); - BigDecimal amount = item.getAmount(); + BigDecimal price = items.get(i).getPrice(); + BigDecimal amount = items.get(i).getAmount(); plateItem.add(price); plateItem.add(amount); plate.add(plateItem); @@ -604,9 +610,7 @@ tradePlateModel.setSell(plate); } - // 盘口发生变化通知TODO return JSON.toJSONString(tradePlateModel); - //exchangeProducer.sendPlateMsg(JSON.toJSONString(tradePlateModel)); } /** -- Gitblit v1.9.1