All Projects → joaopsilva → Binance Java Api

joaopsilva / Binance Java Api

binance-java-api is a lightweight Java library for the Binance API, supporting synchronous and asynchronous requests, as well as event streaming using WebSockets.

Programming Languages

java
68154 projects - #9 most used programming language

Labels

Projects that are alternatives of or similar to Binance Java Api

Crypto Trading Bot
Cryptocurrency trading bot in javascript for Bitfinex, Bitmex, Binance, FTX, Bybit ... (public edition)
Stars: ✭ 1,089 (+807.5%)
Mutual labels:  binance
Go Binance
Golang wrapper for Binance API
Stars: ✭ 85 (-29.17%)
Mutual labels:  binance
Binancedotnet
Official C# Wrapper for the Binance exchange API, with REST and WebSocket endpoints
Stars: ✭ 102 (-15%)
Mutual labels:  binance
Purequant
专业的数字货币程序化交易开源框架,助力中小投资者快速搭建程序化交易系统。
Stars: ✭ 64 (-46.67%)
Mutual labels:  binance
Cryptotik
deprecated
Stars: ✭ 78 (-35%)
Mutual labels:  binance
Binance Trading Bot
Automated Binance trading bot - Buy low/Sell high with stop loss limit/Trade multiple cryptocurrencies
Stars: ✭ 87 (-27.5%)
Mutual labels:  binance
Cryptex
Gemini, GDAX, Bitfinex, Poloniex, Binance, Kraken, Cryptopia, Koinex, BitGrail and CoinMarketCap cryptocurrency exchange API clients in Swift / iOS SDK. Check prices and account balances using Sample iOS app.
Stars: ✭ 51 (-57.5%)
Mutual labels:  binance
Vue Crypto Dashboard
Cryptocurrency Dashboard made with Vue
Stars: ✭ 107 (-10.83%)
Mutual labels:  binance
Simple Binance Trader
This is a simple trading bot for the binance exchange.
Stars: ✭ 79 (-34.17%)
Mutual labels:  binance
Tradingview Alert Binance Trader
This trading bot listens to the TradingView alert emails on your inbox and executes trades on Binance based on the parameters set on the TD alerts.
Stars: ✭ 100 (-16.67%)
Mutual labels:  binance
Crypto Coin Alerts
An application that let you set alerts for the prices of several cryptocurrencies
Stars: ✭ 72 (-40%)
Mutual labels:  binance
Goex
Exchange Rest And WebSocket API For Golang Wrapper support okcoin,okex,huobi,hbdm,bitmex,coinex,poloniex,bitfinex,bitstamp,binance,kraken,bithumb,zb,hitbtc,fcoin, coinbene
Stars: ✭ 1,188 (+890%)
Mutual labels:  binance
Python Binance Chain
Binance Chain Exchange API python implementation for automated trading
Stars: ✭ 96 (-20%)
Mutual labels:  binance
Crypto Whale Watcher
An app to keep a watch on big volume trades of cryptocurrecies on different exchanges by sending alerts via a Telegram Bot.
Stars: ✭ 60 (-50%)
Mutual labels:  binance
Crypto vba
An Excel/VBA project to communicate with various cryptocurrency exchanges APIs
Stars: ✭ 103 (-14.17%)
Mutual labels:  binance
Binancescanner
💰 Configurable Cryptocurrency Price & Volume Scanner for Binance
Stars: ✭ 54 (-55%)
Mutual labels:  binance
Marketstore
DataFrame Server for Financial Timeseries Data
Stars: ✭ 1,290 (+975%)
Mutual labels:  binance
Deltabot
🚀Combination of useful bots for Binance users. Pump and dump + Binance listing bot. 👍Best profits. Fastest ever.
Stars: ✭ 117 (-2.5%)
Mutual labels:  binance
Kupi Terminal
Ccxt based, open source, customized, extendable trading platform that supports 130+ crypto exchanges.
Stars: ✭ 104 (-13.33%)
Mutual labels:  binance
Binance.api.csharp.client
C#.NET client for Binance Exchange API.
Stars: ✭ 98 (-18.33%)
Mutual labels:  binance

Java Binance API

binance-java-api is a lightweight Java library for interacting with the Binance API, providing complete API coverage, and supporting synchronous and asynchronous requests, as well as event streaming using WebSockets.

NOTE: This project has won the Binance API Competition for the Java language, and as such, this repository has been forked, and the official version can be found at https://github.com/binance-exchange/binance-java-api, where all further upgrades will be done.

