Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 51 additions & 11 deletions src/main/java/com/cleanengine/coin/orderbook/domain/OrderBook.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,38 +22,42 @@ public void updateOrderBookOnNewOrder(boolean isBuyOrder, Double price, Double o
if(isBuyOrder){
BuyOrderBookUnit buyOrderBookUnit = buyOrderBookUnitMap.get(price);
if(buyOrderBookUnit == null){
buyOrderBookUnit = new BuyOrderBookUnit(price, orderSize);
buyOrderBookUnitMap.put(price, buyOrderBookUnit);
buyOrderBookUnitListSet.add(buyOrderBookUnit);
addBuyOrderBookUnit(price, orderSize);
} else {
buyOrderBookUnit.addOrder(orderSize);
}
} else {
SellOrderBookUnit sellOrderBookUnit = sellOrderBookUnitMap.get(price);
if(sellOrderBookUnit == null){
sellOrderBookUnit = new SellOrderBookUnit(price, orderSize);
sellOrderBookUnitMap.put(price, sellOrderBookUnit);
sellOrderBookUnitListSet.add(sellOrderBookUnit);
addSellOrderBookUnit(price, orderSize);
} else {
sellOrderBookUnit.addOrder(orderSize);
}
}
}

public void updateOrderBookOnTradeExecuted(boolean isBuyOrder, Double price, Double orderSize) {
if(isBuyOrder){
if(approxEquals(orderSize, 0.0) || approxEquals(price, 0.0)){
throw new IllegalArgumentException("orderSize or price cannot be 0.0");
}

if(isBuyOrder) {
BuyOrderBookUnit buyOrderBookUnit = buyOrderBookUnitMap.get(price);
if(buyOrderBookUnit == null) {
return;
}
buyOrderBookUnit.executeTrade(orderSize);
if(approxEquals(buyOrderBookUnit.getSize(), 0.0)){
buyOrderBookUnitMap.remove(price);
buyOrderBookUnitListSet.remove(buyOrderBookUnit);
removeBuyOrderBookUnit(buyOrderBookUnit, price);
}
} else {
SellOrderBookUnit sellOrderBookUnit = sellOrderBookUnitMap.get(price);
if(sellOrderBookUnit == null) {
return;
}
sellOrderBookUnit.executeTrade(orderSize);
if(approxEquals(sellOrderBookUnit.getSize(), 0.0)){
sellOrderBookUnitMap.remove(price);
sellOrderBookUnitListSet.remove(sellOrderBookUnit);
removeSellOrderBookUnit(sellOrderBookUnit, price);
}
}
}
Expand All @@ -71,4 +75,40 @@ public List<OrderBookUnit> getSellOrderBookList(int size){
.limit(size)
.collect(Collectors.toList());
}

protected synchronized void addBuyOrderBookUnit(Double price, Double size) {
BuyOrderBookUnit buyOrderBookUnit = buyOrderBookUnitMap.get(price);
if(buyOrderBookUnit != null){
return;
}

buyOrderBookUnit = new BuyOrderBookUnit(price, size);
buyOrderBookUnitMap.put(price, buyOrderBookUnit);
buyOrderBookUnitListSet.add(buyOrderBookUnit);
}

protected synchronized void addSellOrderBookUnit(Double price, Double size) {
SellOrderBookUnit sellOrderBookUnit = sellOrderBookUnitMap.get(price);
if(sellOrderBookUnit != null){
return;
}

sellOrderBookUnit = new SellOrderBookUnit(price, size);
sellOrderBookUnitMap.put(price, sellOrderBookUnit);
sellOrderBookUnitListSet.add(sellOrderBookUnit);
}

protected synchronized void removeBuyOrderBookUnit(BuyOrderBookUnit buyOrderBookUnit, Double price) {
if(approxEquals(buyOrderBookUnit.getSize(), 0.0)) {
buyOrderBookUnitMap.remove(price);
buyOrderBookUnitListSet.remove(buyOrderBookUnitMap.get(price));
}
}

protected synchronized void removeSellOrderBookUnit(SellOrderBookUnit sellOrderBookUnit, Double price) {
if(approxEquals(sellOrderBookUnit.getSize(), 0.0)) {
sellOrderBookUnitMap.remove(price);
sellOrderBookUnitListSet.remove(sellOrderBookUnitMap.get(price));
}
}
}
Loading