├── README.md ├── pom.xml └── src └── main └── java ├── GetAccount.java ├── GetExchangeInfo.java ├── MarketData.java ├── Order.java ├── PlaceOrder.java ├── PlaceOrderTestNet.java ├── PrivateConfig.java ├── UserDataStream.java └── Wallet.java /README.md: -------------------------------------------------------------------------------- 1 | # Binance Toolbox in Java 2 | 3 | A collection of Java examples that connects to the Binance API endpoints based on `binance-connector-java`. 4 | 5 | - Github repository: https://github.com/binance/binance-connector-java 6 | - Maven repository: https://repo1.maven.org/maven2/io/github/binance/binance-connector-java/ 7 | - Javadoc: https://www.javadoc.io/doc/io.github.binance/binance-connector-java/latest/index.html 8 | 9 | Uses `binance-logback` for the logging. 10 | 11 | ## Installation 12 | 13 | Replace `LATEST_VERSION` with the latest version number and paste the snippet below in `pom.xml` 14 | ``` 15 | 16 | io.github.binance 17 | binance-connector-java 18 | LATEST_VERSION 19 | 20 | ``` 21 | Run `mvn install` where `pom.xml` is located to install the dependency. 22 | 23 | ## Running a java file 24 | 25 | `mvn compile exec:java -Dexec.mainClass=""` 26 | 27 | ## API key & secret 28 | 29 | To get user's information, e.g account balance, you will need to setup API key/secret from 30 | 31 | Production: https://www.binance.com/en/my/settings/api-management 32 |
33 | Testnet: https://testnet.binance.vision/ 34 | 35 | 36 | Fill up the API/Secret key parameters in `PrivateConfig.java` 37 | 38 | If you see API server returns error "Invalid API-key, IP, or permissions for action.", please check this topic https://dev.binance.vision/t/why-do-i-see-this-error-invalid-api-key-ip-or-permissions-for-action/93
39 | This forum has plenty of topics covering most of common questions, it's the best place to ask or search API related questions. 40 | 41 | ## License 42 | 43 | MIT -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.example 8 | binance-toolbox-java 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 8 13 | 8 14 | 15 | 16 | 17 | io.github.binance 18 | binance-connector-java 19 | 2.0.0rc2 20 | 21 | 22 | io.github.binance 23 | binance-logback 24 | 1.0.0 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/main/java/GetAccount.java: -------------------------------------------------------------------------------- 1 | import com.binance.connector.client.exceptions.BinanceClientException; 2 | import com.binance.connector.client.exceptions.BinanceConnectorException; 3 | import com.binance.connector.client.impl.SpotClientImpl; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import java.util.LinkedHashMap; 8 | 9 | public class GetAccount { 10 | private static final Logger logger = LoggerFactory.getLogger(GetAccount.class); 11 | public static void main(String[] args) { 12 | LinkedHashMap parameters = new LinkedHashMap<>(); 13 | 14 | SpotClientImpl client = new SpotClientImpl(PrivateConfig.API_KEY, PrivateConfig.SECRET_KEY); 15 | 16 | try { 17 | String result = client.createTrade().account(parameters); 18 | logger.info(result); 19 | } 20 | catch (BinanceConnectorException e) { 21 | logger.error("fullErrMessage: {}", e.getMessage(), e); 22 | } 23 | catch (BinanceClientException e) { 24 | logger.error("fullErrMessage: {} \nerrMessage: {} \nerrCode: {} \nHTTPStatusCode: {}", 25 | e.getMessage(), e.getErrMsg(), e.getErrorCode(), e.getHttpStatusCode(), e); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/GetExchangeInfo.java: -------------------------------------------------------------------------------- 1 | import com.binance.connector.client.impl.SpotClientImpl; 2 | import com.binance.connector.client.impl.spot.Market; 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.ArrayList; 7 | import java.util.LinkedHashMap; 8 | 9 | public class GetExchangeInfo { 10 | private static final Logger logger = LoggerFactory.getLogger(GetExchangeInfo.class); 11 | public static void main(String[] args) { 12 | SpotClientImpl client = new SpotClientImpl(); 13 | Market market = client.createMarket(); 14 | LinkedHashMap parameters = new LinkedHashMap<>(); 15 | 16 | //Get all symbols 17 | String result = market.exchangeInfo(parameters); 18 | logger.info(result); 19 | 20 | //Get a single symbol 21 | parameters.put("symbol","BTCUSDT"); 22 | result = market.exchangeInfo(parameters); 23 | logger.info(result); 24 | parameters.clear(); 25 | 26 | //Get multiple symbols 27 | ArrayList symbols = new ArrayList<>(); 28 | symbols.add("BTCUSDT"); 29 | symbols.add("BNBUSDT"); 30 | parameters.put("symbols", symbols); 31 | result = market.exchangeInfo(parameters); 32 | logger.info(result); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/MarketData.java: -------------------------------------------------------------------------------- 1 | import com.binance.connector.client.impl.SpotClientImpl; 2 | import org.slf4j.Logger; 3 | import org.slf4j.LoggerFactory; 4 | 5 | import java.util.LinkedHashMap; 6 | 7 | /** 8 | * Example on how to get market data - klines, aggTrades and trades. 9 | */ 10 | 11 | public class MarketData { 12 | private static final Logger logger = LoggerFactory.getLogger(MarketData.class); 13 | private static final SpotClientImpl client = new SpotClientImpl(); 14 | 15 | public static void getKlines() { 16 | LinkedHashMap parameters = new LinkedHashMap<>(); 17 | parameters.put("symbol","BNBUSDT"); 18 | parameters.put("interval", "1m"); 19 | 20 | String result = client.createMarket().klines(parameters); 21 | logger.info(result); 22 | } 23 | 24 | public static void getAggTrades() { 25 | LinkedHashMap parameters = new LinkedHashMap<>(); 26 | parameters.put("symbol","BNBUSDT"); 27 | 28 | String result = client.createMarket().aggTrades(parameters); 29 | logger.info(result); 30 | } 31 | 32 | public static void getTrades() { 33 | LinkedHashMap parameters = new LinkedHashMap<>(); 34 | parameters.put("symbol","BNBUSDT"); 35 | 36 | String result = client.createMarket().trades(parameters); 37 | logger.info(result); 38 | } 39 | 40 | public static void main(String[] args) { 41 | getKlines(); 42 | getAggTrades(); 43 | getTrades(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/Order.java: -------------------------------------------------------------------------------- 1 | import com.binance.connector.client.exceptions.BinanceClientException; 2 | import com.binance.connector.client.exceptions.BinanceConnectorException; 3 | import com.binance.connector.client.impl.SpotClientImpl; 4 | import org.json.JSONException; 5 | import org.json.JSONObject; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * Example on how to place an order, get the order and cancel the order. 13 | */ 14 | 15 | public class Order { 16 | private static final Logger logger = LoggerFactory.getLogger(Order.class); 17 | 18 | //For production environment, uncomment the line below. 19 | //private static final SpotClientImpl client = new SpotClientImpl(PrivateConfig.API_KEY, PrivateConfig.SECRET_KEY); 20 | private static final SpotClientImpl client = new SpotClientImpl(PrivateConfig.TESTNET_API_KEY, PrivateConfig.TESTNET_SECRET_KEY, PrivateConfig.BASE_URL); 21 | 22 | public static int placeOrder() { 23 | LinkedHashMap parameters = new LinkedHashMap<>(); 24 | parameters.put("symbol", "BTCUSDT"); 25 | parameters.put("side", "BUY"); 26 | parameters.put("type", "LIMIT"); 27 | parameters.put("timeInForce", "GTC"); 28 | parameters.put("quantity", 0.001); 29 | parameters.put("price", 10000); 30 | 31 | String result = client.createTrade().newOrder(parameters); 32 | logger.info(result); 33 | 34 | JSONObject jsonObject = new JSONObject(result); 35 | parameters.clear(); 36 | return jsonObject.getInt("orderId"); 37 | } 38 | 39 | public static void getOrder(int orderId) { 40 | LinkedHashMap parameters = new LinkedHashMap<>(); 41 | parameters.put("symbol","BTCUSDT"); 42 | parameters.put("orderId", orderId); 43 | 44 | String result = client.createTrade().getOrder(parameters); 45 | logger.info(result); 46 | parameters.clear(); 47 | } 48 | 49 | public static void cancelOrder(int orderId) { 50 | LinkedHashMap parameters = new LinkedHashMap<>(); 51 | parameters.put("symbol","BTCUSDT"); 52 | parameters.put("orderId", orderId); 53 | 54 | String result = client.createTrade().cancelOrder(parameters); 55 | logger.info(result); 56 | parameters.clear(); 57 | } 58 | 59 | public static void main(String[] args) { 60 | 61 | try { 62 | int orderId = placeOrder(); 63 | getOrder(orderId); 64 | cancelOrder(orderId); 65 | 66 | } catch (BinanceConnectorException e) { 67 | logger.error("fullErrMessage: {}", e.getMessage(), e); 68 | } catch (BinanceClientException e) { 69 | logger.error("fullErrMessage: {} \nerrMessage: {} \nerrCode: {} \nHTTPStatusCode: {}", 70 | e.getMessage(), e.getErrMsg(), e.getErrorCode(), e.getHttpStatusCode(), e); 71 | } catch (JSONException err) { 72 | logger.error(err.toString()); 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/java/PlaceOrder.java: -------------------------------------------------------------------------------- 1 | import com.binance.connector.client.exceptions.BinanceClientException; 2 | import com.binance.connector.client.exceptions.BinanceConnectorException; 3 | import com.binance.connector.client.impl.SpotClientImpl; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import java.util.LinkedHashMap; 8 | 9 | public class PlaceOrder { 10 | private static final Logger logger = LoggerFactory.getLogger(PlaceOrder.class); 11 | 12 | public static void main(String[] args) { 13 | LinkedHashMap parameters = new LinkedHashMap<>(); 14 | 15 | SpotClientImpl client = new SpotClientImpl(PrivateConfig.API_KEY, PrivateConfig.SECRET_KEY); 16 | 17 | parameters.put("symbol", "BTCUSDT"); 18 | parameters.put("side", "BUY"); 19 | parameters.put("type", "LIMIT"); 20 | parameters.put("timeInForce", "GTC"); 21 | parameters.put("quantity", 0.001); 22 | parameters.put("price", 50000); 23 | 24 | try { 25 | String result = client.createTrade().testNewOrder(parameters); 26 | logger.info(result); 27 | } catch (BinanceConnectorException e) { 28 | logger.error("fullErrMessage: {}", e.getMessage(), e); 29 | } catch (BinanceClientException e) { 30 | logger.error("fullErrMessage: {} \nerrMessage: {} \nerrCode: {} \nHTTPStatusCode: {}", 31 | e.getMessage(), e.getErrMsg(), e.getErrorCode(), e.getHttpStatusCode(), e); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/PlaceOrderTestNet.java: -------------------------------------------------------------------------------- 1 | import com.binance.connector.client.exceptions.BinanceClientException; 2 | import com.binance.connector.client.exceptions.BinanceConnectorException; 3 | import com.binance.connector.client.impl.SpotClientImpl; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import java.util.LinkedHashMap; 8 | 9 | 10 | public class PlaceOrderTestNet { 11 | private static final Logger logger = LoggerFactory.getLogger(PlaceOrderTestNet.class); 12 | 13 | public static void main(String[] args) { 14 | LinkedHashMap parameters = new LinkedHashMap<>(); 15 | 16 | SpotClientImpl client = new SpotClientImpl(PrivateConfig.TESTNET_API_KEY, PrivateConfig.TESTNET_SECRET_KEY, PrivateConfig.BASE_URL); 17 | 18 | parameters.put("symbol", "BTCUSDT"); 19 | parameters.put("side", "BUY"); 20 | parameters.put("type", "LIMIT"); 21 | parameters.put("timeInForce", "GTC"); 22 | parameters.put("quantity", 0.001); 23 | parameters.put("price", 50000); 24 | 25 | try { 26 | String result = client.createTrade().newOrder(parameters); 27 | logger.info(result); 28 | } catch (BinanceConnectorException e) { 29 | logger.error("fullErrMessage: {}", e.getMessage(), e); 30 | } catch (BinanceClientException e) { 31 | logger.error("fullErrMessage: {} \nerrMessage: {} \nerrCode: {} \nHTTPStatusCode: {}", 32 | e.getMessage(), e.getErrMsg(), e.getErrorCode(), e.getHttpStatusCode(), e); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/PrivateConfig.java: -------------------------------------------------------------------------------- 1 | public class PrivateConfig { 2 | public static final String API_KEY = "HgqYVs88y09aQkLfLpkI0Ag0eCefl5X1R8D1QQVudrKcLP7jwjRQDf49R8GeCbs3"; 3 | public static final String SECRET_KEY = "ozGtlLjBTYcuyLRw2hZCh3PnAk1L828vR3qsWaFDFLeW4ffCfY3LWxlzYm9FxsZ9"; 4 | public static final String BASE_URL = "https://testnet.binance.vision"; 5 | public static final String TESTNET_API_KEY = ""; 6 | public static final String TESTNET_SECRET_KEY = ""; 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/UserDataStream.java: -------------------------------------------------------------------------------- 1 | import com.binance.connector.client.impl.SpotClientImpl; 2 | import com.binance.connector.client.impl.WebsocketStreamClientImpl; 3 | import org.json.JSONObject; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | /** 8 | * Getting listenkey and establing a user data stream. 9 | */ 10 | 11 | public class UserDataStream { 12 | private static final Logger logger = LoggerFactory.getLogger(UserDataStream.class); 13 | public static void main(String[] args) { 14 | WebsocketStreamClientImpl wsClient = new WebsocketStreamClientImpl(); 15 | SpotClientImpl spotClient = new SpotClientImpl(PrivateConfig.API_KEY, PrivateConfig.SECRET_KEY); 16 | 17 | JSONObject obj = new JSONObject(spotClient.createUserData().createListenKey()); 18 | String listenKey = obj.getString("listenKey"); 19 | logger.info("listenKey:" + listenKey); 20 | 21 | wsClient.listenUserStream(listenKey, ((event) -> { 22 | logger.info(event); 23 | })); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/Wallet.java: -------------------------------------------------------------------------------- 1 | import com.binance.connector.client.impl.SpotClientImpl; 2 | import org.json.JSONObject; 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.LinkedHashMap; 7 | 8 | /** 9 | * Example on how to get all coin info, get deposit address and withdraw to deposit address. 10 | */ 11 | public class Wallet { 12 | private static final Logger logger = LoggerFactory.getLogger(Wallet.class); 13 | private static final SpotClientImpl client = new SpotClientImpl(PrivateConfig.API_KEY, PrivateConfig.SECRET_KEY); 14 | 15 | public static void getCoinInfo() { 16 | LinkedHashMap parameters = new LinkedHashMap<>(); 17 | String result = client.createWallet().coinInfo(parameters); 18 | logger.info(result); 19 | } 20 | 21 | public static String getDepositAddress() { 22 | LinkedHashMap parameters = new LinkedHashMap<>(); 23 | parameters.put("coin", "BNB"); 24 | 25 | String result = client.createWallet().depositAddress(parameters); 26 | logger.info(result); 27 | JSONObject jsonObject = new JSONObject(result); 28 | return jsonObject.getString("address"); 29 | } 30 | 31 | public static void withdraw(String address) { 32 | LinkedHashMap parameters = new LinkedHashMap<>(); 33 | parameters.put("coin", "BNB"); 34 | parameters.put("address", address); 35 | parameters.put("amount", "0.001"); 36 | 37 | String result = client.createWallet().withdraw(parameters); 38 | logger.info(result); 39 | } 40 | 41 | public static void main(String[] args) { 42 | getCoinInfo(); 43 | String address = getDepositAddress(); 44 | withdraw(address); 45 | 46 | } 47 | } 48 | --------------------------------------------------------------------------------