Skip to content

Commit 9838505

Browse files
authored
Merge pull request #2235 from odrotleff/develop
[Kucoin] add Kucoin exchange
2 parents f008906 + abd531e commit 9838505

File tree

62 files changed

+6491
-932
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+6491
-932
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.knowm.xchange.service.trade.params;
2+
3+
import org.knowm.xchange.dto.Order.OrderType;
4+
5+
public interface CancelOrderByOrderTypeParams extends CancelOrderParams {
6+
OrderType getOrderType();
7+
}

xchange-examples/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,11 @@
352352
<artifactId>xchange-koineks</artifactId>
353353
<version>${project.version}</version>
354354
</dependency>
355+
<dependency>
356+
<groupId>${project.groupId}</groupId>
357+
<artifactId>xchange-kucoin</artifactId>
358+
<version>${project.version}</version>
359+
</dependency>
355360
<dependency>
356361
<groupId>${project.groupId}</groupId>
357362
<artifactId>xchange-gateio</artifactId>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.knowm.xchange.examples.kucoin;
2+
3+
import org.knowm.xchange.Exchange;
4+
import org.knowm.xchange.ExchangeFactory;
5+
import org.knowm.xchange.ExchangeSpecification;
6+
import org.knowm.xchange.kucoin.KucoinExchange;
7+
8+
public class KucoinExamplesUtils {
9+
10+
public static Exchange getExchange() {
11+
12+
ExchangeSpecification exSpec = new ExchangeSpecification(KucoinExchange.class);
13+
exSpec.setApiKey("your-api-key");
14+
exSpec.setSecretKey("your-secret-key");
15+
16+
return ExchangeFactory.INSTANCE.createExchange(exSpec);
17+
}
18+
19+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.knowm.xchange.examples.kucoin.account;
2+
3+
import java.io.IOException;
4+
import java.util.Map;
5+
6+
import org.knowm.xchange.Exchange;
7+
import org.knowm.xchange.currency.Currency;
8+
import org.knowm.xchange.dto.account.Balance;
9+
import org.knowm.xchange.examples.kucoin.KucoinExamplesUtils;
10+
import org.knowm.xchange.kucoin.dto.KucoinResponse;
11+
import org.knowm.xchange.kucoin.dto.KucoinSimpleResponse;
12+
import org.knowm.xchange.kucoin.dto.account.KucoinCoinBalances;
13+
import org.knowm.xchange.kucoin.dto.account.KucoinDepositAddress;
14+
import org.knowm.xchange.kucoin.service.KucoinAccountServiceRaw;
15+
import org.knowm.xchange.service.account.AccountService;
16+
17+
public class KucoinAccountDemo {
18+
19+
public static void main(String[] args) throws IOException {
20+
21+
Exchange exchange = KucoinExamplesUtils.getExchange();
22+
23+
AccountService accountService = exchange.getAccountService();
24+
25+
generic(accountService);
26+
raw((KucoinAccountServiceRaw) accountService);
27+
}
28+
29+
private static void generic(AccountService accountService) throws IOException {
30+
31+
System.out.println("----------GENERIC---------");
32+
33+
Map<Currency, Balance> balances = accountService.getAccountInfo().getWallet().getBalances();
34+
System.out.println(balances);
35+
36+
System.out.println(accountService.requestDepositAddress(Currency.BTC));
37+
38+
}
39+
40+
private static void raw(KucoinAccountServiceRaw accountService) throws IOException {
41+
42+
System.out.println("------------RAW-----------");
43+
44+
KucoinSimpleResponse<KucoinCoinBalances> responseBalances = accountService.getKucoinBalances(20, 1);
45+
System.out.println(responseBalances.getData());
46+
47+
KucoinResponse<KucoinDepositAddress> responseAddress = accountService.getKucoinDepositAddress(Currency.BTC);
48+
System.out.println(responseAddress.getData().getAddress());
49+
}
50+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.knowm.xchange.examples.kucoin.marketdata;
2+
3+
import java.io.IOException;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
import org.knowm.xchange.Exchange;
8+
import org.knowm.xchange.ExchangeFactory;
9+
import org.knowm.xchange.currency.CurrencyPair;
10+
import org.knowm.xchange.dto.marketdata.OrderBook;
11+
import org.knowm.xchange.dto.marketdata.Ticker;
12+
import org.knowm.xchange.dto.marketdata.Trades;
13+
import org.knowm.xchange.kucoin.KucoinExchange;
14+
import org.knowm.xchange.kucoin.dto.KucoinResponse;
15+
import org.knowm.xchange.kucoin.dto.marketdata.KucoinCoin;
16+
import org.knowm.xchange.kucoin.dto.marketdata.KucoinDealOrder;
17+
import org.knowm.xchange.kucoin.dto.marketdata.KucoinOrderBook;
18+
import org.knowm.xchange.kucoin.dto.marketdata.KucoinTicker;
19+
import org.knowm.xchange.kucoin.service.KucoinMarketDataServiceRaw;
20+
import org.knowm.xchange.service.marketdata.MarketDataService;
21+
22+
public class KucoinMarketDataDemo {
23+
24+
private static final CurrencyPair PAIR = CurrencyPair.ETH_BTC;
25+
static Exchange exchange;
26+
27+
public static void main(String[] args) throws IOException {
28+
29+
exchange = ExchangeFactory.INSTANCE.createExchange(KucoinExchange.class.getName());
30+
MarketDataService marketDataService = exchange.getMarketDataService();
31+
32+
System.out.println(Arrays.toString(exchange.getExchangeSymbols().toArray()));
33+
34+
generic(marketDataService);
35+
raw((KucoinMarketDataServiceRaw) marketDataService);
36+
37+
}
38+
39+
private static void generic(MarketDataService marketDataService) throws IOException {
40+
41+
System.out.println("----------GENERIC---------");
42+
43+
System.out.println("Market data for " + PAIR + ":");
44+
Ticker ticker = marketDataService.getTicker(PAIR);
45+
System.out.println(ticker);
46+
47+
OrderBook orderBook = marketDataService.getOrderBook(PAIR);
48+
System.out.println(orderBook);
49+
50+
Trades trades = marketDataService.getTrades(PAIR);
51+
System.out.println(trades);
52+
}
53+
54+
private static void raw(KucoinMarketDataServiceRaw marketDataService) throws IOException {
55+
56+
System.out.println("------------RAW-----------");
57+
58+
KucoinResponse<KucoinTicker> tickerResponse = marketDataService.getKucoinTicker(PAIR);
59+
System.out.println(tickerResponse.getData());
60+
61+
KucoinResponse<List<KucoinTicker>> tickersResponse = marketDataService.getKucoinTickers();
62+
System.out.println(tickersResponse.getData());
63+
64+
KucoinResponse<KucoinOrderBook> orderBookResponse = marketDataService.getKucoinOrderBook(PAIR, 10);
65+
System.out.println(orderBookResponse.getData());
66+
67+
KucoinResponse<List<KucoinDealOrder>> tradesResponse = marketDataService.getKucoinTrades(PAIR, 10, null);
68+
System.out.println(Arrays.asList(tradesResponse.getData()));
69+
70+
KucoinResponse<List<KucoinCoin>> currenciesResponse = marketDataService.getKucoinCurrencies();
71+
System.out.println(currenciesResponse.getData());
72+
}
73+
}

xchange-examples/src/main/java/org/knowm/xchange/examples/kucoin/marketdata/KucoinMarketDataRawSpecific.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

xchange-examples/src/main/java/org/knowm/xchange/examples/kucoin/marketdata/KucoinTickerDemo.java

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package org.knowm.xchange.examples.kucoin.trade;
2+
3+
import java.io.IOException;
4+
import java.math.BigDecimal;
5+
6+
import org.knowm.xchange.Exchange;
7+
import org.knowm.xchange.currency.CurrencyPair;
8+
import org.knowm.xchange.dto.Order.OrderType;
9+
import org.knowm.xchange.dto.trade.LimitOrder;
10+
import org.knowm.xchange.examples.kucoin.KucoinExamplesUtils;
11+
import org.knowm.xchange.kucoin.dto.KucoinResponse;
12+
import org.knowm.xchange.kucoin.dto.trading.KucoinOrder;
13+
import org.knowm.xchange.kucoin.service.KucoinCancelOrderParams;
14+
import org.knowm.xchange.kucoin.service.KucoinTradeServiceRaw;
15+
import org.knowm.xchange.service.trade.TradeService;
16+
import org.knowm.xchange.service.trade.params.CancelOrderParams;
17+
import org.knowm.xchange.service.trade.params.orders.DefaultOpenOrdersParamCurrencyPair;
18+
19+
public class KucoinTradeDemo {
20+
21+
private static final CurrencyPair PAIR = new CurrencyPair("DRGN", "BTC");
22+
private static final OrderType ORDER_TYPE = OrderType.ASK;
23+
24+
public static void main(String[] args) throws IOException {
25+
26+
Exchange exchange = KucoinExamplesUtils.getExchange();
27+
28+
TradeService tradeService = exchange.getTradeService();
29+
30+
generic(tradeService);
31+
raw((KucoinTradeServiceRaw) tradeService);
32+
33+
}
34+
35+
private static void generic(TradeService tradeService) throws IOException {
36+
37+
LimitOrder limitOrder = new LimitOrder.Builder(ORDER_TYPE, PAIR).limitPrice(new BigDecimal("100.0")).originalAmount(new BigDecimal("1"))
38+
.build();
39+
40+
try {
41+
String uuid = tradeService.placeLimitOrder(limitOrder);
42+
System.out.println("Order successfully placed. ID=" + uuid);
43+
44+
Thread.sleep(7000); // wait for order to propagate
45+
46+
System.out.println();
47+
DefaultOpenOrdersParamCurrencyPair orderParams = (DefaultOpenOrdersParamCurrencyPair) tradeService.createOpenOrdersParams();
48+
orderParams.setCurrencyPair(PAIR);
49+
System.out.println(tradeService.getOpenOrders(orderParams));
50+
51+
System.out.println("Attempting to cancel order " + uuid);
52+
CancelOrderParams cancelParams = new KucoinCancelOrderParams(PAIR, uuid, ORDER_TYPE);
53+
boolean cancelled = tradeService.cancelOrder(cancelParams);
54+
55+
if (cancelled) {
56+
System.out.println("Order successfully canceled.");
57+
} else {
58+
System.out.println("Order not successfully canceled.");
59+
}
60+
61+
Thread.sleep(7000); // wait for cancellation to propagate
62+
63+
System.out.println();
64+
System.out.println(tradeService.getOpenOrders(orderParams));
65+
66+
} catch (Exception e) {
67+
e.printStackTrace();
68+
}
69+
}
70+
71+
private static void raw(KucoinTradeServiceRaw tradeService) throws IOException {
72+
73+
LimitOrder limitOrder = new LimitOrder.Builder(ORDER_TYPE, PAIR).limitPrice(new BigDecimal("100")).originalAmount(new BigDecimal("1"))
74+
.build();
75+
76+
try {
77+
KucoinResponse<KucoinOrder> limitOrderResponse = tradeService.placeKucoinLimitOrder(limitOrder);
78+
String orderId = limitOrderResponse.getData().getOrderOid();
79+
System.out.println("Order successfully placed. ID=" + orderId);
80+
81+
Thread.sleep(7000); // wait for order to propagate
82+
83+
System.out.println();
84+
System.out.println(tradeService.getKucoinOpenOrders(PAIR, null));
85+
86+
System.out.println("Attempting to cancel order " + orderId);
87+
KucoinResponse<KucoinOrder> cancelResponse = tradeService.cancelKucoinOrder(PAIR, orderId, ORDER_TYPE);
88+
89+
if (cancelResponse.isSuccess()) {
90+
System.out.println("Order successfully canceled.");
91+
} else {
92+
System.out.println("Order not successfully canceled.");
93+
}
94+
95+
Thread.sleep(7000); // wait for cancellation to propagate
96+
97+
System.out.println();
98+
System.out.println(tradeService.getKucoinOpenOrders(PAIR, null));
99+
100+
} catch (Exception e) {
101+
e.printStackTrace();
102+
}
103+
}
104+
}

xchange-kucoin/api-specification.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
Kucoin Exchange API specification
22
================================
33

4-
https://kucoinapidocs.docs.apiary.io/
4+
Documentation
5+
-------------
6+
https://kucoinapidocs.docs.apiary.io/#introduction/language-parameters

0 commit comments

Comments
 (0)