public static LimitOrder adaptOrder( DVChainLevel level, Order.OrderType type, CurrencyPair currencyPair) { BigDecimal price = null; if (type == Order.OrderType.BID) { price = level.getBuyPrice(); } else { price = level.getSellPrice(); } return new LimitOrder(type, level.getMaxQuantity(), currencyPair, "-1", null, price); }
private static void raw(DVChainMarketDataServiceRaw marketDataService) throws IOException { // Get the latest order book data for BTC/CAD DVChainMarketResponse orderBook = marketDataService.getMarketData(); DVChainMarketData btcMarketData = orderBook.getMarketData().get("BTC"); System.out.println( "Current Order Book size for BTC / USD: " + (btcMarketData.getLevels().size())); System.out.println("First Ask: " + btcMarketData.getLevels().get(0).getBuyPrice().toString()); System.out.println("First Bid: " + btcMarketData.getLevels().get(0).getSellPrice().toString()); System.out.println(orderBook.toString()); } }
@Override public OrderBook getOrderBook(CurrencyPair currencyPair, Object... args) throws IOException, RateLimitExceededException { DVChainMarketResponse marketResponse = getMarketData(); DVChainMarketData marketData = marketResponse.getMarketData().get(currencyPair.base.getSymbol()); return DVChainAdapters.adaptOrderBook(marketData, marketData.getExpiresAt(), currencyPair); } }
@Override public String placeMarketOrder(MarketOrder marketOrder) throws IOException { DVChainMarketResponse marketResponse = marketDataService.getMarketData(); DVChainMarketData marketData = marketResponse.getMarketData().get(marketOrder.getCurrencyPair().base.getSymbol()); List<DVChainLevel> levels = marketData.getLevels(); String side = marketOrder.getType() == Order.OrderType.BID ? "Buy" : "Sell"; DVChainNewMarketOrder dvChainNewMarketOrder = new DVChainNewMarketOrder( side, getPriceForMarketOrder(levels, marketOrder), marketOrder.getOriginalAmount(), marketOrder.getCurrencyPair().base.getSymbol()); return newDVChainMarketOrder(dvChainNewMarketOrder).toString(); }
public static OrderBook adaptOrderBook( DVChainMarketData marketData, Long time, CurrencyPair currencyPair) { Date timeStamp = Date.from(Instant.ofEpochMilli(time)); List<LimitOrder> asks = marketData .getLevels() .stream() .map(level -> adaptOrder(level, Order.OrderType.ASK, currencyPair)) .collect(Collectors.toList()); List<LimitOrder> bids = marketData .getLevels() .stream() .map(level -> adaptOrder(level, Order.OrderType.BID, currencyPair)) .collect(Collectors.toList()); return new OrderBook(timeStamp, asks, bids); }
private BigDecimal getPriceForMarketOrder(List<DVChainLevel> levels, MarketOrder marketOrder) { BigDecimal quantity = marketOrder.getOriginalAmount(); for (DVChainLevel level : levels) { if (quantity.compareTo(level.getMaxQuantity()) <= 0) { return marketOrder.getType() == Order.OrderType.BID ? level.getBuyPrice() : level.getSellPrice(); } } throw new FundsExceededException(); }