Features

Installation

  1. Install library into your Maven's local repository by running mvn install
  2. Add the following Maven dependency to your project's pom.xml:
<dependency>
  <groupId>com.binance.api</groupId>
  <artifactId>binance-api-client</artifactId>
  <version>1.0.0</version>
</dependency>

Alternatively, you can clone this repository and run the examples.

Examples

Getting Started

There are three main client classes that can be used to interact with the API:

  1. BinanceApiRestClient, a synchronous/blocking Binance API client;
  2. BinanceApiAsyncRestClient, an asynchronous/non-blocking Binance API client;
  3. BinanceApiWebSocketClient, a data streaming client using Binance WebSocket API.

These can be instantiated through the corresponding factory method of BinanceApiClientFactory, by passing the security parameters API-KEY and SECRET, which can be created at https://www.binance.com/userCenter/createApi.html.

BinanceApiClientFactory factory = BinanceApiClientFactory.newInstance("API-KEY", "SECRET");
BinanceApiRestClient client = factory.newRestClient();

If the client only needs to access endpoints which do not require additional security, then these parameters are optional.

Once the client is instantiated, it is possible to start making requests to the API.

General endpoints

Test connectivity

client.ping();

Check server time

long serverTime = client.getServerTime();
System.out.println(serverTime);
View Response
1508380346873

Market Data endpoints

Order book of a symbol

OrderBook orderBook = client.getOrderBook("NEOETH", 10);
List<OrderBookEntry> asks = orderBook.getAsks();
OrderBookEntry firstAskEntry = asks.get(0);
System.out.println(firstAskEntry.getPrice() + " / " + firstAskEntry.getQty());
View Response
0.09200000 / 5.52000000

Compressed/Aggregate trades list of a symbol

List<AggTrade> aggTrades = client.getAggTrades("NEOETH");
System.out.println(aggTrades);
View Response
[AggTrade[aggregatedTradeId=30593,price=0.09880800,quantity=40.89000000,firstBreakdownTradeId=33363,lastBreakdownTradeId=33363,tradeTime=1508331041246,isBuyerMaker=true], ...]

Weekly candlestick bars for a symbol

List<Candlestick> candlesticks = client.getCandlestickBars("NEOETH", CandlestickInterval.WEEKLY);
System.out.println(candlesticks);
View Response
[Candlestick[openTime=1506297600000,open=0.09700000,high=0.12000100,low=0.05500000,close=0.11986900,volume=25709.37000000,closeTime=1506902399999,quoteAssetVolume=2649.80091051,numberOfTrades=2435,takerBuyBaseAssetVolume=10520.59000000,takerBuyQuoteAssetVolume=1101.94985388], ...] 

Latest price of a symbol

TickerStatistics tickerStatistics = client.get24HrPriceStatistics("NEOETH");
System.out.println(tickerStatistics.getLastPrice());
View Response
0.09100100

Getting all latests prices

List<TickerPrice> allPrices = client.getAllPrices();
System.out.println(allPrices);
View Response
[TickerPrice[symbol=ETHBTC,price=0.05590400], TickerPrice[symbol=LTCBTC,price=0.01073300], ...]

Account Data endpoints

Get account balances

Account account = client.getAccount();
System.out.println(account.getBalances());
System.out.println(account.getAssetBalance("ETH").getFree());
View Response
AssetBalance[asset=ETH,free=0.10000000,locked=0.00000000]
0.10000000

Get list of trades for an account and a symbol

List<Trade> myTrades = client.getMyTrades("NEOETH");
System.out.println(myTrades);
View Response
[Trade[id=123,price=0.00000100,qty=1000.00000000,commission=0.00172100,commissionAsset=ETH,time=1507927870561,buyer=false,maker=false,bestMatch=true,symbol=<null>,orderId=11289], Trade[id=123,price=0.00001000,qty=3.00000000,commission=0.00000003,commissionAsset=ETH,time=1507927874215,buyer=false,maker=false,bestMatch=true,symbol=<null>,orderId=123]]

Get account open orders for a symbol

List<Order> openOrders = client.getOpenOrders(new OrderRequest("LINKETH"));
System.out.println(openOrders);
View Response
[Order[symbol=LINKETH,orderId=12345,clientOrderId=XYZ,price=0.00010000,origQty=1000.00000000,executedQty=0.00000000,status=NEW,timeInForce=GTC,type=LIMIT,side=BUY,stopPrice=0.00000000,icebergQty=0.00000000,time=1508382291552]]

