From f812dd42487c1ee47cb9bcbeed1f40779bbae6aa Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Thu, 15 Oct 2020 20:09:04 +0800
Subject: [PATCH] modify
---
src/main/java/com/xcong/excoin/trade/CoinTrader.java | 61 +++++++++++++++---------------
1 files changed, 30 insertions(+), 31 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..38de6e4 100644
--- a/src/main/java/com/xcong/excoin/trade/CoinTrader.java
+++ b/src/main/java/com/xcong/excoin/trade/CoinTrader.java
@@ -3,9 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity;
-import com.xcong.excoin.modules.coin.service.OrderCoinService;
import com.xcong.excoin.rabbit.producer.ExchangeProducer;
-import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,8 +35,7 @@
//是否暂停交易
private boolean tradingHalt = false;
private boolean ready = false;
- //交易对信息
- //private ExchangeCoinPublishType publishType;
+
private String clearTime;
private SimpleDateFormat dateTimeFormat;
@@ -140,9 +137,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;
@@ -254,7 +258,6 @@
while (iterator.hasNext()) {
OrderCoinsEntity matchOrder = iterator.next();
ExchangeTrade trade = processMatch(focusedOrder, matchOrder);
- logger.info(">>>>>" + trade);
if (trade != null) {
exchangeTrades.add(trade);
}
@@ -307,7 +310,7 @@
if (trade != null) {
exchangeTrades.add(trade);
}
- //判断匹配单是否完成 TODO
+ //判断匹配单是否完成
if (matchOrder.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_DONE) {
//当前匹配的订单完成交易,删除该订单
orderIterator.remove();
@@ -349,7 +352,7 @@
*/
private BigDecimal calculateTradedAmount(OrderCoinsEntity order, BigDecimal dealPrice) {
if (order.getOrderType() == OrderCoinsEntity.ORDERTYPE_BUY && order.getTradeType() == OrderCoinsEntity.TRADETYPE_MARKETPRICE) {
- //剩余成交量 TODO ?
+ //剩余成交量
// 委托量-成交量=剩余量
BigDecimal leftTurnover = order.getEntrustAmount().subtract(order.getDealAmount());
return leftTurnover.divide(dealPrice, coinScale, BigDecimal.ROUND_DOWN);
@@ -493,7 +496,6 @@
//orderCoinService.handleOrder(trades);
// kafkaTemplate.send("exchange-trade", JSON.toJSONString(trades));
}
- // 更新最新K线 TODO
}
}
@@ -512,11 +514,11 @@
for (int index = 0; index < size; index += maxSize) {
int length = (size - index) > maxSize ? maxSize : size - index;
List<OrderCoinsEntity> subOrders = orders.subList(index, index + length);
- // TODO 通知订单完成
- //kafkaTemplate.send("exchange-order-completed", JSON.toJSONString(subOrders));
+ // 通知订单完成
+ exchangeProducer.sendCompleteMsg(JSON.toJSONString(subOrders));
}
} else {
- // kafkaTemplate.send("exchange-order-completed", JSON.toJSONString(orders));
+ exchangeProducer.sendCompleteMsg(JSON.toJSONString(orders));
}
}
}
@@ -527,7 +529,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 +537,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 +551,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 +562,7 @@
tradePlateModel.setSell(plate);
}
- // 盘口发生变化通知TODO
-
+ // 盘口发生变化通知
exchangeProducer.sendPlateMsg(JSON.toJSONString(tradePlateModel));
}
@@ -571,7 +572,7 @@
* @param
*/
public String sendTradePlateMessage() {
- //防止并发引起数组越界,造成盘口倒挂 TODO
+ //防止并发引起数组越界,造成盘口倒挂
List<List<BigDecimal>> plate;
List<BigDecimal> plateItem;
TradePlateModel tradePlateModel = new TradePlateModel();
@@ -579,10 +580,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 +594,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 +605,7 @@
tradePlateModel.setSell(plate);
}
- // 盘口发生变化通知TODO
return JSON.toJSONString(tradePlateModel);
- //exchangeProducer.sendPlateMsg(JSON.toJSONString(tradePlateModel));
}
/**
--
Gitblit v1.9.1