@Override public void onOrderBook(OrderBook orderBook, SessionID sessionId) { long now = System.currentTimeMillis(); log.info("order book time: {}, lagging: {} ms. bids size: {}, asks size: {}. best bid: {}@{}, best ask: {}@{}.", orderBook.getTimeStamp().toInstant(), mFmt.format(now - orderBook.getTimeStamp().getTime()), StringUtils.leftPad(String.valueOf(orderBook.getBids().size()), 3), StringUtils.leftPad(String.valueOf(orderBook.getAsks().size()), 3), StringUtils.leftPad(qFmt.format(orderBook.getBids().get(0).getTradableAmount()), 7), pFmt.format(orderBook.getBids().get(0).getLimitPrice()), StringUtils.leftPad(qFmt.format(orderBook.getAsks().get(0).getTradableAmount()), 7), pFmt.format(orderBook.getAsks().get(0).getLimitPrice()) ); }
public void getOpenOrders() throws IOException { OpenOrders openOrders = tradeService.getOpenOrders(); log.info("open orders: {}", openOrders); openOrders.getOpenOrders().stream().forEach( o -> log.info("{} {} {} {} {}@{}", o.getCurrencyPair(), o.getId(), o.getTimestamp(), o.getType(), o.getTradableAmount(), o.getLimitPrice())); }
@Override public void onOrderBook(OrderBook orderBook, SessionID sessionId) { log.info("asks: {}, bids: {}", orderBook.getAsks().size(), orderBook.getBids().size()); // bids should be sorted by limit price descending 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; } // asks should be sorted by limit price ascending 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())); } }
/** * {@inheritDoc} */ @Override public String placeLimitOrder(LimitOrder limitOrder) throws OKCoinException, IOException { long orderId = trade(OKCoinAdapters.adaptSymbol(limitOrder.getCurrencyPair()), limitOrder.getType() == OrderType.BID ? Type.BUY : Type.SELL, limitOrder.getLimitPrice(), limitOrder.getTradableAmount()) .getOrderId(); return String.valueOf(orderId); }
final BigDecimal tradeAmount = bid.getTradableAmount().min(ask.getTradableAmount()); log.trace("Trade {} bid@{} ask@{}", tradeAmount, bid.getTradableAmount(), bid.getCurrencyPair(), bid.getLimitPrice(), bid.getTimestamp(), bid.getTradableAmount().subtract(tradeAmount) ); final OrderBookUpdate askUpdate = new OrderBookUpdate( ask.getType(), ask.getTradableAmount(), ask.getCurrencyPair(), ask.getLimitPrice(), ask.getTimestamp(), ask.getTradableAmount().subtract(tradeAmount) );
OrderBookUpdate orderBookUpdate = new OrderBookUpdate( limitOrder.getType(), limitOrder.getTradableAmount(), limitOrder.getCurrencyPair(), limitOrder.getLimitPrice(),