@Override
public void onOrderBook(OrderBook orderBook, SessionID sessionId) {
log.info("asks: {}, bids: {}", orderBook.getAsks().size(), orderBook.getBids().size());
LimitOrder preOrder = null;
for (LimitOrder order : orderBook.getBids()) {
log.info("Bid: {}, {}", order.getLimitPrice(), order.getTradableAmount());
if (preOrder != null && preOrder.compareTo(order) >= 0) {
log.error("bids should be sorted by limit price descending");
}
preOrder = order;
}
preOrder = null;
for (LimitOrder order : orderBook.getAsks()) {
log.info("Ask: {}, {}", order.getLimitPrice(), order.getTradableAmount());
if (preOrder != null && preOrder.compareTo(order) >= 0) {
log.error("asks should be sorted by limit price ascending");
}
preOrder = order;
}
LimitOrder ask = orderBook.getAsks().get(0);
LimitOrder bid = orderBook.getBids().get(0);
log.info("lowest ask: {}, {}", ask.getLimitPrice(), ask.getTradableAmount());
log.info("highest bid: {}, {}", bid.getLimitPrice(), bid.getTradableAmount());
if (ask.getLimitPrice().compareTo(bid.getLimitPrice()) <= 0) {
throw new IllegalStateException(String.format("Lowest ask %s is not higher than the highest bid %s.",
ask.getLimitPrice(), bid.getLimitPrice()));
}
}