Get order status

Order order = client.getOrderStatus(new OrderStatusRequest("LINKETH", 12345L));
System.out.println(order.getExecutedQty());
View Response
0.00000000

Placing a MARKET order

NewOrderResponse newOrderResponse = client.newOrder(marketBuy("LINKETH", "1000"));
System.out.println(newOrderResponse.getClientOrderId());
View Response
XXXXXfc2XXzTXXGs66ZcXX

Placing a LIMIT order

NewOrderResponse newOrderResponse = client.newOrder(limitBuy("LINKETH", TimeInForce.GTC, "1000", "0.0001"));
System.out.println(newOrderResponse.getTransactTime());
View Response
1508382322725

Canceling an order

client.cancelOrder(new CancelOrderRequest("LINKETH", 123015L));

Withdraw

In order to be able to withdraw programatically, please enable the Enable Withdrawals option in the API settings.

client.withdraw("ETH", "0x123", "0.1", null);

Fetch withdraw history

WithdrawHistory withdrawHistory = client.getWithdrawHistory("ETH");
System.out.println(withdrawHistory);
View Response
WithdrawHistory[withdrawList=[Withdraw[amount=0.1,address=0x123,asset=ETH,applyTime=2017-10-13 20:59:38,successTime=2017-10-13 21:20:09,txId=0x456,id=789]],success=true]

Fetch deposit history

DepositHistory depositHistory = client.getDepositHistory("ETH");
System.out.println(depositHistory);
View Response
DepositHistory[depositList=[Deposit[amount=0.100000000000000000,asset=ETH,insertTime=2017-10-18 13:03:39], Deposit[amount=1.000000000000000000,asset=NEO,insertTime=2017-10-13 20:24:04]],success=true]

Get deposit address

DepositAddress depositAddress = client.getDepositAddress("ETH");
System.out.println(depositAddress);
View Response
DepositAddress[address=0x99...,success=true,addressTag=,asset=ETH]

User stream endpoints

Start user data stream, keepalive, and close data stream

String listenKey = client.startUserDataStream();
client.keepAliveUserDataStream(listenKey);
client.closeUserDataStream(listenKey);

WebSocket API

Initialize the WebSocket client

BinanceApiWebSocketClient client = BinanceApiClientFactory.newInstance().newWebSocketClient();

Listen for aggregated trade events for ETH/BTC

client.onAggTradeEvent("ethbtc", (AggTradeEvent response) -> {
  System.out.println(response.getPrice());
  System.out.println(response.getQuantity());
});
View Response
0.05583500 / 1.06400000
1508383333069
0.05557200 / 2.00000000
1508383345070
0.05583200 / 2.68500000
1508383352961
...

Listen for changes in the order book for ETH/BTC

client.onDepthEvent("ethbtc", (DepthEvent response) -> {
  System.out.println(response.getAsks());
});
View Response
[OrderBookEntry[price=0.05559500,qty=7.94200000], OrderBookEntry[price=0.05559800,qty=0.00000000]]
[OrderBookEntry[price=0.05558400,qty=30.61800000], OrderBookEntry[price=0.05559500,qty=0.00000000], OrderBookEntry[price=0.05560600,qty=8.32100000]]
[OrderBookEntry[price=0.05559100,qty=7.86600000], OrderBookEntry[price=0.05560600,qty=0.00000000], OrderBookEntry[price=0.05607700,qty=5.15500000], OrderBookEntry[price=0.05620700,qty=0.00000000], OrderBookEntry[price=0.05842200,qty=0.00000000]]
[OrderBookEntry[price=0.05558400,qty=29.61700000]]
...

Get 1m candlesticks in real-time for ETH/BTC

