package org.knowm.xchange.examples.ccex.marketdata; import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.knowm.xchart.SwingWrapper; import org.knowm.xchart.XYChart; import org.knowm.xchart.XYChartBuilder; import org.knowm.xchart.XYSeries; import org.knowm.xchart.XYSeries.XYSeriesRenderStyle; import org.knowm.xchart.style.markers.SeriesMarkers; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeFactory; import org.knowm.xchange.ccex.CCEXExchange; import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.marketdata.OrderBook; import org.knowm.xchange.dto.trade.LimitOrder; import org.knowm.xchange.service.marketdata.MarketDataService; /** * Demonstrate requesting OrderBook from C-CEX and plotting it using XChart. */ public class DepthChartDemo { public static void main(String[] args) throws IOException { // Use the factory to get the version 1 Bitstamp exchange API using default settings Exchange ccexExchange = ExchangeFactory.INSTANCE.createExchange(CCEXExchange.class.getName()); // Interested in the public market data feed (no authentication) MarketDataService marketDataService = ccexExchange.getMarketDataService(); System.out.println("fetching data..."); // Get the current orderbook OrderBook orderBook = marketDataService.getOrderBook(CurrencyPair.XAUR_BTC); System.out.println("received data."); for (LimitOrder limitOrder : orderBook.getBids()) { System.out.println(limitOrder.getType() + " " + limitOrder.getCurrencyPair() + " Limit price: " + limitOrder.getLimitPrice() + " Amount: " + limitOrder.getTradableAmount()); } for (LimitOrder limitOrder : orderBook.getAsks()) { System.out.println(limitOrder.getType() + " " + limitOrder.getCurrencyPair() + " Limit price: " + limitOrder.getLimitPrice() + " Amount: " + limitOrder.getTradableAmount()); } System.out.println("plotting..."); // Create Chart XYChart chart = new XYChartBuilder().width(800).height(600).title("C-CEX Order Book - Xaurum").xAxisTitle("BTC").yAxisTitle("Amount").build(); // Customize Chart chart.getStyler().setDefaultSeriesRenderStyle(XYSeriesRenderStyle.Area); // BIDS List<Number> xData = new ArrayList<Number>(); List<Number> yData = new ArrayList<Number>(); BigDecimal accumulatedBidUnits = new BigDecimal("0"); for (LimitOrder limitOrder : orderBook.getBids()) { xData.add(limitOrder.getLimitPrice()); accumulatedBidUnits = accumulatedBidUnits.add(limitOrder.getTradableAmount()); yData.add(accumulatedBidUnits); } Collections.reverse(xData); Collections.reverse(yData); // Bids Series XYSeries series = chart.addSeries("bids", xData, yData); series.setMarker(SeriesMarkers.NONE); // ASKS xData = new ArrayList<Number>(); yData = new ArrayList<Number>(); BigDecimal accumulatedAskUnits = new BigDecimal("0"); for (LimitOrder limitOrder : orderBook.getAsks()) { xData.add(limitOrder.getLimitPrice()); accumulatedAskUnits = accumulatedAskUnits.add(limitOrder.getTradableAmount()); yData.add(accumulatedAskUnits); } // Asks Series series = chart.addSeries("asks", xData, yData); series.setMarker(SeriesMarkers.NONE); new SwingWrapper(chart).displayChart(); } }