package org.knowm.xchange.examples.okcoin.marketdata;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import org.knowm.xchange.Exchange;
import org.knowm.xchange.ExchangeFactory;
import org.knowm.xchange.ExchangeSpecification;
import org.knowm.xchange.currency.CurrencyPair;
import org.knowm.xchange.dto.Order.OrderType;
import org.knowm.xchange.dto.account.AccountInfo;
import org.knowm.xchange.dto.marketdata.Trades;
import org.knowm.xchange.dto.trade.LimitOrder;
import org.knowm.xchange.dto.trade.OpenOrders;
import org.knowm.xchange.okcoin.FuturesContract;
import org.knowm.xchange.okcoin.OkCoinAdapters;
import org.knowm.xchange.okcoin.OkCoinExchange;
import org.knowm.xchange.okcoin.dto.marketdata.OkCoinTrade;
import org.knowm.xchange.okcoin.dto.trade.OkCoinPosition;
import org.knowm.xchange.okcoin.dto.trade.OkCoinPositionResult;
import org.knowm.xchange.okcoin.service.OkCoinFuturesTradeService;
import org.knowm.xchange.okcoin.service.OkCoinMarketDataServiceRaw;
import org.knowm.xchange.service.account.AccountService;
import org.knowm.xchange.service.marketdata.MarketDataService;
public class OkCoinTradesDemo {
public static void main(String[] args) throws IOException {
ExchangeSpecification exSpec = new ExchangeSpecification(OkCoinExchange.class);
exSpec.setSecretKey("x");
exSpec.setApiKey("x");
// flag to set Use_Intl (USD) or China (default)
exSpec.setExchangeSpecificParametersItem("Use_Intl", true);
exSpec.setExchangeSpecificParametersItem("Use_Futures", false);
exSpec.setExchangeSpecificParametersItem("Futures_Contract", FuturesContract.ThisWeek);
Exchange okcoinExchange = ExchangeFactory.INSTANCE.createExchange(exSpec);
// futures(okcoinExchange);
generic(okcoinExchange);
raw(okcoinExchange);
}
private static void futures(Exchange okcoinExchange) throws IOException {
AccountService accountService = okcoinExchange.getAccountService();
AccountInfo accountInfo = accountService.getAccountInfo();
System.out.println(accountInfo);
OkCoinFuturesTradeService tradeService = (OkCoinFuturesTradeService) okcoinExchange.getTradeService();
OpenOrders openOrders = tradeService.getOpenOrders();
System.out.println(openOrders);
OkCoinPositionResult futuresPosition = tradeService.getFuturesPosition(OkCoinAdapters.adaptSymbol(CurrencyPair.BTC_USD),
FuturesContract.ThisWeek);
OkCoinPosition[] positions = futuresPosition.getPositions();
for (int i = 0; i < positions.length; i++) {
System.out.println(positions[i].getContractId());
}
String placeLimitOrder = tradeService
.placeLimitOrder(new LimitOrder(OrderType.BID, new BigDecimal("1"), CurrencyPair.BTC_USD, "0", new Date(), new BigDecimal("200")));
System.out.println(placeLimitOrder);
boolean cancelOrder = tradeService.cancelOrder(placeLimitOrder);
System.out.println("Cancelled " + cancelOrder);
}
private static void generic(Exchange okcoinExchange) throws IOException {
// Interested in the public market data feed (no authentication)
MarketDataService marketDataService = okcoinExchange.getMarketDataService();
// Get the latest trade data for BTC_CNY
Trades trades = marketDataService.getTrades(CurrencyPair.BTC_USD, FuturesContract.ThisWeek);
System.out.println(trades);
System.out.println("Trades(0): " + trades.getTrades().get(0).toString());
System.out.println("Trades size: " + trades.getTrades().size());
// Get the latest trades data for BTC_CNY for the past couple of trades
trades = marketDataService.getTrades(CurrencyPair.BTC_CNY, trades.getlastID() - 10);
System.out.println(trades);
System.out.println("Trades size: " + trades.getTrades().size());
}
private static void raw(Exchange okcoinExchange) throws IOException {
// Interested in the public market data feed (no authentication)
OkCoinMarketDataServiceRaw okCoinMarketDataServiceRaw = (OkCoinMarketDataServiceRaw) okcoinExchange.getMarketDataService();
// Get the latest trade data for BTC_USD
OkCoinTrade[] trades = okCoinMarketDataServiceRaw.getTrades(CurrencyPair.BTC_CNY);
System.out.println("Trades size: " + trades.length);
System.out.println("newest trade: " + trades[trades.length - 1].toString());
// Poll for any new trades since last id
trades = okCoinMarketDataServiceRaw.getTrades(CurrencyPair.BTC_CNY, trades[trades.length - 1].getTid() - 10);
for (int i = 0; i < trades.length; i++) {
OkCoinTrade okCoinTrade = trades[i];
System.out.println(okCoinTrade.toString());
}
System.out.println("Trades size: " + trades.length);
}
}