client.onCandlestickEvent("ethbtc", CandlestickInterval.ONE_MINUTE, response -> System.out.println(response));
View Response
CandlestickEvent[eventType=kline,eventTime=1508417055113,symbol=ETHBTC,openTime=1508417040000,open=0.05376300,high=0.05376300,low=0.05372900,close=0.05372900,volume=0.49400000,closeTime=1508417099999,intervalId=1m,firstTradeId=2199019,lastTradeId=2199020,quoteAssetVolume=0.02654552,numberOfTrades=2,takerBuyBaseAssetVolume=0.00000000,takerBuyQuoteAssetVolume=0.00000000,isBarFinal=false]
CandlestickEvent[eventType=kline,eventTime=1508417055145,symbol=ETHBTC,openTime=1508417040000,open=0.05376300,high=0.05376300,low=0.05371700,close=0.05371700,volume=0.62900000,closeTime=1508417099999,intervalId=1m,firstTradeId=2199019,lastTradeId=2199021,quoteAssetVolume=0.03379731,numberOfTrades=3,takerBuyBaseAssetVolume=0.00000000,takerBuyQuoteAssetVolume=0.00000000,isBarFinal=false]
CandlestickEvent[eventType=kline,eventTime=1508417096085,symbol=ETHBTC,openTime=1508417040000,open=0.05376300,high=0.05376300,low=0.05370900,close=0.05370900,volume=0.68000000,closeTime=1508417099999,intervalId=1m,firstTradeId=2199019,lastTradeId=2199022,quoteAssetVolume=0.03653646,numberOfTrades=4,takerBuyBaseAssetVolume=0.00000000,takerBuyQuoteAssetVolume=0.00000000,isBarFinal=false]
...

Keep a local depth cache for a symbol

Please see DepthCacheExample.java for an implementation which uses the binance-java-api for maintaining a local depth cache for a symbol. In the same folder, you can also find how to do caching of account balances, aggregated trades, and klines/candlesticks.

View Response
ASKS:
0.05690700 / 6.15100000
0.05447800 / 0.09500000
0.05447700 / 28.22000000
0.05439000 / 0.54500000
0.05438400 / 1.10300000
0.05436600 / 0.06100000
0.05434000 / 0.05500000
0.05432800 / 3.45100000
0.05422700 / 1.11100000
0.05410600 / 5.85900000
0.05409300 / 4.50000000
BIDS:
0.05390000 / 2.26000000
0.05389000 / 15.00000000
0.05385600 / 1.95000000
0.05367900 / 0.10000000
0.05366700 / 2.27600000
0.05360000 / 10.96100000
0.05348500 / 14.04000000
0.05345000 / 0.56100000
0.05336200 / 21.10000000
0.05336100 / 21.15000000
0.05306600 / 0.21100000
0.05116300 / 10.95000000
BEST ASK: 0.05409300 / 4.50000000
BEST BID: 0.05390000 / 2.26000000
...

Listen for changes in the account

client.onUserDataUpdateEvent(listenKey, response -> {
  if (response.getEventType() == UserDataUpdateEventType.ACCOUNT_UPDATE) {
    AccountUpdateEvent accountUpdateEvent = response.getAccountUpdateEvent();
    
    // Print new balances of every available asset
    System.out.println(accountUpdateEvent.getBalances());
  } else {
    OrderTradeUpdateEvent orderTradeUpdateEvent = response.getOrderTradeUpdateEvent();
    
    // Print details about an order/trade
    System.out.println(orderTradeUpdateEvent);

    // Print original quantity
    System.out.println(orderTradeUpdateEvent.getOriginalQuantity());

    // Or price
    System.out.println(orderTradeUpdateEvent.getPrice());
  }
});

Asynchronous requests

To make an asynchronous request it is necessary to use the BinanceApiAsyncRestClient, and call the method with the same name as in the synchronous version, but passing a callback BinanceApiCallback that handles the response whenever it arrives.

Get latest price of a symbol asynchronously

client.get24HrPriceStatistics("NEOETH", (TickerStatistics response) -> {
  System.out.println(response.getLastPrice());
  System.out.println(response.getVolume());
});
View Response
0.09100100

Placing a LIMIT order asynchronously

client.newOrder(limitBuy("LINKETH", TimeInForce.GTC, "1000", "0.0001"), (NewOrderResponse response) -> {
  System.out.println(response.getTransactTime());
});
View Response
1508382322725

Exception handling

Every API method can potentially throw an unchecked BinanceApiException which wraps the error message returned from the Binance API, or an exception, in case the request never properly reached the server.

try {
  client.getOrderBook("UNKNOWN", 10);
} catch (BinanceApiException e) {
  System.out.println(e.getError().getCode()); // -1121
  System.out.println(e.getError().getMsg());  // Invalid symbol
}
View Response
-1121
Invalid symbol

More examples

An extensive set of examples, covering most aspects of the API, can be found at https://github.com/joaopsilva/binance-java-api/tree/master/src/test/java/com/binance/api/examples.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].