> callback);
+
+ /**
+ * Get compressed, aggregate trades. Trades that fill at the time, from the same order, with
+ * the same price will have the quantity aggregated.
+ *
+ * If both startTime and endTime are sent, limitshould not
+ * be sent AND the distance between startTime and endTime must be less than 24 hours.
+ *
+ * @param symbol symbol to aggregate (mandatory)
+ * @param fromId ID to get aggregate trades from INCLUSIVE (optional)
+ * @param limit Default 500; max 1000 (optional)
+ * @param startTime Timestamp in ms to get aggregate trades from INCLUSIVE (optional).
+ * @param endTime Timestamp in ms to get aggregate trades until INCLUSIVE (optional).
+ * @param callback the callback that handles the response
+ * @return a list of aggregate trades for the given symbol
+ */
+ void getAggTrades(String symbol, String fromId, Integer limit, Long startTime, Long endTime, BinanceApiCallback> callback);
+
+ /**
+ * Return the most recent aggregate trades for symbol
+ *
+ * @see #getAggTrades(String, String, Integer, Long, Long, BinanceApiCallback)
+ */
+ void getAggTrades(String symbol, BinanceApiCallback> callback);
+
+ /**
+ * Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.
+ *
+ * @param symbol symbol to aggregate (mandatory)
+ * @param interval candlestick interval (mandatory)
+ * @param limit Default 500; max 1000 (optional)
+ * @param startTime Timestamp in ms to get candlestick bars from INCLUSIVE (optional).
+ * @param endTime Timestamp in ms to get candlestick bars until INCLUSIVE (optional).
+ * @param callback the callback that handles the response containing a candlestick bar for the given symbol and interval
+ */
+ void getCandlestickBars(String symbol, CandlestickInterval interval, Integer limit, Long startTime, Long endTime, BinanceApiCallback> callback);
+
+ /**
+ * Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.
+ *
+ * @see #getCandlestickBars(String, CandlestickInterval, BinanceApiCallback)
+ */
+ void getCandlestickBars(String symbol, CandlestickInterval interval, BinanceApiCallback> callback);
+
+ /**
+ * Get 24 hour price change statistics (asynchronous).
+ *
+ * @param symbol ticker symbol (e.g. ETHBTC)
+ * @param callback the callback that handles the response
+ */
+ void get24HrPriceStatistics(String symbol, BinanceApiCallback callback);
+
+ /**
+ * Get 24 hour price change statistics for all symbols (asynchronous).
+ *
+ * @param callback the callback that handles the response
+ */
+ void getAll24HrPriceStatistics(BinanceApiCallback> callback);
+
+ /**
+ * Get Latest price for all symbols (asynchronous).
+ *
+ * @param callback the callback that handles the response
+ */
+ void getAllPrices(BinanceApiCallback> callback);
+
+ /**
+ * Get latest price for symbol (asynchronous).
+ *
+ * @param symbol ticker symbol (e.g. ETHBTC)
+ * @param callback the callback that handles the response
+ */
+ void getPrice(String symbol, BinanceApiCallback callback);
+
+ /**
+ * Get best price/qty on the order book for all symbols (asynchronous).
+ *
+ * @param callback the callback that handles the response
+ */
+ void getBookTickers(BinanceApiCallback> callback);
+
+ // Account endpoints
+
+ /**
+ * Send in a new order (asynchronous)
+ *
+ * @param order the new order to submit.
+ * @param callback the callback that handles the response
+ */
+ void newOrder(NewOrder order, BinanceApiCallback callback);
+
+ /**
+ * Test new order creation and signature/recvWindow long. Creates and validates a new order but does not send it into the matching engine.
+ *
+ * @param order the new TEST order to submit.
+ * @param callback the callback that handles the response
+ */
+ void newOrderTest(NewOrder order, BinanceApiCallback callback);
+
+ /**
+ * Check an order's status (asynchronous).
+ *
+ * @param orderStatusRequest order status request parameters
+ * @param callback the callback that handles the response
+ */
+ void getOrderStatus(OrderStatusRequest orderStatusRequest, BinanceApiCallback callback);
+
+ /**
+ * Cancel an active order (asynchronous).
+ *
+ * @param cancelOrderRequest order status request parameters
+ * @param callback the callback that handles the response
+ */
+ void cancelOrder(CancelOrderRequest cancelOrderRequest, BinanceApiCallback callback);
+
+ /**
+ * Get all open orders on a symbol (asynchronous).
+ *
+ * @param orderRequest order request parameters
+ * @param callback the callback that handles the response
+ */
+ void getOpenOrders(OrderRequest orderRequest, BinanceApiCallback> callback);
+
+ /**
+ * Get all account orders; active, canceled, or filled.
+ *
+ * @param orderRequest order request parameters
+ * @param callback the callback that handles the response
+ */
+ void getAllOrders(AllOrdersRequest orderRequest, BinanceApiCallback> callback);
+
+ /**
+ * Get current account information (async).
+ */
+ void getAccount(Long recvWindow, Long timestamp, BinanceApiCallback callback);
+
+ /**
+ * Get current account information using default parameters (async).
+ */
+ void getAccount(BinanceApiCallback callback);
+
+ /**
+ * Get trades for a specific account and symbol.
+ *
+ * @param symbol symbol to get trades from
+ * @param limit default 500; max 1000
+ * @param fromId TradeId to fetch from. Default gets most recent trades.
+ * @param callback the callback that handles the response with a list of trades
+ */
+ void getMyTrades(String symbol, Integer limit, Long fromId, Long recvWindow, Long timestamp, BinanceApiCallback> callback);
+
+ /**
+ * Get trades for a specific account and symbol.
+ *
+ * @param symbol symbol to get trades from
+ * @param limit default 500; max 1000
+ * @param callback the callback that handles the response with a list of trades
+ */
+ void getMyTrades(String symbol, Integer limit, BinanceApiCallback> callback);
+
+ /**
+ * Get trades for a specific account and symbol.
+ *
+ * @param symbol symbol to get trades from
+ * @param callback the callback that handles the response with a list of trades
+ */
+ void getMyTrades(String symbol, BinanceApiCallback> callback);
+
+ /**
+ * Submit a withdraw request.
+ *
+ * Enable Withdrawals option has to be active in the API settings.
+ *
+ * @param asset asset symbol to withdraw
+ * @param address address to withdraw to
+ * @param amount amount to withdraw
+ * @param name description/alias of the address
+ * @param addressTag Secondary address identifier for coins like XRP,XMR etc.
+ */
+ void withdraw(String asset, String address, String amount, String name, String addressTag, BinanceApiCallback callback);
+
+ /**
+ * Fetch account deposit history.
+ *
+ * @param callback the callback that handles the response and returns the deposit history
+ */
+ void getDepositHistory(String asset, BinanceApiCallback callback);
+
+ /**
+ * Fetch account withdraw history.
+ *
+ * @param callback the callback that handles the response and returns the withdraw history
+ */
+ void getWithdrawHistory(String asset, BinanceApiCallback callback);
+
+ /**
+ * Fetch deposit address.
+ *
+ * @param callback the callback that handles the response and returns the deposit address
+ */
+ void getDepositAddress(String asset, BinanceApiCallback callback);
+
+ // User stream endpoints
+
+ /**
+ * Start a new user data stream.
+ *
+ * @param callback the callback that handles the response which contains a listenKey
+ */
+ void startUserDataStream(BinanceApiCallback callback);
+
+ /**
+ * PING a user data stream to prevent a time out.
+ *
+ * @param listenKey listen key that identifies a data stream
+ * @param callback the callback that handles the response which contains a listenKey
+ */
+ void keepAliveUserDataStream(String listenKey, BinanceApiCallback callback);
+
+ /**
+ * Close out a new user data stream.
+ *
+ * @param listenKey listen key that identifies a data stream
+ * @param callback the callback that handles the response which contains a listenKey
+ */
+ void closeUserDataStream(String listenKey, BinanceApiCallback callback);
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/api/client/api/async/BinanceApiSwapAsyncRestClient.java b/src/main/java/com/binance/api/client/api/async/BinanceApiSwapAsyncRestClient.java
new file mode 100755
index 000000000..dfa9aef96
--- /dev/null
+++ b/src/main/java/com/binance/api/client/api/async/BinanceApiSwapAsyncRestClient.java
@@ -0,0 +1,101 @@
+package com.binance.api.client.api.async;
+
+import com.binance.api.client.api.BinanceApiCallback;
+import com.binance.api.client.domain.SwapRemoveType;
+import com.binance.api.client.domain.account.*;
+
+import java.util.List;
+
+/**
+ * Binance API facade, supporting asynchronous/non-blocking access Binance's REST API.
+ */
+public interface BinanceApiSwapAsyncRestClient {
+
+ /**
+ * Get metadata about all swap pools.
+ *
+ * @return
+ */
+ void listAllSwapPools(BinanceApiCallback> callback);
+
+ /**
+ * Get liquidity information and user share of a pool.
+ *
+ * @param poolId
+ * @return
+ */
+ void getPoolLiquidityInfo(String poolId, BinanceApiCallback callback);
+
+ /**
+ * Add liquidity to a pool.
+ *
+ * @param poolId
+ * @param asset
+ * @param quantity
+ * @return
+ */
+ void addLiquidity(String poolId,
+ String asset,
+ String quantity,
+ BinanceApiCallback callback);
+
+ /**
+ * Remove liquidity from a pool, type include SINGLE and COMBINATION, asset is mandatory for single asset removal
+ *
+ * @param poolId
+ * @param type
+ * @param asset
+ * @param shareAmount
+ * @return
+ */
+ void removeLiquidity(String poolId,
+ SwapRemoveType type,
+ List asset,
+ String shareAmount,
+ BinanceApiCallback callback);
+
+ /**
+ * Get liquidity operation (add/remove) records of a pool
+ *
+ * @param poolId
+ * @param limit
+ * @return
+ */
+ void getPoolLiquidityOperationRecords(String poolId,
+ Integer limit,
+ BinanceApiCallback> callback);
+
+ /**
+ * Get liquidity operation (add/remove) record.
+ *
+ * @param operationId
+ * @return
+ */
+ void getLiquidityOperationRecord(String operationId, BinanceApiCallback callback);
+
+ /**
+ * Request a quote for swap quote asset (selling asset) for base asset (buying asset), essentially price/exchange rates.
+ *
+ * @param quoteAsset
+ * @param baseAsset
+ * @param quoteQty
+ * @return
+ */
+ void requestQuote(String quoteAsset,
+ String baseAsset,
+ String quoteQty, BinanceApiCallback callback);
+
+ /**
+ * Swap quoteAsset for baseAsset
+ *
+ * @param quoteAsset
+ * @param baseAsset
+ * @param quoteQty
+ * @return
+ */
+ void swap(String quoteAsset,
+ String baseAsset,
+ String quoteQty, BinanceApiCallback callback);
+
+ void getSwapHistory(String swapId, BinanceApiCallback callback);
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/api/client/api/sync/BinanceApiFuturesRestClient.java b/src/main/java/com/binance/api/client/api/sync/BinanceApiFuturesRestClient.java
new file mode 100755
index 000000000..f913a8c61
--- /dev/null
+++ b/src/main/java/com/binance/api/client/api/sync/BinanceApiFuturesRestClient.java
@@ -0,0 +1,71 @@
+package com.binance.api.client.api.sync;
+
+import com.binance.api.client.domain.PositionSideType;
+import com.binance.api.client.domain.account.*;
+
+import java.util.List;
+
+public interface BinanceApiFuturesRestClient extends BinanceApiGeneralRestClient {
+
+ /**
+ * Get current margin account information using default parameters.
+ */
+ FuturesAccount getAccount();
+
+ /**
+ * Send in a new margin order.
+ *
+ * @param order the new order to submit.
+ * @return a response containing details about the newly placed order.
+ */
+ FuturesNewOrderResponse newOrder(FuturesNewOrder order);
+
+
+ /**
+ * Change leverage
+ *
+ * @param leverageRequest
+ * @return LeverageResponse
+ */
+ LeverageResponse changeInitialLeverage(LeverageRequest leverageRequest);
+
+ /**
+ * Change type of margin CROSSED/ISOLATED
+ *
+ * @param marginTypeRequest
+ */
+ void changeMarginType(MarginTypeRequest marginTypeRequest);
+
+ // User stream endpoints
+
+ /**
+ * Start a new user data stream.
+ *
+ * @return a listen key that can be used with data streams
+ */
+ String startUserDataStream();
+
+ /**
+ * PING a user data stream to prevent a time out.
+ *
+ * @param listenKey listen key that identifies a data stream
+ */
+ void keepAliveUserDataStream(String listenKey);
+
+ /**
+ * Close out a new user data stream.
+ *
+ * @param listenKey listen key that identifies a data stream
+ */
+ void closeUserDataStream(String listenKey);
+
+ /**
+ * Change user's position mode (Hedge mode or One-Way mode)
+ *
+ * @param positionSideType
+ */
+ void changePositionSideMode(PositionSideType positionSideType);
+
+ List getPositionInformation(String symbol);
+
+}
diff --git a/src/main/java/com/binance/api/client/api/sync/BinanceApiGeneralRestClient.java b/src/main/java/com/binance/api/client/api/sync/BinanceApiGeneralRestClient.java
new file mode 100755
index 000000000..c2c58080e
--- /dev/null
+++ b/src/main/java/com/binance/api/client/api/sync/BinanceApiGeneralRestClient.java
@@ -0,0 +1,156 @@
+package com.binance.api.client.api.sync;
+
+import com.binance.api.client.domain.account.Order;
+import com.binance.api.client.domain.account.TradeHistoryItem;
+import com.binance.api.client.domain.account.request.CancelOrderRequest;
+import com.binance.api.client.domain.account.request.CancelOrderResponse;
+import com.binance.api.client.domain.account.request.OrderRequest;
+import com.binance.api.client.domain.account.request.OrderStatusRequest;
+import com.binance.api.client.domain.general.ExchangeInfo;
+import com.binance.api.client.domain.market.*;
+
+import java.util.List;
+
+/**
+ * Binance API facade, supporting synchronous/blocking access Binance's REST API.
+ */
+public interface BinanceApiGeneralRestClient {
+
+ // General endpoints
+
+ /**
+ * Test connectivity to the Rest API.
+ */
+ void ping();
+
+ /**
+ * Test connectivity to the Rest API and get the current server time.
+ *
+ * @return current server time.
+ */
+ Long getServerTime();
+
+ /**
+ * @return Current exchange trading rules and symbol information
+ */
+ ExchangeInfo getExchangeInfo();
+
+ // Market Data endpoints
+
+ /**
+ * Get order book of a symbol.
+ *
+ * @param symbol ticker symbol (e.g. ETHBTC)
+ * @param limit depth of the order book (max 100)
+ */
+ OrderBook getOrderBook(String symbol, Integer limit);
+
+ /**
+ * Get recent trades (up to last 500). Weight: 1
+ *
+ * @param symbol ticker symbol (e.g. ETHBTC)
+ * @param limit of last trades (Default 500; max 1000.)
+ */
+ List getTrades(String symbol, Integer limit);
+
+ /**
+ * Get older trades. Weight: 5
+ *
+ * @param symbol ticker symbol (e.g. ETHBTC)
+ * @param limit of last trades (Default 500; max 1000.)
+ * @param fromId TradeId to fetch from. Default gets most recent trades.
+ */
+ List getHistoricalTrades(String symbol, Integer limit, Long fromId);
+
+ /**
+ * Get compressed, aggregate trades. Trades that fill at the time, from the same order, with
+ * the same price will have the quantity aggregated.
+ *
+ * If both startTime and endTime are sent, limitshould not
+ * be sent AND the distance between startTime and endTime must be less than 24 hours.
+ *
+ * @param symbol symbol to aggregate (mandatory)
+ * @param fromId ID to get aggregate trades from INCLUSIVE (optional)
+ * @param limit Default 500; max 1000 (optional)
+ * @param startTime Timestamp in ms to get aggregate trades from INCLUSIVE (optional).
+ * @param endTime Timestamp in ms to get aggregate trades until INCLUSIVE (optional).
+ * @return a list of aggregate trades for the given symbol
+ */
+ List getAggTrades(String symbol, String fromId, Integer limit, Long startTime, Long endTime);
+
+ /**
+ * Return the most recent aggregate trades for symbol
+ *
+ * @see #getAggTrades(String, String, Integer, Long, Long)
+ */
+ List getAggTrades(String symbol);
+
+ /**
+ * Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.
+ *
+ * @param symbol symbol to aggregate (mandatory)
+ * @param interval candlestick interval (mandatory)
+ * @param limit Default 500; max 1000 (optional)
+ * @param startTime Timestamp in ms to get candlestick bars from INCLUSIVE (optional).
+ * @param endTime Timestamp in ms to get candlestick bars until INCLUSIVE (optional).
+ * @return a candlestick bar for the given symbol and interval
+ */
+ List getCandlestickBars(String symbol, CandlestickInterval interval, Integer limit, Long startTime, Long endTime);
+
+ /**
+ * Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.
+ *
+ * @see #getCandlestickBars(String, CandlestickInterval, Integer, Long, Long)
+ */
+ List getCandlestickBars(String symbol, CandlestickInterval interval);
+
+ /**
+ * Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.
+ *
+ * @see #getCandlestickBars(String, CandlestickInterval, Integer, Long, Long)
+ */
+ List getCandlestickBars(String symbol, CandlestickInterval interval, Integer limit);
+
+ /**
+ * Get 24 hour price change statistics.
+ *
+ * @param symbol ticker symbol (e.g. ETHBTC)
+ */
+ TickerStatistics get24HrPriceStatistics(String symbol);
+
+ /**
+ * Get 24 hour price change statistics for all symbols.
+ */
+ List getAll24HrPriceStatistics();
+
+ /**
+ * Get latest price for symbol.
+ *
+ * @param symbol ticker symbol (e.g. ETHBTC)
+ */
+ TickerPrice getPrice(String symbol);
+
+
+ /**
+ * Check an order's status.
+ *
+ * @param orderStatusRequest order status request options/filters
+ * @return an order
+ */
+ Order getOrderStatus(OrderStatusRequest orderStatusRequest);
+
+ /**
+ * Cancel an active order.
+ *
+ * @param cancelOrderRequest order status request parameters
+ */
+ CancelOrderResponse cancelOrder(CancelOrderRequest cancelOrderRequest);
+
+ /**
+ * Get all open orders on a symbol.
+ *
+ * @param orderRequest order request parameters
+ * @return a list of all account open orders on a symbol.
+ */
+ List getOpenOrders(OrderRequest orderRequest);
+}
diff --git a/src/main/java/com/binance/api/client/BinanceApiMarginRestClient.java b/src/main/java/com/binance/api/client/api/sync/BinanceApiMarginRestClient.java
similarity index 83%
rename from src/main/java/com/binance/api/client/BinanceApiMarginRestClient.java
rename to src/main/java/com/binance/api/client/api/sync/BinanceApiMarginRestClient.java
index 6f100a365..650aaa447 100755
--- a/src/main/java/com/binance/api/client/BinanceApiMarginRestClient.java
+++ b/src/main/java/com/binance/api/client/api/sync/BinanceApiMarginRestClient.java
@@ -1,4 +1,4 @@
-package com.binance.api.client;
+package com.binance.api.client.api.sync;
import com.binance.api.client.domain.TransferType;
import com.binance.api.client.domain.account.*;
@@ -39,39 +39,16 @@ public interface BinanceApiMarginRestClient {
/**
* Check margin order's status.
- * @param orderStatusRequest order status request options/filters
*
+ * @param orderStatusRequest order status request options/filters
* @return an order
*/
Order getOrderStatus(OrderStatusRequest orderStatusRequest);
- /**
- * Get margin trades for a specific symbol.
- *
- * @param symbol symbol to get trades from
- * @return a list of trades
- */
- List getMyTrades(String symbol);
-
- // User stream endpoints
-
- /**
- * Start a new user data stream.
- *
- * @return a listen key that can be used with data streams
- */
- String startUserDataStream();
-
- /**
- * PING a user data stream to prevent a time out.
- *
- * @param listenKey listen key that identifies a data stream
- */
- void keepAliveUserDataStream(String listenKey);
-
/**
* Execute transfer between spot account and margin account
- * @param asset asset to repay
+ *
+ * @param asset asset to repay
* @param amount amount to repay
* @return transaction id
*/
@@ -79,7 +56,8 @@ public interface BinanceApiMarginRestClient {
/**
* Apply for a loan
- * @param asset asset to repay
+ *
+ * @param asset asset to repay
* @param amount amount to repay
* @return transaction id
*/
@@ -87,6 +65,7 @@ public interface BinanceApiMarginRestClient {
/**
* Query loan record
+ *
* @param asset asset to query
* @return repay records
*/
@@ -94,6 +73,7 @@ public interface BinanceApiMarginRestClient {
/**
* Query max borrowable
+ *
* @param asset asset to query
* @return max borrowable
*/
@@ -101,15 +81,17 @@ public interface BinanceApiMarginRestClient {
/**
* Query loan record
+ *
* @param asset asset to query
- * @param txId the tranId in POST /sapi/v1/margin/repay
+ * @param txId the tranId in POST /sapi/v1/margin/repay
* @return loan records
*/
RepayQueryResult queryRepay(String asset, String txId);
/**
* Repay loan for margin account
- * @param asset asset to repay
+ *
+ * @param asset asset to repay
* @param amount amount to repay
* @return transaction id
*/
@@ -117,11 +99,32 @@ public interface BinanceApiMarginRestClient {
/**
* Query loan record
+ *
* @param asset asset to query
- * @param txId the tranId in POST /sapi/v1/margin/loan
+ * @param txId the tranId in POST /sapi/v1/margin/loan
* @return loan records
*/
LoanQueryResult queryLoan(String asset, String txId);
+ // User stream endpoints
+ /**
+ * Start a new user data stream.
+ *
+ * @return a listen key that can be used with data streams
+ */
+ String startUserDataStream();
+ /**
+ * PING a user data stream to prevent a time out.
+ *
+ * @param listenKey listen key that identifies a data stream
+ */
+ void keepAliveUserDataStream(String listenKey);
+
+ /**
+ * Close out a new user data stream.
+ *
+ * @param listenKey listen key that identifies a data stream
+ */
+ void closeUserDataStream(String listenKey);
}
diff --git a/src/main/java/com/binance/api/client/api/sync/BinanceApiSpotRestClient.java b/src/main/java/com/binance/api/client/api/sync/BinanceApiSpotRestClient.java
new file mode 100755
index 000000000..69f66aaa9
--- /dev/null
+++ b/src/main/java/com/binance/api/client/api/sync/BinanceApiSpotRestClient.java
@@ -0,0 +1,152 @@
+package com.binance.api.client.api.sync;
+
+import com.binance.api.client.domain.account.*;
+import com.binance.api.client.domain.account.request.AllOrdersRequest;
+import com.binance.api.client.domain.market.BookTicker;
+import com.binance.api.client.domain.market.TickerPrice;
+
+import java.util.List;
+
+/**
+ * Binance API facade, supporting synchronous/blocking access Binance's REST API.
+ */
+public interface BinanceApiSpotRestClient extends BinanceApiGeneralRestClient {
+
+ // Account endpoints
+
+ /**
+ * Send in a new order.
+ *
+ * @param order the new order to submit.
+ * @return a response containing details about the newly placed order.
+ */
+ NewOrderResponse newOrder(NewOrder order);
+
+
+ /**
+ * Get Latest price for all symbols.
+ */
+ List getAllPrices();
+
+ /**
+ * Get best price/qty on the order book for all symbols.
+ */
+ List getBookTickers();
+
+ /**
+ * Get all account orders; active, canceled, or filled.
+ *
+ * @param orderRequest order request parameters
+ * @return a list of all account orders
+ */
+ List getAllOrders(AllOrdersRequest orderRequest);
+
+ /**
+ * Test new order creation and signature/recvWindow long. Creates and validates a new order but does not send it into the matching engine.
+ *
+ * @param order the new TEST order to submit.
+ */
+ void newOrderTest(NewOrder order);
+
+ /**
+ * Get current account information.
+ */
+ Account getAccount(Long recvWindow, Long timestamp);
+
+ /**
+ * Get current account information using default parameters.
+ */
+ Account getAccount();
+
+ /**
+ * Get trades for a specific account and symbol.
+ *
+ * @param symbol symbol to get trades from
+ * @param limit default 500; max 1000
+ * @param fromId TradeId to fetch from. Default gets most recent trades.
+ * @return a list of trades
+ */
+ List getMyTrades(String symbol, Integer limit, Long fromId, Long recvWindow, Long timestamp);
+
+ /**
+ * Get trades for a specific account and symbol.
+ *
+ * @param symbol symbol to get trades from
+ * @param limit default 500; max 1000
+ * @return a list of trades
+ */
+ List getMyTrades(String symbol, Integer limit);
+
+ /**
+ * Get trades for a specific account and symbol.
+ *
+ * @param symbol symbol to get trades from
+ * @return a list of trades
+ */
+ List getMyTrades(String symbol);
+
+ List getMyTrades(String symbol, Long fromId);
+
+ /**
+ * Submit a withdraw request.
+ *
+ * Enable Withdrawals option has to be active in the API settings.
+ *
+ * @param asset asset symbol to withdraw
+ * @param address address to withdraw to
+ * @param amount amount to withdraw
+ * @param name description/alias of the address
+ * @param addressTag Secondary address identifier for coins like XRP,XMR etc.
+ */
+ WithdrawResult withdraw(String asset, String address, String amount, String name, String addressTag);
+
+ /**
+ * Fetch account deposit history.
+ *
+ * @return deposit history, containing a list of deposits
+ */
+ DepositHistory getDepositHistory(String asset);
+
+ /**
+ * Fetch account withdraw history.
+ *
+ * @return withdraw history, containing a list of withdrawals
+ */
+ WithdrawHistory getWithdrawHistory(String asset);
+
+ /**
+ * Fetch sub-account transfer history.
+ *
+ * @return sub-account transfers
+ */
+ List getSubAccountTransfers();
+
+ /**
+ * Fetch deposit address.
+ *
+ * @return deposit address for a given asset.
+ */
+ DepositAddress getDepositAddress(String asset);
+
+ // User stream endpoints
+ /**
+ * Start a new user data stream.
+ *
+ * @return a listen key that can be used with data streams
+ */
+ String startUserDataStream();
+
+ /**
+ * PING a user data stream to prevent a time out.
+ *
+ * @param listenKey listen key that identifies a data stream
+ */
+ void keepAliveUserDataStream(String listenKey);
+
+ /**
+ * Close out a new user data stream.
+ *
+ * @param listenKey listen key that identifies a data stream
+ */
+ void closeUserDataStream(String listenKey);
+}
diff --git a/src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java b/src/main/java/com/binance/api/client/api/sync/BinanceApiSwapRestClient.java
similarity index 94%
rename from src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java
rename to src/main/java/com/binance/api/client/api/sync/BinanceApiSwapRestClient.java
index f7baf2c2e..f8d5c0623 100755
--- a/src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java
+++ b/src/main/java/com/binance/api/client/api/sync/BinanceApiSwapRestClient.java
@@ -1,4 +1,4 @@
-package com.binance.api.client;
+package com.binance.api.client.api.sync;
import com.binance.api.client.domain.SwapRemoveType;
import com.binance.api.client.domain.account.*;
diff --git a/src/main/java/com/binance/api/client/config/ApiConfig.java b/src/main/java/com/binance/api/client/config/ApiConfig.java
new file mode 100755
index 000000000..0d24e7bb4
--- /dev/null
+++ b/src/main/java/com/binance/api/client/config/ApiConfig.java
@@ -0,0 +1,27 @@
+package com.binance.api.client.config;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+
+/**
+ * Configuration used for Binance operations.
+ */
+
+@Retention(RUNTIME)
+@Target(TYPE)
+public @interface ApiConfig {
+
+ /**
+ * Domain of Rest URLs.
+ */
+ String apiUrl();
+
+ /**
+ * Domain of WebSocket.
+ */
+ String webSocketUrl();
+}
diff --git a/src/main/java/com/binance/api/client/config/BinanceApiConfig.java b/src/main/java/com/binance/api/client/config/BinanceApiConfig.java
old mode 100755
new mode 100644
index d05538efb..0384771ab
--- a/src/main/java/com/binance/api/client/config/BinanceApiConfig.java
+++ b/src/main/java/com/binance/api/client/config/BinanceApiConfig.java
@@ -1,52 +1,4 @@
package com.binance.api.client.config;
-/**
- * Configuration used for Binance operations.
- */
-public class BinanceApiConfig {
-
- /**
- * Base domain for URLs.
- */
- private static String BASE_DOMAIN = "binance.com";
-
- /**
- * Set the URL base domain name (e.g., binance.com).
- *
- * @param baseDomain Base domain name
- */
- public static void setBaseDomain(final String baseDomain) {
- BASE_DOMAIN = baseDomain;
- }
-
- /**
- * Get the URL base domain name (e.g., binance.com).
- *
- * @return The base domain for URLs
- */
- public static String getBaseDomain() {
- return BASE_DOMAIN;
- }
-
- /**
- * REST API base URL.
- */
- public static String getApiBaseUrl() {
- return String.format("https://api.%s", getBaseDomain());
- }
-
- /**
- * Streaming API base URL.
- */
- public static String getStreamApiBaseUrl() {
- return String.format("wss://stream.%s:9443/ws", getBaseDomain());
- }
-
- /**
- * Asset info base URL.
- */
- public static String getAssetInfoApiBaseUrl() {
- return String.format("https://%s/", getBaseDomain());
- }
-
+public interface BinanceApiConfig {
}
diff --git a/src/main/java/com/binance/api/client/config/FuturesApiConfig.java b/src/main/java/com/binance/api/client/config/FuturesApiConfig.java
new file mode 100644
index 000000000..3d435f94e
--- /dev/null
+++ b/src/main/java/com/binance/api/client/config/FuturesApiConfig.java
@@ -0,0 +1,6 @@
+package com.binance.api.client.config;
+
+@ApiConfig(apiUrl = "https://fapi.binance.com", webSocketUrl = "wss://fstream.binance.com/ws")
+public class FuturesApiConfig implements BinanceApiConfig {
+
+}
diff --git a/src/main/java/com/binance/api/client/config/SpotApiConfig.java b/src/main/java/com/binance/api/client/config/SpotApiConfig.java
new file mode 100755
index 000000000..2fd4c94cd
--- /dev/null
+++ b/src/main/java/com/binance/api/client/config/SpotApiConfig.java
@@ -0,0 +1,10 @@
+package com.binance.api.client.config;
+
+/**
+ * Configuration used for Binance operations.
+ */
+
+@ApiConfig(apiUrl = "https://api.binance.com", webSocketUrl = "wss://stream.binance.com/ws")
+public class SpotApiConfig implements BinanceApiConfig {
+
+}
diff --git a/src/main/java/com/binance/api/client/config/TestnetApiConfig.java b/src/main/java/com/binance/api/client/config/TestnetApiConfig.java
new file mode 100644
index 000000000..31b205cd7
--- /dev/null
+++ b/src/main/java/com/binance/api/client/config/TestnetApiConfig.java
@@ -0,0 +1,5 @@
+package com.binance.api.client.config;
+
+@ApiConfig(apiUrl = "https://testnet.binancefuture.com", webSocketUrl = "wss://stream.binancefuture.com/ws")
+public class TestnetApiConfig implements BinanceApiConfig {
+}
diff --git a/src/main/java/com/binance/api/client/domain/MarginType.java b/src/main/java/com/binance/api/client/domain/MarginType.java
new file mode 100644
index 000000000..c5f6b572c
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/MarginType.java
@@ -0,0 +1,13 @@
+package com.binance.api.client.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+/**
+ * Binance futures margin types
+ *
+ * @author Mahdi Sheikh Hosseini
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public enum MarginType {
+ ISOLATED, CROSSED;
+}
diff --git a/src/main/java/com/binance/api/client/domain/OrderType.java b/src/main/java/com/binance/api/client/domain/OrderType.java
index 78ee6b6fe..558610e44 100755
--- a/src/main/java/com/binance/api/client/domain/OrderType.java
+++ b/src/main/java/com/binance/api/client/domain/OrderType.java
@@ -7,11 +7,15 @@
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public enum OrderType {
- LIMIT,
- MARKET,
- STOP_LOSS,
- STOP_LOSS_LIMIT,
- TAKE_PROFIT,
- TAKE_PROFIT_LIMIT,
- LIMIT_MAKER
+ LIMIT,
+ MARKET,
+ STOP,
+ STOP_LOSS,
+ STOP_LOSS_LIMIT,
+ TAKE_PROFIT,
+ TAKE_PROFIT_LIMIT,
+ LIMIT_MAKER,
+ STOP_MARKET,
+ TRAILING_STOP_MARKET,
+ TAKE_PROFIT_MARKET;
}
diff --git a/src/main/java/com/binance/api/client/domain/PositionSide.java b/src/main/java/com/binance/api/client/domain/PositionSide.java
new file mode 100755
index 000000000..2aed098d2
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/PositionSide.java
@@ -0,0 +1,13 @@
+package com.binance.api.client.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+/**
+ * Buy/Sell order side.
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public enum PositionSide {
+ SHORT,
+ LONG,
+ BOTH
+}
diff --git a/src/main/java/com/binance/api/client/domain/PositionSideType.java b/src/main/java/com/binance/api/client/domain/PositionSideType.java
new file mode 100644
index 000000000..a82dec195
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/PositionSideType.java
@@ -0,0 +1,5 @@
+package com.binance.api.client.domain;
+
+public enum PositionSideType {
+ HEDGE_MODE, ONE_WAY
+}
diff --git a/src/main/java/com/binance/api/client/domain/PrecisionFormat.java b/src/main/java/com/binance/api/client/domain/PrecisionFormat.java
new file mode 100644
index 000000000..6600f87d0
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/PrecisionFormat.java
@@ -0,0 +1,41 @@
+package com.binance.api.client.domain;
+
+public enum PrecisionFormat {
+ ONE(1, "#.#"),
+ TWO(2, "#.##"),
+ THREE(3, "#.###"),
+ FOUR(4, "#.####"),
+ FIVE(5, "#.#####"),
+ SIX(6, "#.######"),
+ SEVEN(7, "#.#######"),
+ EIGHT(8, "#.########");
+
+ private final int len;
+ private final String format;
+
+ PrecisionFormat(int len, String format) {
+ this.len = len;
+ this.format = format;
+ }
+
+ public static String getPrecisionFormat(int len) {
+ switch (len) {
+ case 1:
+ return PrecisionFormat.ONE.format;
+ case 2:
+ return PrecisionFormat.TWO.format;
+ case 3:
+ return PrecisionFormat.THREE.format;
+ case 4:
+ return PrecisionFormat.FOUR.format;
+ case 5:
+ return PrecisionFormat.FIVE.format;
+ case 6:
+ return PrecisionFormat.SIX.format;
+ case 7:
+ return PrecisionFormat.SEVEN.format;
+ default:
+ return PrecisionFormat.EIGHT.format;
+ }
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/WorkingType.java b/src/main/java/com/binance/api/client/domain/WorkingType.java
new file mode 100755
index 000000000..a04d70303
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/WorkingType.java
@@ -0,0 +1,14 @@
+package com.binance.api.client.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+/**
+ * price type
+ *
+ * @author Mahdi Sheikh Hosseini
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public enum WorkingType {
+ CONTRACT_PRICE,
+ MARK_PRICE
+}
diff --git a/src/main/java/com/binance/api/client/domain/account/FuturesAccount.java b/src/main/java/com/binance/api/client/domain/account/FuturesAccount.java
new file mode 100755
index 000000000..831424c88
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/FuturesAccount.java
@@ -0,0 +1,210 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.List;
+
+/**
+ * Futures Account information.
+ */
+@JsonIgnoreProperties
+public class FuturesAccount {
+ private int feeTier;
+ private boolean canTrade;
+ private boolean canDeposit;
+ private boolean canWithdraw;
+ private long updateTime;
+ private String totalInitialMargin;
+ private String totalMaintMargin;
+ private String totalWalletBalance;
+ private String totalUnrealizedProfit;
+ private String totalMarginBalance;
+ private String totalPositionInitialMargin;
+ private String totalOpenOrderInitialMargin;
+ private String totalCrossWalletBalance;
+ private String totalCrossUnPnl;
+ private String availableBalance;
+ private String maxWithdrawAmount;
+
+ private List assets;
+ private List positions;
+
+ public int getFeeTier() {
+ return feeTier;
+ }
+
+ public void setFeeTier(int feeTier) {
+ this.feeTier = feeTier;
+ }
+
+ public boolean isCanTrade() {
+ return canTrade;
+ }
+
+ public void setCanTrade(boolean canTrade) {
+ this.canTrade = canTrade;
+ }
+
+ public boolean isCanDeposit() {
+ return canDeposit;
+ }
+
+ public void setCanDeposit(boolean canDeposit) {
+ this.canDeposit = canDeposit;
+ }
+
+ public boolean isCanWithdraw() {
+ return canWithdraw;
+ }
+
+ public void setCanWithdraw(boolean canWithdraw) {
+ this.canWithdraw = canWithdraw;
+ }
+
+ public long getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(long updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getTotalInitialMargin() {
+ return totalInitialMargin;
+ }
+
+ public void setTotalInitialMargin(String totalInitialMargin) {
+ this.totalInitialMargin = totalInitialMargin;
+ }
+
+ public String getTotalMaintMargin() {
+ return totalMaintMargin;
+ }
+
+ public void setTotalMaintMargin(String totalMaintMargin) {
+ this.totalMaintMargin = totalMaintMargin;
+ }
+
+ public String getTotalWalletBalance() {
+ return totalWalletBalance;
+ }
+
+ public void setTotalWalletBalance(String totalWalletBalance) {
+ this.totalWalletBalance = totalWalletBalance;
+ }
+
+ public String getTotalUnrealizedProfit() {
+ return totalUnrealizedProfit;
+ }
+
+ public void setTotalUnrealizedProfit(String totalUnrealizedProfit) {
+ this.totalUnrealizedProfit = totalUnrealizedProfit;
+ }
+
+ public String getTotalMarginBalance() {
+ return totalMarginBalance;
+ }
+
+ public void setTotalMarginBalance(String totalMarginBalance) {
+ this.totalMarginBalance = totalMarginBalance;
+ }
+
+ public String getTotalPositionInitialMargin() {
+ return totalPositionInitialMargin;
+ }
+
+ public void setTotalPositionInitialMargin(String totalPositionInitialMargin) {
+ this.totalPositionInitialMargin = totalPositionInitialMargin;
+ }
+
+ public String getTotalOpenOrderInitialMargin() {
+ return totalOpenOrderInitialMargin;
+ }
+
+ public void setTotalOpenOrderInitialMargin(String totalOpenOrderInitialMargin) {
+ this.totalOpenOrderInitialMargin = totalOpenOrderInitialMargin;
+ }
+
+ public String getTotalCrossWalletBalance() {
+ return totalCrossWalletBalance;
+ }
+
+ public void setTotalCrossWalletBalance(String totalCrossWalletBalance) {
+ this.totalCrossWalletBalance = totalCrossWalletBalance;
+ }
+
+ public String getTotalCrossUnPnl() {
+ return totalCrossUnPnl;
+ }
+
+ public void setTotalCrossUnPnl(String totalCrossUnPnl) {
+ this.totalCrossUnPnl = totalCrossUnPnl;
+ }
+
+ public String getAvailableBalance() {
+ return availableBalance;
+ }
+
+ public void setAvailableBalance(String availableBalance) {
+ this.availableBalance = availableBalance;
+ }
+
+ public String getMaxWithdrawAmount() {
+ return maxWithdrawAmount;
+ }
+
+ public void setMaxWithdrawAmount(String maxWithdrawAmount) {
+ this.maxWithdrawAmount = maxWithdrawAmount;
+ }
+
+ public List getAssets() {
+ return assets;
+ }
+
+ public List getPositions() {
+ return positions;
+ }
+
+ public void setPositions(List positions) {
+ this.positions = positions;
+ }
+
+ public void setAssets(List assets) {
+ this.assets = assets;
+ }
+
+ public FuturesAssetBalance getAssetBalance(final String symbol) {
+ return assets.stream()
+ .filter(marginAssetBalance -> marginAssetBalance.getAsset().equals(symbol))
+ .findFirst()
+ .orElse(FuturesAssetBalance.of(symbol));
+ }
+
+ public FuturesPosition getPosition(final String symbol) {
+ return positions.stream()
+ .filter(e -> e.getSymbol().equals(symbol))
+ .findFirst()
+ .orElse(null);
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("totalInitialMargin", totalInitialMargin)
+ .append("totalMaintMargin", totalMaintMargin)
+ .append("totalWalletBalance", totalWalletBalance)
+ .append("totalUnrealizedProfit", totalUnrealizedProfit)
+ .append("totalMarginBalance", totalMarginBalance)
+ .append("totalPositionInitialMargin", totalPositionInitialMargin)
+ .append("totalOpenOrderInitialMargin", totalOpenOrderInitialMargin)
+ .append("totalCrossWalletBalance", totalCrossWalletBalance)
+ .append("totalCrossUnPnl", totalCrossUnPnl)
+ .append("availableBalance", availableBalance)
+ .append("maxWithdrawAmount", maxWithdrawAmount)
+ .toString();
+
+
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/account/FuturesAssetBalance.java b/src/main/java/com/binance/api/client/domain/account/FuturesAssetBalance.java
new file mode 100755
index 000000000..6998b6c2c
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/FuturesAssetBalance.java
@@ -0,0 +1,146 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * An asset balance in an Account.
+ *
+ * @see Account
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class FuturesAssetBalance {
+ private String asset;
+ private String walletBalance;
+ private String unrealizedProfit;
+ private String marginBalance;
+ private String maintMargin;
+ private String initialMargin;
+ private String positionInitialMargin;
+ private String openOrderInitialMargin;
+ private String crossWalletBalance;
+ private String crossUnPnl;
+ private String availableBalance;
+ private String maxWithdrawAmount;
+
+ public String getAsset() {
+ return asset;
+ }
+
+ public void setAsset(String asset) {
+ this.asset = asset;
+ }
+
+ public String getWalletBalance() {
+ return walletBalance;
+ }
+
+ public void setWalletBalance(String walletBalance) {
+ this.walletBalance = walletBalance;
+ }
+
+ public String getUnrealizedProfit() {
+ return unrealizedProfit;
+ }
+
+ public void setUnrealizedProfit(String unrealizedProfit) {
+ this.unrealizedProfit = unrealizedProfit;
+ }
+
+ public String getMarginBalance() {
+ return marginBalance;
+ }
+
+ public void setMarginBalance(String marginBalance) {
+ this.marginBalance = marginBalance;
+ }
+
+ public String getMaintMargin() {
+ return maintMargin;
+ }
+
+ public void setMaintMargin(String maintMargin) {
+ this.maintMargin = maintMargin;
+ }
+
+ public String getInitialMargin() {
+ return initialMargin;
+ }
+
+ public void setInitialMargin(String initialMargin) {
+ this.initialMargin = initialMargin;
+ }
+
+ public String getPositionInitialMargin() {
+ return positionInitialMargin;
+ }
+
+ public void setPositionInitialMargin(String positionInitialMargin) {
+ this.positionInitialMargin = positionInitialMargin;
+ }
+
+ public String getOpenOrderInitialMargin() {
+ return openOrderInitialMargin;
+ }
+
+ public void setOpenOrderInitialMargin(String openOrderInitialMargin) {
+ this.openOrderInitialMargin = openOrderInitialMargin;
+ }
+
+ public String getCrossWalletBalance() {
+ return crossWalletBalance;
+ }
+
+ public void setCrossWalletBalance(String crossWalletBalance) {
+ this.crossWalletBalance = crossWalletBalance;
+ }
+
+ public String getCrossUnPnl() {
+ return crossUnPnl;
+ }
+
+ public void setCrossUnPnl(String crossUnPnl) {
+ this.crossUnPnl = crossUnPnl;
+ }
+
+ public String getAvailableBalance() {
+ return availableBalance;
+ }
+
+ public void setAvailableBalance(String availableBalance) {
+ this.availableBalance = availableBalance;
+ }
+
+ public String getMaxWithdrawAmount() {
+ return maxWithdrawAmount;
+ }
+
+ public void setMaxWithdrawAmount(String maxWithdrawAmount) {
+ this.maxWithdrawAmount = maxWithdrawAmount;
+ }
+
+ public static FuturesAssetBalance of(final String asset) {
+ final FuturesAssetBalance assetBalance = new FuturesAssetBalance();
+ assetBalance.setAsset(asset);
+ return assetBalance;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("asset", asset)
+ .append("walletBalance", walletBalance)
+ .append("unrealizedProfit", unrealizedProfit)
+ .append("marginBalance", marginBalance)
+ .append("maintMargin", maintMargin)
+ .append("initialMargin", initialMargin)
+ .append("positionInitialMargin", positionInitialMargin)
+ .append("openOrderInitialMargin", openOrderInitialMargin)
+ .append("crossWalletBalance", crossWalletBalance)
+ .append("crossUnPnl", crossUnPnl)
+ .append("availableBalance", availableBalance)
+ .append("maxWithdrawAmount", maxWithdrawAmount)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/account/FuturesNewOrder.java b/src/main/java/com/binance/api/client/domain/account/FuturesNewOrder.java
new file mode 100644
index 000000000..01ec03b0c
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/FuturesNewOrder.java
@@ -0,0 +1,414 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.binance.api.client.domain.*;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+/**
+ * A trade order to enter or exit a position.
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class FuturesNewOrder {
+
+ /**
+ * Symbol to place the order on.
+ */
+ private String symbol;
+
+ /**
+ * Buy/Sell order side.
+ */
+ private OrderSide side;
+
+ /**
+ * Type of orderSide
+ */
+ private PositionSide positionSide;
+
+ /**
+ * Type of order.
+ */
+ private OrderType type;
+
+ /**
+ * Time in force to indicate how long will the order remain active.
+ */
+ private TimeInForce timeInForce;
+
+ /**
+ * Quantity.
+ */
+ private String quantity;
+
+ /**
+ * reduceOnly.
+ */
+ private Boolean reduceOnly;
+
+ /**
+ * Price.
+ */
+ private String price;
+
+ /**
+ * A unique id for the order. Automatically generated if not sent.
+ */
+ private String newClientOrderId;
+
+ /**
+ * Used with stop orders.
+ */
+ private String stopPrice;
+
+ /**
+ * Used with close position true/false used with STOP_MARKET or TAKE_PROFIT_MARKET.
+ */
+ private boolean closePosition;
+
+ /**
+ * Used with TRAILING_STOP_MARKET.
+ */
+ private String activationPrice;
+
+ /**
+ * callbackRate
+ */
+ private String callbackRate;
+
+ /**
+ * workingType
+ */
+ private WorkingType workingType;
+
+ /**
+ * priceProtect
+ */
+ private boolean priceProtect;
+
+ /**
+ * Set the response JSON. ACK, RESULT, or FULL; default: RESULT.
+ */
+ private NewOrderResponseType newOrderRespType;
+
+ /**
+ * Receiving window.
+ */
+ private Long recvWindow;
+
+ /**
+ * Order timestamp.
+ */
+ private long timestamp;
+
+ public FuturesNewOrder() {
+ }
+
+ /**
+ * Creates a new order with all required parameters.
+ */
+
+ public FuturesNewOrder(String symbol, OrderSide side, OrderType type, TimeInForce timeInForce, WorkingType workingType, String quantity, String price, boolean reduceOnly) {
+ this.symbol = symbol;
+ this.side = side;
+ this.type = type;
+ this.timeInForce = timeInForce;
+ this.workingType = workingType;
+ this.quantity = quantity;
+ this.price = price;
+ this.reduceOnly = reduceOnly;
+ this.newOrderRespType = NewOrderResponseType.RESULT;
+ this.timestamp = System.currentTimeMillis();
+ this.recvWindow = BinanceApiConstants.DEFAULT_RECEIVING_WINDOW;
+ }
+
+ public FuturesNewOrder(String symbol, OrderSide side, OrderType type, String quantity, boolean reduceOnly) {
+ this.symbol = symbol;
+ this.side = side;
+ this.type = type;
+ this.quantity = quantity;
+ this.reduceOnly = reduceOnly;
+ this.newOrderRespType = NewOrderResponseType.RESULT;
+ this.timestamp = System.currentTimeMillis();
+ this.recvWindow = BinanceApiConstants.DEFAULT_RECEIVING_WINDOW;
+ }
+
+ public FuturesNewOrder(String symbol, OrderSide side, OrderType type, TimeInForce timeInForce, String quantity, String price, WorkingType workingType, boolean reduceOnly) {
+ this.symbol = symbol;
+ this.side = side;
+ this.type = type;
+ this.timeInForce = timeInForce;
+ this.quantity = quantity;
+ this.price = price;
+ this.workingType = workingType;
+ this.reduceOnly = reduceOnly;
+ this.newOrderRespType = NewOrderResponseType.RESULT;
+ this.timestamp = System.currentTimeMillis();
+ this.recvWindow = BinanceApiConstants.DEFAULT_RECEIVING_WINDOW;
+ }
+
+ public FuturesNewOrder(String symbol, OrderSide side, OrderType type, TimeInForce timeInForce, WorkingType workingType, String quantity, String price) {
+ this.symbol = symbol;
+ this.side = side;
+ this.type = type;
+ this.timeInForce = timeInForce;
+ this.workingType = workingType;
+ this.quantity = quantity;
+ this.price = price;
+ this.newOrderRespType = NewOrderResponseType.RESULT;
+ this.timestamp = System.currentTimeMillis();
+ this.recvWindow = BinanceApiConstants.DEFAULT_RECEIVING_WINDOW;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public OrderSide getSide() {
+ return side;
+ }
+
+ public void setSide(OrderSide side) {
+ this.side = side;
+ }
+
+ public PositionSide getPositionSide() {
+ return positionSide;
+ }
+
+ public void setPositionSide(PositionSide positionSide) {
+ this.positionSide = positionSide;
+ }
+
+ public OrderType getType() {
+ return type;
+ }
+
+ public void setType(OrderType type) {
+ this.type = type;
+ }
+
+ public TimeInForce getTimeInForce() {
+ return timeInForce;
+ }
+
+ public void setTimeInForce(TimeInForce timeInForce) {
+ this.timeInForce = timeInForce;
+ }
+
+ public String getQuantity() {
+ return quantity;
+ }
+
+ public void setQuantity(String quantity) {
+ this.quantity = quantity;
+ }
+
+ public Boolean isReduceOnly() {
+ return reduceOnly;
+ }
+
+ public void setReduceOnly(Boolean reduceOnly) {
+ this.reduceOnly = reduceOnly;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getNewClientOrderId() {
+ return newClientOrderId;
+ }
+
+ public void setNewClientOrderId(String newClientOrderId) {
+ this.newClientOrderId = newClientOrderId;
+ }
+
+ public String getStopPrice() {
+ return stopPrice;
+ }
+
+ public void setStopPrice(String stopPrice) {
+ this.stopPrice = stopPrice;
+ }
+
+ public boolean isClosePosition() {
+ return closePosition;
+ }
+
+ public void setClosePosition(boolean closePosition) {
+ this.closePosition = closePosition;
+ }
+
+ public String getActivationPrice() {
+ return activationPrice;
+ }
+
+ public void setActivationPrice(String activationPrice) {
+ this.activationPrice = activationPrice;
+ }
+
+ public String getCallbackRate() {
+ return callbackRate;
+ }
+
+ public void setCallbackRate(String callbackRate) {
+ this.callbackRate = callbackRate;
+ }
+
+ public WorkingType getWorkingType() {
+ return workingType;
+ }
+
+ public void setWorkingType(WorkingType workingType) {
+ this.workingType = workingType;
+ }
+
+ public boolean isPriceProtect() {
+ return priceProtect;
+ }
+
+ public void setPriceProtect(boolean priceProtect) {
+ this.priceProtect = priceProtect;
+ }
+
+ public NewOrderResponseType getNewOrderRespType() {
+ return newOrderRespType;
+ }
+
+ public void setNewOrderRespType(NewOrderResponseType newOrderRespType) {
+ this.newOrderRespType = newOrderRespType;
+ }
+
+ public Long getRecvWindow() {
+ return recvWindow;
+ }
+
+ public void setRecvWindow(Long recvWindow) {
+ this.recvWindow = recvWindow;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public static FuturesNewOrder limitLong(String symbol, TimeInForce timeInForce, String quantity, String price, WorkingType workingType, boolean reduceOnly) {
+ return new FuturesNewOrder(symbol, OrderSide.BUY, OrderType.LIMIT, timeInForce, quantity, price, workingType, reduceOnly);
+ }
+
+ public static FuturesNewOrder limitShort(String symbol, TimeInForce timeInForce, String quantity, String price, WorkingType workingType, boolean reduceOnly) {
+ return new FuturesNewOrder(symbol, OrderSide.SELL, OrderType.LIMIT, timeInForce, quantity, price, workingType, reduceOnly);
+ }
+
+ public static FuturesNewOrder MarketLong(String symbol, String quantity, boolean reduceOnly) {
+ return new FuturesNewOrder(symbol, OrderSide.BUY, OrderType.MARKET, quantity, reduceOnly);
+ }
+
+ public static FuturesNewOrder MarketShort(String symbol, String quantity, boolean reduceOnly) {
+ return new FuturesNewOrder(symbol, OrderSide.SELL, OrderType.MARKET, quantity, reduceOnly);
+ }
+
+ public static FuturesNewOrder stopLimitLong(String symbol, String quantity, String stopPrice, String price, WorkingType workingType, boolean reduceOnly) {
+ FuturesNewOrder futuresNewOrder = new FuturesNewOrder(symbol, OrderSide.BUY, OrderType.STOP, quantity, reduceOnly);
+ futuresNewOrder.setStopPrice(stopPrice);
+ futuresNewOrder.setPrice(price);
+ futuresNewOrder.workingType = workingType;
+ return futuresNewOrder;
+ }
+
+ public static FuturesNewOrder stopLimitShort(String symbol, String quantity, String stopPrice, String price, WorkingType workingType, boolean reduceOnly) {
+ FuturesNewOrder futuresNewOrder = new FuturesNewOrder(symbol, OrderSide.SELL, OrderType.STOP, quantity, reduceOnly);
+ futuresNewOrder.setStopPrice(stopPrice);
+ futuresNewOrder.setPrice(price);
+ futuresNewOrder.workingType = workingType;
+ return futuresNewOrder;
+ }
+
+ public static FuturesNewOrder stopMarket(String symbol, OrderSide orderSide, String stopPrice, WorkingType workingType) {
+ FuturesNewOrder order = new FuturesNewOrder();
+ order.setSymbol(symbol);
+ order.setSide(orderSide);
+ order.setStopPrice(stopPrice);
+ order.setClosePosition(true);
+ order.setWorkingType(workingType);
+ order.setType(OrderType.STOP_MARKET);
+ order.setNewOrderRespType(NewOrderResponseType.RESULT);
+ order.setTimestamp(System.currentTimeMillis());
+ order.setRecvWindow(BinanceApiConstants.DEFAULT_RECEIVING_WINDOW);
+ return order;
+ }
+
+ public static FuturesNewOrder takeProfitMarket(String symbol, OrderSide orderSide, String stopPrice, WorkingType workingType) {
+ FuturesNewOrder order = new FuturesNewOrder();
+ order.setSymbol(symbol);
+ order.setSide(orderSide);
+ order.setStopPrice(stopPrice);
+ order.setClosePosition(true);
+ order.setWorkingType(workingType);
+ order.setType(OrderType.TAKE_PROFIT_MARKET);
+ order.setNewOrderRespType(NewOrderResponseType.RESULT);
+ order.setTimestamp(System.currentTimeMillis());
+ order.setRecvWindow(BinanceApiConstants.DEFAULT_RECEIVING_WINDOW);
+ return order;
+ }
+
+ public static FuturesNewOrder limitHedgeOrder(String symbol, OrderSide orderSide, PositionSide positionSide, TimeInForce timeInForce, String quantity, String price,WorkingType workingType) {
+ FuturesNewOrder order = new FuturesNewOrder();
+ order.setSymbol(symbol);
+ order.setType(OrderType.LIMIT);
+ order.setPositionSide(positionSide);
+ order.setSide(orderSide);
+ order.setTimeInForce(timeInForce);
+ order.setQuantity(quantity);
+ order.setPrice(price);
+ order.setWorkingType(workingType);
+ order.setNewOrderRespType(NewOrderResponseType.RESULT);
+ order.setTimestamp(System.currentTimeMillis());
+ order.setRecvWindow(BinanceApiConstants.DEFAULT_RECEIVING_WINDOW);
+ return order;
+ }
+
+ public static FuturesNewOrder stopLimitHedgeOrder(String symbol, OrderSide orderSide, PositionSide positionSide, TimeInForce timeInForce, String quantity, String stopPrice, String price,WorkingType workingType) {
+ FuturesNewOrder order = new FuturesNewOrder();
+ order.setSymbol(symbol);
+ order.setType(OrderType.STOP);
+ order.setPositionSide(positionSide);
+ order.setSide(orderSide);
+ order.setTimeInForce(timeInForce);
+ order.setQuantity(quantity);
+ order.setStopPrice(stopPrice);
+ order.setPrice(price);
+ order.setWorkingType(workingType);
+ order.setNewOrderRespType(NewOrderResponseType.RESULT);
+ order.setTimestamp(System.currentTimeMillis());
+ order.setRecvWindow(BinanceApiConstants.DEFAULT_RECEIVING_WINDOW);
+ return order;
+ }
+
+ public static FuturesNewOrder stopLoseHedgeOrder(String symbol, OrderSide orderSide, PositionSide positionSide, String stopPrice, WorkingType workingType) {
+ FuturesNewOrder order = new FuturesNewOrder();
+ order.setSymbol(symbol);
+ order.setType(OrderType.STOP_MARKET);
+ order.setPositionSide(positionSide);
+ order.setSide(orderSide);
+ order.setStopPrice(stopPrice);
+ order.setClosePosition(true);
+ order.setWorkingType(workingType);
+ order.setNewOrderRespType(NewOrderResponseType.RESULT);
+ order.setTimestamp(System.currentTimeMillis());
+ order.setRecvWindow(BinanceApiConstants.DEFAULT_RECEIVING_WINDOW);
+ return order;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/api/client/domain/account/FuturesNewOrderResponse.java b/src/main/java/com/binance/api/client/domain/account/FuturesNewOrderResponse.java
new file mode 100644
index 000000000..339383643
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/FuturesNewOrderResponse.java
@@ -0,0 +1,255 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.binance.api.client.domain.OrderSide;
+import com.binance.api.client.domain.OrderStatus;
+import com.binance.api.client.domain.PositionSide;
+import com.binance.api.client.domain.WorkingType;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * Response returned when placing a new order on the system.
+ *
+ * @see NewOrder for the request
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class FuturesNewOrderResponse {
+
+ private String clientOrderId;
+ private String cumQty;
+ private String cumQuote;
+ private String executedQty;
+ private long orderId;
+ private String avgPrice;
+ private String origQty;
+ private String price;
+ private boolean reduceOnly;
+ private OrderSide side;
+ private PositionSide positionSide;
+ private OrderStatus status;
+ private String stopPrice;
+ private boolean closePosition;
+ private String symbol;
+ private String timeInForce;
+ private String type;
+ private String origType;
+ private String activatePrice;
+ private String priceRate;
+ private long updateTime;
+ private WorkingType workingType;
+ private boolean priceProtect;
+
+ public String getClientOrderId() {
+ return clientOrderId;
+ }
+
+ public void setClientOrderId(String clientOrderId) {
+ this.clientOrderId = clientOrderId;
+ }
+
+ public String getCumQty() {
+ return cumQty;
+ }
+
+ public void setCumQty(String cumQty) {
+ this.cumQty = cumQty;
+ }
+
+ public String getCumQuote() {
+ return cumQuote;
+ }
+
+ public void setCumQuote(String cumQuote) {
+ this.cumQuote = cumQuote;
+ }
+
+ public String getExecutedQty() {
+ return executedQty;
+ }
+
+ public void setExecutedQty(String executedQty) {
+ this.executedQty = executedQty;
+ }
+
+ public long getOrderId() {
+ return orderId;
+ }
+
+ public void setOrderId(long orderId) {
+ this.orderId = orderId;
+ }
+
+ public String getAvgPrice() {
+ return avgPrice;
+ }
+
+ public void setAvgPrice(String avgPrice) {
+ this.avgPrice = avgPrice;
+ }
+
+ public String getOrigQty() {
+ return origQty;
+ }
+
+ public void setOrigQty(String origQty) {
+ this.origQty = origQty;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public boolean isReduceOnly() {
+ return reduceOnly;
+ }
+
+ public void setReduceOnly(boolean reduceOnly) {
+ this.reduceOnly = reduceOnly;
+ }
+
+ public OrderSide getSide() {
+ return side;
+ }
+
+ public void setSide(OrderSide side) {
+ this.side = side;
+ }
+
+ public PositionSide getPositionSide() {
+ return positionSide;
+ }
+
+ public void setPositionSide(PositionSide positionSide) {
+ this.positionSide = positionSide;
+ }
+
+ public OrderStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(OrderStatus status) {
+ this.status = status;
+ }
+
+ public String getStopPrice() {
+ return stopPrice;
+ }
+
+ public void setStopPrice(String stopPrice) {
+ this.stopPrice = stopPrice;
+ }
+
+ public boolean isClosePosition() {
+ return closePosition;
+ }
+
+ public void setClosePosition(boolean closePosition) {
+ this.closePosition = closePosition;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public String getTimeInForce() {
+ return timeInForce;
+ }
+
+ public void setTimeInForce(String timeInForce) {
+ this.timeInForce = timeInForce;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getOrigType() {
+ return origType;
+ }
+
+ public void setOrigType(String origType) {
+ this.origType = origType;
+ }
+
+ public String getActivatePrice() {
+ return activatePrice;
+ }
+
+ public void setActivatePrice(String activatePrice) {
+ this.activatePrice = activatePrice;
+ }
+
+ public String getPriceRate() {
+ return priceRate;
+ }
+
+ public void setPriceRate(String priceRate) {
+ this.priceRate = priceRate;
+ }
+
+ public long getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(long updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public WorkingType getWorkingType() {
+ return workingType;
+ }
+
+ public void setWorkingType(WorkingType workingType) {
+ this.workingType = workingType;
+ }
+
+ public boolean isPriceProtect() {
+ return priceProtect;
+ }
+
+ public void setPriceProtect(boolean priceProtect) {
+ this.priceProtect = priceProtect;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("clientOrderId", clientOrderId)
+ .append("cumQty", cumQty)
+ .append("cumQuote", cumQuote)
+ .append("executedQty", executedQty)
+ .append("orderId", orderId)
+ .append("avgPrice", avgPrice)
+ .append("origQty", origQty)
+ .append("price", price)
+ .append("reduceOnly", reduceOnly)
+ .append("side", side)
+ .append("positionSide", positionSide)
+ .append("status", status)
+ .append("stopPrice", stopPrice)
+ .append("closePosition", closePosition)
+ .append("symbol", symbol)
+ .append("timeInForce", timeInForce)
+ .append("type", type)
+ .append("origType", origType)
+ .append("activatePrice", activatePrice)
+ .append("priceRate", priceRate)
+ .append("updateTime", updateTime)
+ .append("workingType", workingType)
+ .append("priceProtect", priceProtect)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/account/FuturesPosition.java b/src/main/java/com/binance/api/client/domain/account/FuturesPosition.java
new file mode 100755
index 000000000..0ba301247
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/FuturesPosition.java
@@ -0,0 +1,141 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.binance.api.client.domain.PositionSide;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * An asset balance in an Account.
+ *
+ * @see Account
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class FuturesPosition {
+ private String symbol;
+ private String initialMargin;
+ private String maintMargin;
+ private String unrealizedProfit;
+ private String positionInitialMargin;
+ private String openOrderInitialMargin;
+ private String leverage;
+ private boolean isolated;
+ private String entryPrice;
+ private String maxNotional;
+ private PositionSide positionSide;
+ private String positionAmt;
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public String getInitialMargin() {
+ return initialMargin;
+ }
+
+ public void setInitialMargin(String initialMargin) {
+ this.initialMargin = initialMargin;
+ }
+
+ public String getMaintMargin() {
+ return maintMargin;
+ }
+
+ public void setMaintMargin(String maintMargin) {
+ this.maintMargin = maintMargin;
+ }
+
+ public String getUnrealizedProfit() {
+ return unrealizedProfit;
+ }
+
+ public void setUnrealizedProfit(String unrealizedProfit) {
+ this.unrealizedProfit = unrealizedProfit;
+ }
+
+ public String getPositionInitialMargin() {
+ return positionInitialMargin;
+ }
+
+ public void setPositionInitialMargin(String positionInitialMargin) {
+ this.positionInitialMargin = positionInitialMargin;
+ }
+
+ public String getOpenOrderInitialMargin() {
+ return openOrderInitialMargin;
+ }
+
+ public void setOpenOrderInitialMargin(String openOrderInitialMargin) {
+ this.openOrderInitialMargin = openOrderInitialMargin;
+ }
+
+ public String getLeverage() {
+ return leverage;
+ }
+
+ public void setLeverage(String leverage) {
+ this.leverage = leverage;
+ }
+
+ public boolean isIsolated() {
+ return isolated;
+ }
+
+ public void setIsolated(boolean isolated) {
+ this.isolated = isolated;
+ }
+
+ public String getEntryPrice() {
+ return entryPrice;
+ }
+
+ public void setEntryPrice(String entryPrice) {
+ this.entryPrice = entryPrice;
+ }
+
+ public String getMaxNotional() {
+ return maxNotional;
+ }
+
+ public void setMaxNotional(String maxNotional) {
+ this.maxNotional = maxNotional;
+ }
+
+ public PositionSide getPositionSide() {
+ return positionSide;
+ }
+
+ public void setPositionSide(PositionSide positionSide) {
+ this.positionSide = positionSide;
+ }
+
+ public String getPositionAmt() {
+ return positionAmt;
+ }
+
+ public void setPositionAmt(String positionAmt) {
+ this.positionAmt = positionAmt;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("symbol", symbol)
+ .append("initialMargin", initialMargin)
+ .append("maintMargin", maintMargin)
+ .append("unrealizedProfit", unrealizedProfit)
+ .append("positionInitialMargin", positionInitialMargin)
+ .append("openOrderInitialMargin", openOrderInitialMargin)
+ .append("leverage", leverage)
+ .append("isolated", isolated)
+ .append("entryPrice", entryPrice)
+ .append("maxNotional", maxNotional)
+ .append("positionSide", positionSide)
+ .append("positionAmt", positionAmt)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/account/LeverageRequest.java b/src/main/java/com/binance/api/client/domain/account/LeverageRequest.java
new file mode 100644
index 000000000..1e59e0eba
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/LeverageRequest.java
@@ -0,0 +1,68 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class LeverageRequest {
+
+ private String symbol;
+ private int leverage;
+ private long recvWindow;
+ private long timestamp;
+
+ public LeverageRequest() {
+ this.timestamp = System.currentTimeMillis();
+ this.recvWindow = BinanceApiConstants.DEFAULT_RECEIVING_WINDOW;
+ }
+
+ public LeverageRequest(String symbol, int leverage) {
+ this.symbol = symbol;
+ this.leverage = leverage;
+ this.timestamp = System.currentTimeMillis();
+ this.recvWindow = BinanceApiConstants.DEFAULT_RECEIVING_WINDOW;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public int getLeverage() {
+ return leverage;
+ }
+
+ public void setLeverage(int leverage) {
+ this.leverage = leverage;
+ }
+
+ public long getRecvWindow() {
+ return recvWindow;
+ }
+
+ public void setRecvWindow(long recvWindow) {
+ this.recvWindow = recvWindow;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("symbol", symbol)
+ .append("leverage", leverage)
+ .append("recvWindow", recvWindow)
+ .append("timestamp", timestamp)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/account/LeverageResponse.java b/src/main/java/com/binance/api/client/domain/account/LeverageResponse.java
new file mode 100644
index 000000000..2271aa9ed
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/LeverageResponse.java
@@ -0,0 +1,46 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class LeverageResponse {
+
+ private String symbol;
+ private int leverage;
+ private String maxNotionalValue;
+
+ public int getLeverage() {
+ return leverage;
+ }
+
+ public void setLeverage(int leverage) {
+ this.leverage = leverage;
+ }
+
+ public String getMaxNotionalValue() {
+ return maxNotionalValue;
+ }
+
+ public void setMaxNotionalValue(String maxNotionalValue) {
+ this.maxNotionalValue = maxNotionalValue;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("symbol", symbol)
+ .append("leverage", leverage)
+ .append("maxNotionalValue", maxNotionalValue)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/account/MarginNewOrder.java b/src/main/java/com/binance/api/client/domain/account/MarginNewOrder.java
old mode 100755
new mode 100644
diff --git a/src/main/java/com/binance/api/client/domain/account/MarginNewOrderResponse.java b/src/main/java/com/binance/api/client/domain/account/MarginNewOrderResponse.java
old mode 100755
new mode 100644
diff --git a/src/main/java/com/binance/api/client/domain/account/MarginTypeRequest.java b/src/main/java/com/binance/api/client/domain/account/MarginTypeRequest.java
new file mode 100644
index 000000000..d4615e0b1
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/MarginTypeRequest.java
@@ -0,0 +1,73 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.binance.api.client.domain.MarginType;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * @author Mahdi Sheikh Hosseini
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class MarginTypeRequest {
+
+ private String symbol;
+ private MarginType marginType;
+ private long recvWindow;
+ private long timestamp;
+
+ public MarginTypeRequest() {
+ this.timestamp = System.currentTimeMillis();
+ this.recvWindow = BinanceApiConstants.DEFAULT_RECEIVING_WINDOW;
+ }
+
+ public MarginTypeRequest(String symbol, MarginType marginType) {
+ this.symbol = symbol;
+ this.marginType = marginType;
+ this.timestamp = System.currentTimeMillis();
+ this.recvWindow = BinanceApiConstants.DEFAULT_RECEIVING_WINDOW;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public MarginType getMarginType() {
+ return marginType;
+ }
+
+ public void setMarginType(MarginType marginType) {
+ this.marginType = marginType;
+ }
+
+ public long getRecvWindow() {
+ return recvWindow;
+ }
+
+ public void setRecvWindow(long recvWindow) {
+ this.recvWindow = recvWindow;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("symbol", symbol)
+ .append("marginType", marginType)
+ .append("recvWindow", recvWindow)
+ .append("timestamp", timestamp)
+ .toString();
+ }
+
+}
diff --git a/src/main/java/com/binance/api/client/domain/account/NewOrder.java b/src/main/java/com/binance/api/client/domain/account/NewOrder.java
old mode 100755
new mode 100644
diff --git a/src/main/java/com/binance/api/client/domain/account/NewOrderResponse.java b/src/main/java/com/binance/api/client/domain/account/NewOrderResponse.java
old mode 100755
new mode 100644
diff --git a/src/main/java/com/binance/api/client/domain/account/NewOrderResponseType.java b/src/main/java/com/binance/api/client/domain/account/NewOrderResponseType.java
old mode 100755
new mode 100644
diff --git a/src/main/java/com/binance/api/client/domain/account/Order.java b/src/main/java/com/binance/api/client/domain/account/Order.java
old mode 100755
new mode 100644
diff --git a/src/main/java/com/binance/api/client/domain/account/PositionInformation.java b/src/main/java/com/binance/api/client/domain/account/PositionInformation.java
new file mode 100755
index 000000000..bbb8929cd
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/account/PositionInformation.java
@@ -0,0 +1,142 @@
+package com.binance.api.client.domain.account;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.binance.api.client.domain.MarginType;
+import com.binance.api.client.domain.PositionSide;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * An asset balance in an Account.
+ *
+ * @see Account
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class PositionInformation {
+ private String entryPrice;
+ private String marginType;
+ private boolean isAutoAddMargin;
+ private String isolatedMargin;
+ private int leverage;
+ private String liquidationPrice;
+ private String markPrice;
+ private String maxNotionalValue;
+ private String positionAmt;
+ private String symbol;
+ private String unRealizedProfit;
+ private PositionSide positionSide;
+
+ public String getEntryPrice() {
+ return entryPrice;
+ }
+
+ public void setEntryPrice(String entryPrice) {
+ this.entryPrice = entryPrice;
+ }
+
+ public String getMarginType() {
+ return marginType;
+ }
+
+ public void setMarginType(String marginType) {
+ this.marginType = marginType;
+ }
+
+ public boolean isAutoAddMargin() {
+ return isAutoAddMargin;
+ }
+
+ public void setAutoAddMargin(boolean autoAddMargin) {
+ isAutoAddMargin = autoAddMargin;
+ }
+
+ public String getIsolatedMargin() {
+ return isolatedMargin;
+ }
+
+ public void setIsolatedMargin(String isolatedMargin) {
+ this.isolatedMargin = isolatedMargin;
+ }
+
+ public int getLeverage() {
+ return leverage;
+ }
+
+ public void setLeverage(int leverage) {
+ this.leverage = leverage;
+ }
+
+ public String getLiquidationPrice() {
+ return liquidationPrice;
+ }
+
+ public void setLiquidationPrice(String liquidationPrice) {
+ this.liquidationPrice = liquidationPrice;
+ }
+
+ public String getMarkPrice() {
+ return markPrice;
+ }
+
+ public void setMarkPrice(String markPrice) {
+ this.markPrice = markPrice;
+ }
+
+ public String getMaxNotionalValue() {
+ return maxNotionalValue;
+ }
+
+ public void setMaxNotionalValue(String maxNotionalValue) {
+ this.maxNotionalValue = maxNotionalValue;
+ }
+
+ public String getPositionAmt() {
+ return positionAmt;
+ }
+
+ public void setPositionAmt(String positionAmt) {
+ this.positionAmt = positionAmt;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public String getUnRealizedProfit() {
+ return unRealizedProfit;
+ }
+
+ public void setUnRealizedProfit(String unRealizedProfit) {
+ this.unRealizedProfit = unRealizedProfit;
+ }
+
+ public PositionSide getPositionSide() {
+ return positionSide;
+ }
+
+ public void setPositionSide(PositionSide positionSide) {
+ this.positionSide = positionSide;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("entryPrice", entryPrice)
+ .append("marginType", marginType)
+ .append("isAutoAddMargin", isAutoAddMargin)
+ .append("isolatedMargin", isolatedMargin)
+ .append("leverage", leverage)
+ .append("liquidationPrice", liquidationPrice)
+ .append("markPrice", markPrice)
+ .append("maxNotionalValue", maxNotionalValue)
+ .append("positionAmt", positionAmt)
+ .append("symbol", symbol)
+ .append("unRealizedProfit", unRealizedProfit)
+ .append("positionSide", positionSide)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/event/CandlestickEvent.java b/src/main/java/com/binance/api/client/domain/event/CandlestickEvent.java
index f7c04b3df..7620735e4 100755
--- a/src/main/java/com/binance/api/client/domain/event/CandlestickEvent.java
+++ b/src/main/java/com/binance/api/client/domain/event/CandlestickEvent.java
@@ -1,10 +1,10 @@
package com.binance.api.client.domain.event;
import com.binance.api.client.constant.BinanceApiConstants;
+import com.binance.api.client.domain.market.CandlestickInterval;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
import org.apache.commons.lang3.builder.ToStringBuilder;
/**
@@ -15,207 +15,190 @@
@JsonIgnoreProperties(ignoreUnknown = true)
public class CandlestickEvent {
- private String eventType;
-
- private long eventTime;
-
- private String symbol;
-
- private Long openTime;
-
- private String open;
-
- private String high;
-
- private String low;
-
- private String close;
-
- private String volume;
-
- private Long closeTime;
-
- private String intervalId;
-
- private Long firstTradeId;
-
- private Long lastTradeId;
-
- private String quoteAssetVolume;
-
- private Long numberOfTrades;
-
- private String takerBuyBaseAssetVolume;
-
- private String takerBuyQuoteAssetVolume;
-
- private Boolean isBarFinal;
-
- public String getEventType() {
- return eventType;
- }
-
- public void setEventType(String eventType) {
- this.eventType = eventType;
- }
-
- public long getEventTime() {
- return eventTime;
- }
-
- public void setEventTime(long eventTime) {
- this.eventTime = eventTime;
- }
-
- public String getSymbol() {
- return symbol;
- }
-
- public void setSymbol(String symbol) {
- this.symbol = symbol;
- }
-
- public Long getOpenTime() {
- return openTime;
- }
-
- public void setOpenTime(Long openTime) {
- this.openTime = openTime;
- }
-
- public String getOpen() {
- return open;
- }
-
- public void setOpen(String open) {
- this.open = open;
- }
-
- public String getHigh() {
- return high;
- }
-
- public void setHigh(String high) {
- this.high = high;
- }
-
- public String getLow() {
- return low;
- }
-
- public void setLow(String low) {
- this.low = low;
- }
-
- public String getClose() {
- return close;
- }
-
- public void setClose(String close) {
- this.close = close;
- }
-
- public String getVolume() {
- return volume;
- }
-
- public void setVolume(String volume) {
- this.volume = volume;
- }
-
- public Long getCloseTime() {
- return closeTime;
- }
-
- public void setCloseTime(Long closeTime) {
- this.closeTime = closeTime;
- }
-
- public String getIntervalId() {
- return intervalId;
- }
-
- public void setIntervalId(String intervalId) {
- this.intervalId = intervalId;
- }
-
- public Long getFirstTradeId() {
- return firstTradeId;
- }
-
- public void setFirstTradeId(Long firstTradeId) {
- this.firstTradeId = firstTradeId;
- }
-
- public Long getLastTradeId() {
- return lastTradeId;
- }
-
- public void setLastTradeId(Long lastTradeId) {
- this.lastTradeId = lastTradeId;
- }
-
- public String getQuoteAssetVolume() {
- return quoteAssetVolume;
- }
-
- public void setQuoteAssetVolume(String quoteAssetVolume) {
- this.quoteAssetVolume = quoteAssetVolume;
- }
-
- public Long getNumberOfTrades() {
- return numberOfTrades;
- }
-
- public void setNumberOfTrades(Long numberOfTrades) {
- this.numberOfTrades = numberOfTrades;
- }
-
- public String getTakerBuyBaseAssetVolume() {
- return takerBuyBaseAssetVolume;
- }
-
- public void setTakerBuyBaseAssetVolume(String takerBuyBaseAssetVolume) {
- this.takerBuyBaseAssetVolume = takerBuyBaseAssetVolume;
- }
-
- public String getTakerBuyQuoteAssetVolume() {
- return takerBuyQuoteAssetVolume;
- }
-
- public void setTakerBuyQuoteAssetVolume(String takerBuyQuoteAssetVolume) {
- this.takerBuyQuoteAssetVolume = takerBuyQuoteAssetVolume;
- }
-
- public Boolean getBarFinal() {
- return isBarFinal;
- }
-
- public void setBarFinal(Boolean barFinal) {
- isBarFinal = barFinal;
- }
-
- @Override
- public String toString() {
- return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
- .append("eventType", eventType)
- .append("eventTime", eventTime)
- .append("symbol", symbol)
- .append("openTime", openTime)
- .append("open", open)
- .append("high", high)
- .append("low", low)
- .append("close", close)
- .append("volume", volume)
- .append("closeTime", closeTime)
- .append("intervalId", intervalId)
- .append("firstTradeId", firstTradeId)
- .append("lastTradeId", lastTradeId)
- .append("quoteAssetVolume", quoteAssetVolume)
- .append("numberOfTrades", numberOfTrades)
- .append("takerBuyBaseAssetVolume", takerBuyBaseAssetVolume)
- .append("takerBuyQuoteAssetVolume", takerBuyQuoteAssetVolume)
- .append("isBarFinal", isBarFinal)
- .toString();
- }
+ private String eventType;
+ private long eventTime;
+ private String symbol;
+ private long openTime;
+ private String open;
+ private String high;
+ private String low;
+ private String close;
+ private String volume;
+ private long closeTime;
+ private CandlestickInterval intervalId;
+ private long firstTradeId;
+ private long lastTradeId;
+ private String quoteAssetVolume;
+ private long numberOfTrades;
+ private String takerBuyBaseAssetVolume;
+ private String takerBuyQuoteAssetVolume;
+ private Boolean isBarFinal;
+
+ public String getEventType() {
+ return eventType;
+ }
+
+ public void setEventType(String eventType) {
+ this.eventType = eventType;
+ }
+
+ public long getEventTime() {
+ return eventTime;
+ }
+
+ public void setEventTime(long eventTime) {
+ this.eventTime = eventTime;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public long getOpenTime() {
+ return openTime;
+ }
+
+ public void setOpenTime(long openTime) {
+ this.openTime = openTime;
+ }
+
+ public String getOpen() {
+ return open;
+ }
+
+ public void setOpen(String open) {
+ this.open = open;
+ }
+
+ public String getHigh() {
+ return high;
+ }
+
+ public void setHigh(String high) {
+ this.high = high;
+ }
+
+ public String getLow() {
+ return low;
+ }
+
+ public void setLow(String low) {
+ this.low = low;
+ }
+
+ public String getClose() {
+ return close;
+ }
+
+ public void setClose(String close) {
+ this.close = close;
+ }
+
+ public String getVolume() {
+ return volume;
+ }
+
+ public void setVolume(String volume) {
+ this.volume = volume;
+ }
+
+ public long getCloseTime() {
+ return closeTime;
+ }
+
+ public void setCloseTime(long closeTime) {
+ this.closeTime = closeTime;
+ }
+
+ public CandlestickInterval getIntervalId() {
+ return intervalId;
+ }
+
+ public void setIntervalId(CandlestickInterval intervalId) {
+ this.intervalId = intervalId;
+ }
+
+ public long getFirstTradeId() {
+ return firstTradeId;
+ }
+
+ public void setFirstTradeId(long firstTradeId) {
+ this.firstTradeId = firstTradeId;
+ }
+
+ public long getLastTradeId() {
+ return lastTradeId;
+ }
+
+ public void setLastTradeId(long lastTradeId) {
+ this.lastTradeId = lastTradeId;
+ }
+
+ public String getQuoteAssetVolume() {
+ return quoteAssetVolume;
+ }
+
+ public void setQuoteAssetVolume(String quoteAssetVolume) {
+ this.quoteAssetVolume = quoteAssetVolume;
+ }
+
+ public long getNumberOfTrades() {
+ return numberOfTrades;
+ }
+
+ public void setNumberOfTrades(long numberOfTrades) {
+ this.numberOfTrades = numberOfTrades;
+ }
+
+ public String getTakerBuyBaseAssetVolume() {
+ return takerBuyBaseAssetVolume;
+ }
+
+ public void setTakerBuyBaseAssetVolume(String takerBuyBaseAssetVolume) {
+ this.takerBuyBaseAssetVolume = takerBuyBaseAssetVolume;
+ }
+
+ public String getTakerBuyQuoteAssetVolume() {
+ return takerBuyQuoteAssetVolume;
+ }
+
+ public void setTakerBuyQuoteAssetVolume(String takerBuyQuoteAssetVolume) {
+ this.takerBuyQuoteAssetVolume = takerBuyQuoteAssetVolume;
+ }
+
+ public Boolean getBarFinal() {
+ return isBarFinal;
+ }
+
+ public void setBarFinal(Boolean barFinal) {
+ isBarFinal = barFinal;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("eventType", eventType)
+ .append("eventTime", eventTime)
+ .append("symbol", symbol)
+ .append("openTime", openTime)
+ .append("open", open)
+ .append("high", high)
+ .append("low", low)
+ .append("close", close)
+ .append("volume", volume)
+ .append("closeTime", closeTime)
+ .append("intervalId", intervalId)
+ .append("firstTradeId", firstTradeId)
+ .append("lastTradeId", lastTradeId)
+ .append("quoteAssetVolume", quoteAssetVolume)
+ .append("numberOfTrades", numberOfTrades)
+ .append("takerBuyBaseAssetVolume", takerBuyBaseAssetVolume)
+ .append("takerBuyQuoteAssetVolume", takerBuyQuoteAssetVolume)
+ .append("isBarFinal", isBarFinal)
+ .toString();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/binance/api/client/domain/event/CandlestickEventDeserializer.java b/src/main/java/com/binance/api/client/domain/event/CandlestickEventDeserializer.java
index 7792fc73a..5b3fbe3c9 100755
--- a/src/main/java/com/binance/api/client/domain/event/CandlestickEventDeserializer.java
+++ b/src/main/java/com/binance/api/client/domain/event/CandlestickEventDeserializer.java
@@ -1,5 +1,6 @@
package com.binance.api.client.domain.event;
+import com.binance.api.client.domain.market.CandlestickInterval;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
@@ -15,36 +16,35 @@
*/
public class CandlestickEventDeserializer extends JsonDeserializer {
- @Override
- public CandlestickEvent deserialize(JsonParser jp, DeserializationContext ctx) throws IOException {
- ObjectCodec oc = jp.getCodec();
- JsonNode node = oc.readTree(jp);
-
- CandlestickEvent candlestickEvent = new CandlestickEvent();
-
- // Parse header
- candlestickEvent.setEventType(node.get("e").asText());
- candlestickEvent.setEventTime(node.get("E").asLong());
- candlestickEvent.setSymbol(node.get("s").asText());
-
- // Parse candlestick data
- JsonNode candlestickNode = node.get("k");
- candlestickEvent.setOpenTime(candlestickNode.get("t").asLong());
- candlestickEvent.setCloseTime(candlestickNode.get("T").asLong());
- candlestickEvent.setIntervalId(candlestickNode.get("i").asText());
- candlestickEvent.setFirstTradeId(candlestickNode.get("f").asLong());
- candlestickEvent.setLastTradeId(candlestickNode.get("L").asLong());
- candlestickEvent.setOpen(candlestickNode.get("o").asText());
- candlestickEvent.setClose(candlestickNode.get("c").asText());
- candlestickEvent.setHigh(candlestickNode.get("h").asText());
- candlestickEvent.setLow(candlestickNode.get("l").asText());
- candlestickEvent.setVolume(candlestickNode.get("v").asText());
- candlestickEvent.setNumberOfTrades(candlestickNode.get("n").asLong());
- candlestickEvent.setBarFinal(candlestickNode.get("x").asBoolean());
- candlestickEvent.setQuoteAssetVolume(candlestickNode.get("q").asText());
- candlestickEvent.setTakerBuyBaseAssetVolume(candlestickNode.get("V").asText());
- candlestickEvent.setTakerBuyQuoteAssetVolume(candlestickNode.get("Q").asText());
-
- return candlestickEvent;
- }
+ @Override
+ public CandlestickEvent deserialize(JsonParser jp, DeserializationContext ctx) throws IOException {
+ ObjectCodec oc = jp.getCodec();
+ JsonNode node = oc.readTree(jp);
+
+ CandlestickEvent candlestickEvent = new CandlestickEvent();
+
+ // Parse header
+ candlestickEvent.setEventType(node.get("e").asText());
+ candlestickEvent.setEventTime(node.get("E").asLong());
+ candlestickEvent.setSymbol(node.get("s").asText());
+ // Parse candlestick data
+ JsonNode candlestickNode = node.get("k");
+ candlestickEvent.setOpenTime(candlestickNode.get("t").asLong());
+ candlestickEvent.setCloseTime(candlestickNode.get("T").asLong());
+ candlestickEvent.setIntervalId(CandlestickInterval.getEnum(candlestickNode.get("i").asText()));
+ candlestickEvent.setFirstTradeId(candlestickNode.get("f").asLong());
+ candlestickEvent.setLastTradeId(candlestickNode.get("L").asLong());
+ candlestickEvent.setOpen(candlestickNode.get("o").asText());
+ candlestickEvent.setClose(candlestickNode.get("c").asText());
+ candlestickEvent.setHigh(candlestickNode.get("h").asText());
+ candlestickEvent.setLow(candlestickNode.get("l").asText());
+ candlestickEvent.setVolume(candlestickNode.get("v").asText());
+ candlestickEvent.setNumberOfTrades(candlestickNode.get("n").asLong());
+ candlestickEvent.setBarFinal(candlestickNode.get("x").asBoolean());
+ candlestickEvent.setQuoteAssetVolume(candlestickNode.get("q").asText());
+ candlestickEvent.setTakerBuyBaseAssetVolume(candlestickNode.get("V").asText());
+ candlestickEvent.setTakerBuyQuoteAssetVolume(candlestickNode.get("Q").asText());
+
+ return candlestickEvent;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/binance/api/client/domain/event/CandlestickEventSerializer.java b/src/main/java/com/binance/api/client/domain/event/CandlestickEventSerializer.java
index 2ceb99956..57c750b15 100755
--- a/src/main/java/com/binance/api/client/domain/event/CandlestickEventSerializer.java
+++ b/src/main/java/com/binance/api/client/domain/event/CandlestickEventSerializer.java
@@ -1,8 +1,8 @@
package com.binance.api.client.domain.event;
import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
@@ -13,32 +13,32 @@
*/
public class CandlestickEventSerializer extends JsonSerializer {
- @Override
- public void serialize(CandlestickEvent candlestickEvent, JsonGenerator gen, SerializerProvider serializers) throws IOException {
- gen.writeStartObject();
-
- // Write header
- gen.writeStringField("e", candlestickEvent.getEventType());
- gen.writeNumberField("E", candlestickEvent.getEventTime());
- gen.writeStringField("s", candlestickEvent.getSymbol());
-
- // Write candlestick data
- gen.writeObjectFieldStart("k");
- gen.writeNumberField("t", candlestickEvent.getOpenTime());
- gen.writeNumberField("T", candlestickEvent.getCloseTime());
- gen.writeStringField("i", candlestickEvent.getIntervalId());
- gen.writeNumberField("f", candlestickEvent.getFirstTradeId());
- gen.writeNumberField("L", candlestickEvent.getLastTradeId());
- gen.writeStringField("o", candlestickEvent.getOpen());
- gen.writeStringField("c", candlestickEvent.getClose());
- gen.writeStringField("h", candlestickEvent.getHigh());
- gen.writeStringField("l", candlestickEvent.getLow());
- gen.writeStringField("v", candlestickEvent.getVolume());
- gen.writeNumberField("n", candlestickEvent.getNumberOfTrades());
- gen.writeBooleanField("x", candlestickEvent.getBarFinal());
- gen.writeStringField("q", candlestickEvent.getQuoteAssetVolume());
- gen.writeStringField("V", candlestickEvent.getTakerBuyBaseAssetVolume());
- gen.writeStringField("Q", candlestickEvent.getTakerBuyQuoteAssetVolume());
- gen.writeEndObject();
- }
+ @Override
+ public void serialize(CandlestickEvent candlestickEvent, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+ gen.writeStartObject();
+
+ // Write header
+ gen.writeStringField("e", candlestickEvent.getEventType());
+ gen.writeNumberField("E", candlestickEvent.getEventTime());
+ gen.writeStringField("s", candlestickEvent.getSymbol());
+
+ // Write candlestick data
+ gen.writeObjectFieldStart("k");
+ gen.writeNumberField("t", candlestickEvent.getOpenTime());
+ gen.writeNumberField("T", candlestickEvent.getCloseTime());
+ gen.writeStringField("i", candlestickEvent.getIntervalId().getIntervalId());
+ gen.writeNumberField("f", candlestickEvent.getFirstTradeId());
+ gen.writeNumberField("L", candlestickEvent.getLastTradeId());
+ gen.writeStringField("o", candlestickEvent.getOpen());
+ gen.writeStringField("c", candlestickEvent.getClose());
+ gen.writeStringField("h", candlestickEvent.getHigh());
+ gen.writeStringField("l", candlestickEvent.getLow());
+ gen.writeStringField("v", candlestickEvent.getVolume());
+ gen.writeNumberField("n", candlestickEvent.getNumberOfTrades());
+ gen.writeBooleanField("x", candlestickEvent.getBarFinal());
+ gen.writeStringField("q", candlestickEvent.getQuoteAssetVolume());
+ gen.writeStringField("V", candlestickEvent.getTakerBuyBaseAssetVolume());
+ gen.writeStringField("Q", candlestickEvent.getTakerBuyQuoteAssetVolume());
+ gen.writeEndObject();
+ }
}
diff --git a/src/main/java/com/binance/api/client/domain/event/OrderTradeUpdateEvent.java b/src/main/java/com/binance/api/client/domain/event/ExecutionReport.java
similarity index 99%
rename from src/main/java/com/binance/api/client/domain/event/OrderTradeUpdateEvent.java
rename to src/main/java/com/binance/api/client/domain/event/ExecutionReport.java
index d2bf6fc84..d74676c09 100755
--- a/src/main/java/com/binance/api/client/domain/event/OrderTradeUpdateEvent.java
+++ b/src/main/java/com/binance/api/client/domain/event/ExecutionReport.java
@@ -14,7 +14,7 @@
* @see UserDataUpdateEvent
*/
@JsonIgnoreProperties(ignoreUnknown = true)
-public class OrderTradeUpdateEvent {
+public class ExecutionReport {
@JsonProperty("e")
private String eventType;
diff --git a/src/main/java/com/binance/api/client/domain/event/OrderTradeUpdate.java b/src/main/java/com/binance/api/client/domain/event/OrderTradeUpdate.java
new file mode 100755
index 000000000..26f927abc
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/event/OrderTradeUpdate.java
@@ -0,0 +1,437 @@
+package com.binance.api.client.domain.event;
+
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.binance.api.client.domain.*;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * Order or trade report update event.
+ *
+ * This event is embedded as part of a user data update event.
+ *
+ * @see UserDataUpdateEvent
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class OrderTradeUpdate {
+
+ @JsonProperty("e")
+ private String eventType;
+
+ /**
+ * Order/trade time.
+ */
+ @JsonProperty("T")
+ private Long orderTradeTime;
+
+ @JsonProperty("E")
+ private Long eventTime;
+
+ @JsonProperty("s")
+ private String symbol;
+
+ @JsonProperty("c")
+ private String newClientOrderId;
+
+ /**
+ * Buy/Sell order side.
+ */
+ @JsonProperty("S")
+ private OrderSide side;
+
+ /**
+ * Type of order.
+ */
+ @JsonProperty("o")
+ private OrderType type;
+
+ /**
+ * Time in force to indicate how long will the order remain active.
+ */
+ @JsonProperty("f")
+ private TimeInForce timeInForce;
+
+ /**
+ * Original quantity in the order.
+ */
+ @JsonProperty("q")
+ private String originalQuantity;
+
+ /**
+ * Price.
+ */
+ @JsonProperty("p")
+ private String price;
+
+ @JsonProperty("ap")
+ private String averagePrice;
+
+ @JsonProperty("sp")
+ private String stopPrice;
+
+ /**
+ * Type of execution.
+ */
+ @JsonProperty("x")
+ private ExecutionType executionType;
+
+ /**
+ * Status of the order.
+ */
+ @JsonProperty("X")
+ private OrderStatus orderStatus;
+
+ /**
+ * Order id.
+ */
+ @JsonProperty("i")
+ private Long orderId;
+
+ /**
+ * Quantity of the last filled trade.
+ */
+ @JsonProperty("l")
+ private String quantityLastFilledTrade;
+
+ /**
+ * Accumulated quantity of filled trades on this order.
+ */
+ @JsonProperty("z")
+ private String accumulatedQuantity;
+
+ /**
+ * Price of last filled trade.
+ */
+ @JsonProperty("L")
+ private String priceOfLastFilledTrade;
+
+ /**
+ * Trade id.
+ */
+ @JsonProperty("t")
+ private Long tradeId;
+
+ @JsonProperty("b")
+ private Long bidsNational;
+
+ @JsonProperty("a")
+ private Long askNational;
+
+ @JsonProperty("m")
+ private Boolean tradeMaker;
+
+ @JsonProperty("R")
+ private Boolean reduceOnly;
+
+ @JsonProperty("wt")
+ private WorkingType workingType;
+
+ @JsonProperty("ot")
+ private OrderType orderType;
+
+ @JsonProperty("ps")
+ private PositionSide positionSide;
+
+ @JsonProperty("cp")
+ private Boolean closedAllPositions;
+
+ @JsonProperty("rp")
+ private String realizedProfit;
+
+ @JsonProperty("pP")
+ private Boolean protectedOrder;
+
+ //fixme: Unknown field name
+ @JsonProperty("si")
+ private Long si;
+
+ //fixme: Unknown field name
+ @JsonProperty("ss")
+ private Long ss;
+
+ public String getEventType() {
+ return eventType;
+ }
+
+ public void setEventType(String eventType) {
+ this.eventType = eventType;
+ }
+
+ public Long getOrderTradeTime() {
+ return orderTradeTime;
+ }
+
+ public void setOrderTradeTime(Long orderTradeTime) {
+ this.orderTradeTime = orderTradeTime;
+ }
+
+ public Long getEventTime() {
+ return eventTime;
+ }
+
+ public void setEventTime(Long eventTime) {
+ this.eventTime = eventTime;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public String getNewClientOrderId() {
+ return newClientOrderId;
+ }
+
+ public void setNewClientOrderId(String newClientOrderId) {
+ this.newClientOrderId = newClientOrderId;
+ }
+
+ public OrderSide getSide() {
+ return side;
+ }
+
+ public void setSide(OrderSide side) {
+ this.side = side;
+ }
+
+ public OrderType getType() {
+ return type;
+ }
+
+ public void setType(OrderType type) {
+ this.type = type;
+ }
+
+ public TimeInForce getTimeInForce() {
+ return timeInForce;
+ }
+
+ public void setTimeInForce(TimeInForce timeInForce) {
+ this.timeInForce = timeInForce;
+ }
+
+ public String getOriginalQuantity() {
+ return originalQuantity;
+ }
+
+ public void setOriginalQuantity(String originalQuantity) {
+ this.originalQuantity = originalQuantity;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getAveragePrice() {
+ return averagePrice;
+ }
+
+ public void setAveragePrice(String averagePrice) {
+ this.averagePrice = averagePrice;
+ }
+
+ public String getStopPrice() {
+ return stopPrice;
+ }
+
+ public void setStopPrice(String stopPrice) {
+ this.stopPrice = stopPrice;
+ }
+
+ public ExecutionType getExecutionType() {
+ return executionType;
+ }
+
+ public void setExecutionType(ExecutionType executionType) {
+ this.executionType = executionType;
+ }
+
+ public OrderStatus getOrderStatus() {
+ return orderStatus;
+ }
+
+ public void setOrderStatus(OrderStatus orderStatus) {
+ this.orderStatus = orderStatus;
+ }
+
+ public Long getOrderId() {
+ return orderId;
+ }
+
+ public void setOrderId(Long orderId) {
+ this.orderId = orderId;
+ }
+
+ public String getQuantityLastFilledTrade() {
+ return quantityLastFilledTrade;
+ }
+
+ public void setQuantityLastFilledTrade(String quantityLastFilledTrade) {
+ this.quantityLastFilledTrade = quantityLastFilledTrade;
+ }
+
+ public String getAccumulatedQuantity() {
+ return accumulatedQuantity;
+ }
+
+ public void setAccumulatedQuantity(String accumulatedQuantity) {
+ this.accumulatedQuantity = accumulatedQuantity;
+ }
+
+ public String getPriceOfLastFilledTrade() {
+ return priceOfLastFilledTrade;
+ }
+
+ public void setPriceOfLastFilledTrade(String priceOfLastFilledTrade) {
+ this.priceOfLastFilledTrade = priceOfLastFilledTrade;
+ }
+
+ public Long getTradeId() {
+ return tradeId;
+ }
+
+ public void setTradeId(Long tradeId) {
+ this.tradeId = tradeId;
+ }
+
+ public Long getBidsNational() {
+ return bidsNational;
+ }
+
+ public void setBidsNational(Long bidsNational) {
+ this.bidsNational = bidsNational;
+ }
+
+ public Long getAskNational() {
+ return askNational;
+ }
+
+ public void setAskNational(Long askNational) {
+ this.askNational = askNational;
+ }
+
+ public Boolean getTradeMaker() {
+ return tradeMaker;
+ }
+
+ public void setTradeMaker(Boolean tradeMaker) {
+ this.tradeMaker = tradeMaker;
+ }
+
+ public Boolean getReduceOnly() {
+ return reduceOnly;
+ }
+
+ public void setReduceOnly(Boolean reduceOnly) {
+ this.reduceOnly = reduceOnly;
+ }
+
+ public WorkingType getWorkingType() {
+ return workingType;
+ }
+
+ public void setWorkingType(WorkingType workingType) {
+ this.workingType = workingType;
+ }
+
+ public OrderType getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(OrderType orderType) {
+ this.orderType = orderType;
+ }
+
+ public PositionSide getPositionSide() {
+ return positionSide;
+ }
+
+ public void setPositionSide(PositionSide positionSide) {
+ this.positionSide = positionSide;
+ }
+
+ public Boolean getClosedAllPositions() {
+ return closedAllPositions;
+ }
+
+ public void setClosedAllPositions(Boolean closedAllPositions) {
+ this.closedAllPositions = closedAllPositions;
+ }
+
+ public String getRealizedProfit() {
+ return realizedProfit;
+ }
+
+ public void setRealizedProfit(String realizedProfit) {
+ this.realizedProfit = realizedProfit;
+ }
+
+ public Boolean getProtectedOrder() {
+ return protectedOrder;
+ }
+
+ public void setProtectedOrder(Boolean protectedOrder) {
+ this.protectedOrder = protectedOrder;
+ }
+
+ public Long getSi() {
+ return si;
+ }
+
+ public void setSi(Long si) {
+ this.si = si;
+ }
+
+ public Long getSs() {
+ return ss;
+ }
+
+ public void setSs(Long ss) {
+ this.ss = ss;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("eventType", eventType)
+ .append("orderTradeTime", orderTradeTime)
+ .append("eventTime", eventTime)
+ .append("symbol", symbol)
+ .append("newClientOrderId", newClientOrderId)
+ .append("side", side)
+ .append("type", type)
+ .append("timeInForce", timeInForce)
+ .append("originalQuantity", originalQuantity)
+ .append("price", price)
+ .append("averagePrice", averagePrice)
+ .append("stopPrice", stopPrice)
+ .append("executionType", executionType)
+ .append("orderStatus", orderStatus)
+ .append("orderId", orderId)
+ .append("quantityLastFilledTrade", quantityLastFilledTrade)
+ .append("accumulatedQuantity", accumulatedQuantity)
+ .append("priceOfLastFilledTrade", priceOfLastFilledTrade)
+ .append("tradeId", tradeId)
+ .append("bidsNational", bidsNational)
+ .append("askNational", askNational)
+ .append("tradeMaker", tradeMaker)
+ .append("reduceOnly", reduceOnly)
+ .append("workingType", workingType)
+ .append("orderType", orderType)
+ .append("positionSide", positionSide)
+ .append("closedAllPositions", closedAllPositions)
+ .append("realizedProfit", realizedProfit)
+ .append("protectedOrder", protectedOrder)
+ .append("si", si)
+ .append("ss", ss)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEvent.java b/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEvent.java
index d95662df1..071b0fe17 100755
--- a/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEvent.java
+++ b/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEvent.java
@@ -1,7 +1,6 @@
package com.binance.api.client.domain.event;
import com.binance.api.client.constant.BinanceApiConstants;
-import com.binance.api.client.exception.UnsupportedEventException;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -20,101 +19,81 @@
@JsonDeserialize(using = UserDataUpdateEventDeserializer.class)
public class UserDataUpdateEvent {
- private UserDataUpdateEventType eventType;
+ private UserDataUpdateEventType eventType;
- private long eventTime;
+ private long eventTime;
- private AccountUpdateEvent accountUpdateEvent;
+ private AccountUpdateEvent accountUpdateEvent;
- private BalanceUpdateEvent balanceUpdateEvent;
+ private BalanceUpdateEvent balanceUpdateEvent;
- private OrderTradeUpdateEvent orderTradeUpdateEvent;
+ private ExecutionReport executionReport;
+ private OrderTradeUpdate orderTradeUpdate;
- public UserDataUpdateEventType getEventType() {
- return eventType;
- }
-
- public void setEventType(UserDataUpdateEventType eventType) {
- this.eventType = eventType;
- }
-
- public long getEventTime() {
- return eventTime;
- }
-
- public void setEventTime(long eventTime) {
- this.eventTime = eventTime;
- }
+ public UserDataUpdateEventType getEventType() {
+ return eventType;
+ }
- public AccountUpdateEvent getAccountUpdateEvent() {
- return accountUpdateEvent;
- }
+ public void setEventType(UserDataUpdateEventType eventType) {
+ this.eventType = eventType;
+ }
- public void setAccountUpdateEvent(AccountUpdateEvent accountUpdateEvent) {
- this.accountUpdateEvent = accountUpdateEvent;
- }
+ public long getEventTime() {
+ return eventTime;
+ }
- public BalanceUpdateEvent getBalanceUpdateEvent() {
- return balanceUpdateEvent;
- }
+ public void setEventTime(long eventTime) {
+ this.eventTime = eventTime;
+ }
- public void setBalanceUpdateEvent(BalanceUpdateEvent balanceUpdateEvent) {
- this.balanceUpdateEvent = balanceUpdateEvent;
- }
+ public AccountUpdateEvent getAccountUpdateEvent() {
+ return accountUpdateEvent;
+ }
- public OrderTradeUpdateEvent getOrderTradeUpdateEvent() {
- return orderTradeUpdateEvent;
- }
+ public void setAccountUpdateEvent(AccountUpdateEvent accountUpdateEvent) {
+ this.accountUpdateEvent = accountUpdateEvent;
+ }
- public void setOrderTradeUpdateEvent(OrderTradeUpdateEvent orderTradeUpdateEvent) {
- this.orderTradeUpdateEvent = orderTradeUpdateEvent;
- }
+ public BalanceUpdateEvent getBalanceUpdateEvent() {
+ return balanceUpdateEvent;
+ }
- @Override
- public String toString() {
- ToStringBuilder sb = new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
- .append("eventType", eventType)
- .append("eventTime", eventTime);
- if (eventType == UserDataUpdateEventType.ACCOUNT_UPDATE) {
- sb.append("accountUpdateEvent", accountUpdateEvent);
- } else if (eventType == UserDataUpdateEventType.ACCOUNT_POSITION_UPDATE) {
- sb.append("accountPositionUpdateEvent", accountUpdateEvent);
- } else if (eventType == UserDataUpdateEventType.BALANCE_UPDATE) {
- sb.append("balanceUpdateEvent", balanceUpdateEvent);
- } else {
- sb.append("orderTradeUpdateEvent", orderTradeUpdateEvent);
+ public void setBalanceUpdateEvent(BalanceUpdateEvent balanceUpdateEvent) {
+ this.balanceUpdateEvent = balanceUpdateEvent;
}
- return sb.toString();
- }
- public enum UserDataUpdateEventType {
- ACCOUNT_UPDATE("outboundAccountInfo"),
- ACCOUNT_POSITION_UPDATE("outboundAccountPosition"),
- BALANCE_UPDATE("balanceUpdate"),
- ORDER_TRADE_UPDATE("executionReport"),
- ;
+ public ExecutionReport getExecutionReport() {
+ return executionReport;
+ }
- private final String eventTypeId;
+ public void setExecutionReport(ExecutionReport executionReport) {
+ this.executionReport = executionReport;
+ }
- UserDataUpdateEventType(String eventTypeId) {
- this.eventTypeId = eventTypeId;
+ public OrderTradeUpdate getOrderTradeUpdate() {
+ return orderTradeUpdate;
}
- public String getEventTypeId() {
- return eventTypeId;
+ public void setOrderTradeUpdate(OrderTradeUpdate orderTradeUpdate) {
+ this.orderTradeUpdate = orderTradeUpdate;
}
- public static UserDataUpdateEventType fromEventTypeId(String eventTypeId) {
- if (ACCOUNT_UPDATE.eventTypeId.equals(eventTypeId)) {
- return ACCOUNT_UPDATE;
- } else if (ORDER_TRADE_UPDATE.eventTypeId.equals(eventTypeId)) {
- return ORDER_TRADE_UPDATE;
- } else if (ACCOUNT_POSITION_UPDATE.eventTypeId.equals(eventTypeId)) {
- return ACCOUNT_POSITION_UPDATE;
- } else if (BALANCE_UPDATE.eventTypeId.equals(eventTypeId)) {
- return BALANCE_UPDATE;
- }
- throw new UnsupportedEventException("Unrecognized user data update event type id: " + eventTypeId);
+ @Override
+ public String toString() {
+ ToStringBuilder sb = new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("eventType", eventType)
+ .append("eventTime", eventTime);
+ if (eventType == UserDataUpdateEventType.ACCOUNT_UPDATE) {
+ sb.append("accountUpdateEvent", accountUpdateEvent);
+ } else if (eventType == UserDataUpdateEventType.ACCOUNT_POSITION_UPDATE) {
+ sb.append("accountPositionUpdateEvent", accountUpdateEvent);
+ } else if (eventType == UserDataUpdateEventType.BALANCE_UPDATE) {
+ sb.append("balanceUpdateEvent", balanceUpdateEvent);
+ } else if (eventType == UserDataUpdateEventType.ORDER_TRADE_UPDATE) {
+ sb.append("orderTradeUpdate", orderTradeUpdate);
+ } else {
+ sb.append("executionReport", executionReport);
+ }
+ return sb.toString();
}
- }
}
diff --git a/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEventDeserializer.java b/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEventDeserializer.java
index 8888bb624..6c311d7c9 100755
--- a/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEventDeserializer.java
+++ b/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEventDeserializer.java
@@ -1,6 +1,5 @@
package com.binance.api.client.domain.event;
-import com.binance.api.client.domain.event.UserDataUpdateEvent.UserDataUpdateEventType;
import com.binance.api.client.exception.BinanceApiException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec;
@@ -18,47 +17,70 @@
*/
public class UserDataUpdateEventDeserializer extends JsonDeserializer {
- private ObjectMapper mapper;
+ private ObjectMapper mapper;
- @Override
- public UserDataUpdateEvent deserialize(JsonParser jp, DeserializationContext ctx) throws IOException {
+ @Override
+ public UserDataUpdateEvent deserialize(JsonParser jp, DeserializationContext ctx) {
+ UserDataUpdateEvent userDataUpdateEvent = new UserDataUpdateEvent();
+ try {
+ if (mapper == null) {
+ mapper = new ObjectMapper();
+ }
- if (mapper == null) {
- mapper = new ObjectMapper();
- }
+ ObjectCodec oc = jp.getCodec();
+ JsonNode node = oc.readTree(jp);
+ String json = node.toString();
- ObjectCodec oc = jp.getCodec();
- JsonNode node = oc.readTree(jp);
- String json = node.toString();
+ final String eventTypeId = node.get("e").asText();
+ final long eventTime = node.get("E").asLong();
+ UserDataUpdateEventType type = UserDataUpdateEventType.fromEventTypeId(eventTypeId);
+ if (type == null) {
+ throw new BinanceApiException("Unknown user data event type [" + eventTypeId + "]");
+ /*
+ * TODO: need to throws exception on unknown types .
+ * or ... !?
+ * */
+ } else {
+ userDataUpdateEvent.setEventType(type);
+ userDataUpdateEvent.setEventTime(eventTime);
- final String eventTypeId = node.get("e").asText();
- final Long eventTime = node.get("E").asLong();
- UserDataUpdateEventType userDataUpdateEventType = UserDataUpdateEventType.fromEventTypeId(eventTypeId);
+ switch (type) {
+ case ACCOUNT_UPDATE:
+ case ACCOUNT_POSITION_UPDATE:
+ AccountUpdateEvent accountUpdateEvent = getUserDataUpdateEventDetail(json, AccountUpdateEvent.class, mapper);
+ userDataUpdateEvent.setAccountUpdateEvent(accountUpdateEvent);
+ break;
+ case BALANCE_UPDATE:
+ BalanceUpdateEvent balanceUpdateEvent = getUserDataUpdateEventDetail(json, BalanceUpdateEvent.class, mapper);
+ userDataUpdateEvent.setBalanceUpdateEvent(balanceUpdateEvent);
+ break;
+ case EXECUTION_REPORT:
+ ExecutionReport executionReport = getUserDataUpdateEventDetail(json, ExecutionReport.class, mapper);
+ userDataUpdateEvent.setExecutionReport(executionReport);
+ break;
+ case ORDER_TRADE_UPDATE:
+ JsonNode o = node.get("o");
+ OrderTradeUpdate orderTradeUpdate = getUserDataUpdateEventDetail(o.toString(), OrderTradeUpdate.class, mapper);
+ userDataUpdateEvent.setOrderTradeUpdate(orderTradeUpdate);
+ break;
+ }
- UserDataUpdateEvent userDataUpdateEvent = new UserDataUpdateEvent();
- userDataUpdateEvent.setEventType(userDataUpdateEventType);
- userDataUpdateEvent.setEventTime(eventTime);
+ }
- if (userDataUpdateEventType == UserDataUpdateEventType.ACCOUNT_UPDATE ||
- userDataUpdateEventType == UserDataUpdateEventType.ACCOUNT_POSITION_UPDATE) {
- AccountUpdateEvent accountUpdateEvent = getUserDataUpdateEventDetail(json, AccountUpdateEvent.class, mapper);
- userDataUpdateEvent.setAccountUpdateEvent(accountUpdateEvent);
- } else if (userDataUpdateEventType == UserDataUpdateEventType.BALANCE_UPDATE) {
- BalanceUpdateEvent balanceUpdateEvent = getUserDataUpdateEventDetail(json, BalanceUpdateEvent.class, mapper);
- userDataUpdateEvent.setBalanceUpdateEvent(balanceUpdateEvent);
- } else { // userDataUpdateEventType == UserDataUpdateEventType.ORDER_TRADE_UPDATE
- OrderTradeUpdateEvent orderTradeUpdateEvent = getUserDataUpdateEventDetail(json, OrderTradeUpdateEvent.class, mapper);
- userDataUpdateEvent.setOrderTradeUpdateEvent(orderTradeUpdateEvent);
- }
+ } catch (Exception ignore) {
+ /*
+ * NOTE : Do not throws method signature exception .
+ * */
+ }
- return userDataUpdateEvent;
- }
+ return userDataUpdateEvent;
+ }
- public T getUserDataUpdateEventDetail(String json, Class clazz, ObjectMapper mapper) {
- try {
- return mapper.readValue(json, clazz);
- } catch (IOException e) {
- throw new BinanceApiException(e);
+ public T getUserDataUpdateEventDetail(String json, Class clazz, ObjectMapper mapper) {
+ try {
+ return mapper.readValue(json, clazz);
+ } catch (IOException e) {
+ throw new BinanceApiException(e);
+ }
}
- }
}
diff --git a/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEventType.java b/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEventType.java
new file mode 100644
index 000000000..c8e805789
--- /dev/null
+++ b/src/main/java/com/binance/api/client/domain/event/UserDataUpdateEventType.java
@@ -0,0 +1,45 @@
+package com.binance.api.client.domain.event;
+
+public enum UserDataUpdateEventType {
+ ACCOUNT_POSITION_UPDATE("outboundAccountPosition"),
+ BALANCE_UPDATE("balanceUpdate"),
+ EXECUTION_REPORT("executionReport"),
+ ACCOUNT_UPDATE("ACCOUNT_UPDATE"), //Binance futures & testnet
+ ACCOUNT_CONFIG_UPDATE("ACCOUNT_CONFIG_UPDATE"), //Binance futures & testnet //TODO: Implement this type.
+ ORDER_TRADE_UPDATE("ORDER_TRADE_UPDATE"); //Binance futures & testnet
+
+ private final String eventTypeId;
+
+ UserDataUpdateEventType(String eventTypeId) {
+ this.eventTypeId = eventTypeId;
+ }
+
+ public String getEventTypeId() {
+ return eventTypeId;
+ }
+
+ public static UserDataUpdateEventType fromEventTypeId(String eventTypeId) {
+ UserDataUpdateEventType et = null;
+ switch (eventTypeId) {
+ case "outboundAccountPosition":
+ et = UserDataUpdateEventType.ACCOUNT_POSITION_UPDATE;
+ break;
+ case "balanceUpdate":
+ et = UserDataUpdateEventType.BALANCE_UPDATE;
+ break;
+ case "executionReport":
+ et = UserDataUpdateEventType.EXECUTION_REPORT;
+ break;
+ case "ACCOUNT_UPDATE":
+ et = UserDataUpdateEventType.ACCOUNT_UPDATE;
+ break;
+ case "ACCOUNT_CONFIG_UPDATE":
+ et = UserDataUpdateEventType.ACCOUNT_CONFIG_UPDATE;
+ break;
+ case "ORDER_TRADE_UPDATE":
+ et = UserDataUpdateEventType.ORDER_TRADE_UPDATE;
+ break;
+ }
+ return et;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/api/client/domain/general/SymbolInfo.java b/src/main/java/com/binance/api/client/domain/general/SymbolInfo.java
index ca2723235..40f292277 100755
--- a/src/main/java/com/binance/api/client/domain/general/SymbolInfo.java
+++ b/src/main/java/com/binance/api/client/domain/general/SymbolInfo.java
@@ -13,159 +13,168 @@
@JsonIgnoreProperties(ignoreUnknown = true)
public class SymbolInfo {
- private String symbol;
-
- private SymbolStatus status;
-
- private String baseAsset;
-
- private Integer baseAssetPrecision;
-
- private String quoteAsset;
-
- private Integer quotePrecision;
-
- private List orderTypes;
-
- private boolean icebergAllowed;
-
- private boolean ocoAllowed;
-
- private boolean quoteOrderQtyMarketAllowed;
-
- private boolean isSpotTradingAllowed;
-
- private boolean isMarginTradingAllowed;
-
- private List filters;
-
- public String getSymbol() {
- return symbol;
- }
-
- public void setSymbol(String symbol) {
- this.symbol = symbol;
- }
-
- public SymbolStatus getStatus() {
- return status;
- }
-
- public void setStatus(SymbolStatus status) {
- this.status = status;
- }
-
- public String getBaseAsset() {
- return baseAsset;
- }
-
- public void setBaseAsset(String baseAsset) {
- this.baseAsset = baseAsset;
- }
-
- public Integer getBaseAssetPrecision() {
- return baseAssetPrecision;
- }
-
- public void setBaseAssetPrecision(Integer baseAssetPrecision) {
- this.baseAssetPrecision = baseAssetPrecision;
- }
-
- public String getQuoteAsset() {
- return quoteAsset;
- }
-
- public void setQuoteAsset(String quoteAsset) {
- this.quoteAsset = quoteAsset;
- }
-
- public Integer getQuotePrecision() {
- return quotePrecision;
- }
-
- public void setQuotePrecision(Integer quotePrecision) {
- this.quotePrecision = quotePrecision;
- }
-
- public List getOrderTypes() {
- return orderTypes;
- }
-
- public void setOrderTypes(List orderTypes) {
- this.orderTypes = orderTypes;
- }
-
- public boolean isIcebergAllowed() {
- return icebergAllowed;
- }
-
- public void setIcebergAllowed(boolean icebergAllowed) {
- this.icebergAllowed = icebergAllowed;
- }
-
- public boolean isOcoAllowed() {
- return ocoAllowed;
- }
-
- public void setOcoAllowed(boolean ocoAllowed) {
- this.ocoAllowed = ocoAllowed;
- }
-
- public boolean isQuoteOrderQtyMarketAllowed() {
- return quoteOrderQtyMarketAllowed;
- }
-
- public void setQuoteOrderQtyMarketAllowed(boolean quoteOrderQtyMarketAllowed) {
- this.quoteOrderQtyMarketAllowed = quoteOrderQtyMarketAllowed;
- }
-
- public boolean isSpotTradingAllowed() {
- return isSpotTradingAllowed;
- }
-
- public void setIsSpotTradingAllowed(boolean isSpotTradingAllowed) {
- this.isSpotTradingAllowed = isSpotTradingAllowed;
- }
-
- public boolean isMarginTradingAllowed() {
- return isMarginTradingAllowed;
- }
-
- public void setIsMarginTradingAllowed(boolean isMarginTradingAllowed) {
- this.isMarginTradingAllowed = isMarginTradingAllowed;
- }
-
- public List getFilters() {
- return filters;
- }
-
- public void setFilters(List filters) {
- this.filters = filters;
- }
-
- /**
- * @param filterType filter type to filter for.
- * @return symbol filter information for the provided filter type.
- */
- public SymbolFilter getSymbolFilter(FilterType filterType) {
- return filters.stream()
- .filter(symbolFilter -> symbolFilter.getFilterType() == filterType)
- .findFirst()
- .get();
- }
-
- @Override
- public String toString() {
- return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
- .append("symbol", symbol)
- .append("status", status)
- .append("baseAsset", baseAsset)
- .append("baseAssetPrecision", baseAssetPrecision)
- .append("quoteAsset", quoteAsset)
- .append("quotePrecision", quotePrecision)
- .append("orderTypes", orderTypes)
- .append("icebergAllowed", icebergAllowed)
- .append("filters", filters)
- .toString();
- }
+ private String symbol;
+ private SymbolStatus status;
+ private String baseAsset;
+ private Integer baseAssetPrecision;
+ private String quoteAsset;
+ private Integer quotePrecision;
+ private List orderTypes;
+ private boolean icebergAllowed;
+ private boolean ocoAllowed;
+ private boolean quoteOrderQtyMarketAllowed;
+ private boolean isSpotTradingAllowed;
+ private boolean isMarginTradingAllowed;
+ private int pricePrecision;
+ private int quantityPrecision;
+
+ private List filters;
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public SymbolStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(SymbolStatus status) {
+ this.status = status;
+ }
+
+ public String getBaseAsset() {
+ return baseAsset;
+ }
+
+ public void setBaseAsset(String baseAsset) {
+ this.baseAsset = baseAsset;
+ }
+
+ public Integer getBaseAssetPrecision() {
+ return baseAssetPrecision;
+ }
+
+ public void setBaseAssetPrecision(Integer baseAssetPrecision) {
+ this.baseAssetPrecision = baseAssetPrecision;
+ }
+
+ public String getQuoteAsset() {
+ return quoteAsset;
+ }
+
+ public void setQuoteAsset(String quoteAsset) {
+ this.quoteAsset = quoteAsset;
+ }
+
+ public Integer getQuotePrecision() {
+ return quotePrecision;
+ }
+
+ public void setQuotePrecision(Integer quotePrecision) {
+ this.quotePrecision = quotePrecision;
+ }
+
+ public List getOrderTypes() {
+ return orderTypes;
+ }
+
+ public void setOrderTypes(List orderTypes) {
+ this.orderTypes = orderTypes;
+ }
+
+ public boolean isIcebergAllowed() {
+ return icebergAllowed;
+ }
+
+ public void setIcebergAllowed(boolean icebergAllowed) {
+ this.icebergAllowed = icebergAllowed;
+ }
+
+ public boolean isOcoAllowed() {
+ return ocoAllowed;
+ }
+
+ public void setOcoAllowed(boolean ocoAllowed) {
+ this.ocoAllowed = ocoAllowed;
+ }
+
+ public boolean isQuoteOrderQtyMarketAllowed() {
+ return quoteOrderQtyMarketAllowed;
+ }
+
+ public void setQuoteOrderQtyMarketAllowed(boolean quoteOrderQtyMarketAllowed) {
+ this.quoteOrderQtyMarketAllowed = quoteOrderQtyMarketAllowed;
+ }
+
+ public boolean isSpotTradingAllowed() {
+ return isSpotTradingAllowed;
+ }
+
+ public void setIsSpotTradingAllowed(boolean isSpotTradingAllowed) {
+ this.isSpotTradingAllowed = isSpotTradingAllowed;
+ }
+
+ public boolean isMarginTradingAllowed() {
+ return isMarginTradingAllowed;
+ }
+
+ public void setIsMarginTradingAllowed(boolean isMarginTradingAllowed) {
+ this.isMarginTradingAllowed = isMarginTradingAllowed;
+ }
+
+ public List getFilters() {
+ return filters;
+ }
+
+ public void setFilters(List filters) {
+ this.filters = filters;
+ }
+
+ public int getPricePrecision() {
+ return pricePrecision;
+ }
+
+ public void setPricePrecision(int pricePrecision) {
+ this.pricePrecision = pricePrecision;
+ }
+
+ public int getQuantityPrecision() {
+ return quantityPrecision;
+ }
+
+ public void setQuantityPrecision(int quantityPrecision) {
+ this.quantityPrecision = quantityPrecision;
+ }
+
+ /**
+ * @param filterType filter type to filter for.
+ * @return symbol filter information for the provided filter type.
+ */
+ public SymbolFilter getSymbolFilter(FilterType filterType) {
+ return filters.stream()
+ .filter(symbolFilter -> symbolFilter.getFilterType() == filterType)
+ .findFirst()
+ .get();
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE)
+ .append("symbol", symbol)
+ .append("status", status)
+ .append("baseAsset", baseAsset)
+ .append("baseAssetPrecision", baseAssetPrecision)
+ .append("quoteAsset", quoteAsset)
+ .append("quotePrecision", quotePrecision)
+ .append("orderTypes", orderTypes)
+ .append("icebergAllowed", icebergAllowed)
+ .append("filters", filters)
+ .append("quantityPrecision", quantityPrecision)
+ .append("pricePrecision", pricePrecision)
+ .toString();
+ }
}
diff --git a/src/main/java/com/binance/api/client/domain/general/SymbolStatus.java b/src/main/java/com/binance/api/client/domain/general/SymbolStatus.java
index 77291ee77..25bfdb38a 100755
--- a/src/main/java/com/binance/api/client/domain/general/SymbolStatus.java
+++ b/src/main/java/com/binance/api/client/domain/general/SymbolStatus.java
@@ -7,11 +7,18 @@
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public enum SymbolStatus {
- PRE_TRADING,
- TRADING,
- POST_TRADING,
- END_OF_DAY,
- HALT,
- AUCTION_MATCH,
- BREAK;
+ PRE_TRADING,
+ TRADING,
+ POST_TRADING,
+ END_OF_DAY,
+ HALT,
+ AUCTION_MATCH,
+ BREAK,
+ SETTLING,
+ PENDING_TRADING,
+ DELIVERING,
+ DELIVERED,
+ PRE_SETTLE,
+ CLOSE,
+ PRE_DELIVERING;
}
diff --git a/src/main/java/com/binance/api/client/domain/market/CandlestickInterval.java b/src/main/java/com/binance/api/client/domain/market/CandlestickInterval.java
index 577287c86..9f1dc01d5 100755
--- a/src/main/java/com/binance/api/client/domain/market/CandlestickInterval.java
+++ b/src/main/java/com/binance/api/client/domain/market/CandlestickInterval.java
@@ -1,5 +1,6 @@
package com.binance.api.client.domain.market;
+import com.binance.api.client.exception.BinanceApiException;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
@@ -8,29 +9,68 @@
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public enum CandlestickInterval {
- ONE_MINUTE("1m"),
- THREE_MINUTES("3m"),
- FIVE_MINUTES("5m"),
- FIFTEEN_MINUTES("15m"),
- HALF_HOURLY("30m"),
- HOURLY("1h"),
- TWO_HOURLY("2h"),
- FOUR_HOURLY("4h"),
- SIX_HOURLY("6h"),
- EIGHT_HOURLY("8h"),
- TWELVE_HOURLY("12h"),
- DAILY("1d"),
- THREE_DAILY("3d"),
- WEEKLY("1w"),
- MONTHLY("1M");
-
- private final String intervalId;
-
- CandlestickInterval(String intervalId) {
- this.intervalId = intervalId;
- }
-
- public String getIntervalId() {
- return intervalId;
- }
+ ONE_MINUTE("1m"),
+ THREE_MINUTES("3m"),
+ FIVE_MINUTES("5m"),
+ FIFTEEN_MINUTES("15m"),
+ HALF_HOURLY("30m"),
+ HOURLY("1h"),
+ TWO_HOURLY("2h"),
+ FOUR_HOURLY("4h"),
+ SIX_HOURLY("6h"),
+ EIGHT_HOURLY("8h"),
+ TWELVE_HOURLY("12h"),
+ DAILY("1d"),
+ THREE_DAILY("3d"),
+ WEEKLY("1w"),
+ MONTHLY("1M");
+
+ private final String intervalId;
+
+ CandlestickInterval(String intervalId) {
+ this.intervalId = intervalId;
+ }
+
+ public String getIntervalId() {
+ return intervalId;
+ }
+
+ public static CandlestickInterval getEnum(String intervalId) {
+ switch (intervalId) {
+ case "1m":
+ return CandlestickInterval.ONE_MINUTE;
+ case "3m":
+ return CandlestickInterval.THREE_MINUTES;
+ case "5m":
+ return CandlestickInterval.FIVE_MINUTES;
+ case "15m":
+ return CandlestickInterval.FIFTEEN_MINUTES;
+ case "30m":
+ return CandlestickInterval.HALF_HOURLY;
+ case "1h":
+ return CandlestickInterval.HOURLY;
+ case "2h":
+ return CandlestickInterval.TWO_HOURLY;
+ case "4h":
+ return CandlestickInterval.FOUR_HOURLY;
+ case "6h":
+ return CandlestickInterval.SIX_HOURLY;
+ case "8h":
+ return CandlestickInterval.EIGHT_HOURLY;
+ case "12h":
+ return CandlestickInterval.TWELVE_HOURLY;
+ case "1d":
+ return CandlestickInterval.DAILY;
+ case "3d":
+ return CandlestickInterval.THREE_DAILY;
+ case "1w":
+ return CandlestickInterval.WEEKLY;
+ case "1M":
+ return CandlestickInterval.MONTHLY;
+ default:
+ throw new BinanceApiException("Time interval not defined");
+ }
+ }
+
+
}
diff --git a/src/main/java/com/binance/api/client/exception/BinanceApiException.java b/src/main/java/com/binance/api/client/exception/BinanceApiException.java
index 80430fd8d..7b12cfb2b 100755
--- a/src/main/java/com/binance/api/client/exception/BinanceApiException.java
+++ b/src/main/java/com/binance/api/client/exception/BinanceApiException.java
@@ -1,6 +1,6 @@
package com.binance.api.client.exception;
-import com.binance.api.client.BinanceApiError;
+import com.binance.api.client.api.BinanceApiError;
/**
* An exception which can occur while invoking methods of the Binance API.
diff --git a/src/main/java/com/binance/api/client/exception/BinanceIllegalException.java b/src/main/java/com/binance/api/client/exception/BinanceIllegalException.java
new file mode 100644
index 000000000..a175080d3
--- /dev/null
+++ b/src/main/java/com/binance/api/client/exception/BinanceIllegalException.java
@@ -0,0 +1,10 @@
+package com.binance.api.client.exception;
+
+public class BinanceIllegalException extends RuntimeException {
+ public BinanceIllegalException() {
+ }
+
+ public BinanceIllegalException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/binance/api/client/factory/BinanceAbstractFactory.java b/src/main/java/com/binance/api/client/factory/BinanceAbstractFactory.java
new file mode 100644
index 000000000..4bfadef27
--- /dev/null
+++ b/src/main/java/com/binance/api/client/factory/BinanceAbstractFactory.java
@@ -0,0 +1,183 @@
+package com.binance.api.client.factory;
+
+import com.binance.api.client.BinanceEngineType;
+import com.binance.api.client.config.*;
+import com.binance.api.client.exception.BinanceIllegalException;
+
+/**
+ * @author Mahdi Shiekh Hosseini
+ */
+public abstract class BinanceAbstractFactory {
+
+ /**
+ * General binance factory .
+ * this method create a factory by type of engine you choose .
+ *
+ * @param apiKey
+ * @param secretKey
+ * @param engineType
+ * @param apiConfigClass
+ * @return instance of object extended BinanceFactory
+ * @see BinanceApiConfig
+ * @see BinanceEngineType
+ */
+ public static BinanceFactory createFactory(String apiKey, String secretKey, BinanceEngineType engineType, Class extends BinanceApiConfig> apiConfigClass) {
+ final String apiUrl = getApiUrl(apiConfigClass);
+ final String websocketUrl = getWebsocketUrl(apiConfigClass);
+ switch (engineType) {
+ case SPOT:
+ return BinanceSpotApiClientFactory.newInstance(apiKey, secretKey, apiUrl, websocketUrl);
+ case MARGIN:
+ return BinanceMarginApiClientFactory.newInstance(apiKey, secretKey, apiUrl, websocketUrl);
+ case SWAP:
+ return BinanceSwapApiClientFactory.newInstance(apiKey, secretKey, apiUrl);
+ case FUTURES:
+ case TESTNET:
+ return BinanceFuturesApiClientFactory.newInstance(apiKey, secretKey, apiUrl, websocketUrl);
+ }
+ throw new IllegalArgumentException();
+ }
+
+ /**
+ * @param apiKey
+ * @param secretKey
+ * @param engineType
+ * @return instance of object extended BinanceFactory
+ * @see BinanceEngineType
+ */
+ public static BinanceFactory createFactory(String apiKey, String secretKey, BinanceEngineType engineType) {
+ switch (engineType) {
+ case SPOT:
+ return createSpotFactory(apiKey, secretKey);
+ case MARGIN:
+ return createMarginFactory(apiKey, secretKey);
+ case SWAP:
+ return createSwapFactory(apiKey, secretKey);
+ case FUTURES:
+ return createFuturesFactory(apiKey, secretKey);
+ case TESTNET:
+ return createTestnetFactory(apiKey, secretKey);
+ }
+ throw new IllegalArgumentException();
+ }
+
+ /**
+ * Basic and simple create spot engine factory .
+ *
+ * @param apiKey
+ * @param secretKey
+ * @return instance of object extended BinanceFactory
+ */
+ public static BinanceSpotApiClientFactory createSpotFactory(String apiKey, String secretKey) {
+ final String apiUrl = getApiUrl(SpotApiConfig.class);
+ final String websocketUrl = getWebsocketUrl(SpotApiConfig.class);
+ return BinanceSpotApiClientFactory.newInstance(apiKey, secretKey, apiUrl, websocketUrl);
+ }
+
+ /**
+ * Basic and simple create margin engine factory .
+ *
+ * @param apiKey
+ * @param secretKey
+ * @return instance of object extended BinanceFactory
+ */
+ public static BinanceMarginApiClientFactory createMarginFactory(String apiKey, String secretKey) {
+ final String apiUrl = getApiUrl(SpotApiConfig.class);
+ final String websocketUrl = getWebsocketUrl(SpotApiConfig.class);
+ return BinanceMarginApiClientFactory.newInstance(apiKey, secretKey, apiUrl, websocketUrl);
+ }
+
+ /**
+ * Basic and simple create margin swap factory .
+ *
+ * @param apiKey
+ * @param secretKey
+ * @return instance of object extended BinanceFactory
+ */
+ public static BinanceSwapApiClientFactory createSwapFactory(String apiKey, String secretKey) {
+ final String apiUrl = getApiUrl(SpotApiConfig.class);
+ return BinanceSwapApiClientFactory.newInstance(apiKey, secretKey, apiUrl);
+ }
+
+ /**
+ * Basic and simple create futures engine factory .
+ *
+ * @param apiKey
+ * @param secretKey
+ * @return instance of object extended BinanceFactory
+ */
+ public static BinanceFuturesApiClientFactory createFuturesFactory(String apiKey, String secretKey) {
+ final String apiUrl = getApiUrl(FuturesApiConfig.class);
+ final String websocketUrl = getWebsocketUrl(FuturesApiConfig.class);
+ return BinanceFuturesApiClientFactory.newInstance(apiKey, secretKey, apiUrl, websocketUrl);
+ }
+
+ /**
+ * Basic and simple create testnet engine factory .
+ *
+ * @param apiKey
+ * @param secretKey
+ * @return instance of object extended BinanceFactory
+ */
+ public static BinanceFuturesApiClientFactory createTestnetFactory(String apiKey, String secretKey) {
+ final String apiUrl = getApiUrl(TestnetApiConfig.class);
+ final String websocketUrl = getWebsocketUrl(TestnetApiConfig.class);
+ return BinanceFuturesApiClientFactory.newInstance(apiKey, secretKey, apiUrl, websocketUrl);
+ }
+
+ /**
+ * @return instance of BinanceSpotApiClientFactory
+ */
+ public static BinanceSpotApiClientFactory createSpotFactory() {
+ return createSpotFactory(null, null);
+ }
+
+ /**
+ * @return instance of BinanceSpotApiClientFactory
+ */
+ public static BinanceFuturesApiClientFactory createFuturesFactory() {
+ return createFuturesFactory(null, null);
+ }
+
+ /**
+ * @return instance of BinanceSpotApiClientFactory
+ */
+ public static BinanceFuturesApiClientFactory createTestnetFactory() {
+ return createTestnetFactory(null, null);
+ }
+
+ /**
+ * get apiUrl from ApiConfig annotation
+ *
+ * @param apiConfigClass
+ * @return apiUrl
+ * @see ApiConfig
+ */
+ private static String getApiUrl(Class extends BinanceApiConfig> apiConfigClass) {
+ return getApiConfig(apiConfigClass).apiUrl();
+ }
+
+ /**
+ * get websocketUrl from ApiConfig annotation
+ *
+ * @param apiConfigClass
+ * @return websocketUrl
+ * @see ApiConfig
+ */
+ private static String getWebsocketUrl(Class extends BinanceApiConfig> apiConfigClass) {
+ return getApiConfig(apiConfigClass).webSocketUrl();
+ }
+
+ /**
+ * @param apiConfigClass
+ * @return
+ */
+ private static ApiConfig getApiConfig(Class extends BinanceApiConfig> apiConfigClass) {
+ if (apiConfigClass.isAnnotationPresent(ApiConfig.class)) {
+ return apiConfigClass.getAnnotation(ApiConfig.class);
+ } else {
+ throw new BinanceIllegalException("Class should implemented BinanceApiConfig");
+ }
+ }
+
+}
diff --git a/src/main/java/com/binance/api/client/factory/BinanceFactory.java b/src/main/java/com/binance/api/client/factory/BinanceFactory.java
new file mode 100644
index 000000000..a80ee70e5
--- /dev/null
+++ b/src/main/java/com/binance/api/client/factory/BinanceFactory.java
@@ -0,0 +1,20 @@
+package com.binance.api.client.factory;
+
+/**
+ * Generic binance factory used for any implementation of new engines
+ *
+ * @author Mahdi Shiekh Hosseini
+ * @see com.binance.api.client.BinanceEngineType
+ */
+public interface BinanceFactory {
+
+ /**
+ * @return instance of asynchronous class
+ */
+ ASYNC newAsyncRestClient();
+
+ /**
+ * @return instance of synchronous class
+ */
+ SYNC newRestClient();
+}
diff --git a/src/main/java/com/binance/api/client/factory/BinanceFuturesApiClientFactory.java b/src/main/java/com/binance/api/client/factory/BinanceFuturesApiClientFactory.java
new file mode 100755
index 000000000..8df444537
--- /dev/null
+++ b/src/main/java/com/binance/api/client/factory/BinanceFuturesApiClientFactory.java
@@ -0,0 +1,83 @@
+package com.binance.api.client.factory;
+
+import com.binance.api.client.api.BinanceApiWebSocketClient;
+import com.binance.api.client.api.async.BinanceApiAsyncFuturesRestClient;
+import com.binance.api.client.api.sync.BinanceApiFuturesRestClient;
+import com.binance.api.client.impl.async.BinanceApiAsyncFuturesRestClientImpl;
+import com.binance.api.client.impl.sync.BinanceApiFuturesRestClientImpl;
+import com.binance.api.client.impl.ws.BinanceApiWebSocketClientImpl;
+
+import static com.binance.api.client.impl.BinanceApiServiceGenerator.getSharedClient;
+
+/**
+ * A factory for creating BinanceApi client objects.
+ */
+public class BinanceFuturesApiClientFactory implements BinanceFactory {
+
+ /**
+ * API Key
+ */
+ private final String apiKey;
+
+ /**
+ * Secret.
+ */
+ private final String secret;
+
+ private final String apiUrl;
+ private final String websocketUrl;
+
+ /**
+ * Instantiates a new binance api client factory.
+ *
+ * @param apiKey the API key
+ * @param secret the Secret
+ */
+ private BinanceFuturesApiClientFactory(String apiKey, String secret, String apiUrl, String websocketUrl) {
+ this.apiKey = apiKey;
+ this.secret = secret;
+ this.apiUrl = apiUrl;
+ this.websocketUrl = websocketUrl;
+ }
+
+ /**
+ * New instance.
+ *
+ * @param apiKey the API key
+ * @param secret the Secret
+ * @return the binance api client factory
+ */
+ public static BinanceFuturesApiClientFactory newInstance(String apiKey, String secret, String apiUrl, String websocketUrl) {
+ return new BinanceFuturesApiClientFactory(apiKey, secret, apiUrl, websocketUrl);
+ }
+
+ /**
+ * New instance without authentication.
+ *
+ * @return the binance api client factory
+ */
+ public static BinanceFuturesApiClientFactory newInstance() {
+ return new BinanceFuturesApiClientFactory(null, null, null, null);
+ }
+
+ /**
+ * Creates a new synchronous/blocking Futures REST client.
+ */
+ public BinanceApiFuturesRestClient newRestClient() {
+ return new BinanceApiFuturesRestClientImpl(apiKey, secret, apiUrl);
+ }
+
+ /**
+ * Creates a new asynchronous/non-blocking Futures REST client.
+ */
+ public BinanceApiAsyncFuturesRestClient newAsyncRestClient() {
+ return new BinanceApiAsyncFuturesRestClientImpl(apiKey, secret, apiUrl);
+ }
+
+ /**
+ * Creates a new web socket client used for handling data streams.
+ */
+ public BinanceApiWebSocketClient newWebSocketClient() {
+ return new BinanceApiWebSocketClientImpl(getSharedClient(), websocketUrl);
+ }
+}
diff --git a/src/main/java/com/binance/api/client/factory/BinanceMarginApiClientFactory.java b/src/main/java/com/binance/api/client/factory/BinanceMarginApiClientFactory.java
new file mode 100755
index 000000000..37cdff3f0
--- /dev/null
+++ b/src/main/java/com/binance/api/client/factory/BinanceMarginApiClientFactory.java
@@ -0,0 +1,73 @@
+package com.binance.api.client.factory;
+
+import com.binance.api.client.api.async.BinanceApiAsyncMarginRestClient;
+import com.binance.api.client.api.sync.BinanceApiMarginRestClient;
+import com.binance.api.client.impl.async.BinanceApiAsyncMarginRestClientImpl;
+import com.binance.api.client.impl.sync.BinanceApiMarginRestClientImpl;
+
+/**
+ * A factory for creating BinanceApi client objects.
+ */
+public class BinanceMarginApiClientFactory implements BinanceFactory {
+
+ /**
+ * API Key
+ */
+ private final String apiKey;
+
+ /**
+ * Secret.
+ */
+ private final String secret;
+
+ private final String apiUrl;
+ private final String websocketUrl;
+
+ /**
+ * Instantiates a new binance api client factory.
+ *
+ * @param apiKey the API key
+ * @param secret the Secret
+ */
+ private BinanceMarginApiClientFactory(String apiKey, String secret, String apiUrl, String websocketUrl) {
+ this.apiKey = apiKey;
+ this.secret = secret;
+ this.apiUrl = apiUrl;
+ this.websocketUrl = websocketUrl;
+ }
+
+ /**
+ * New instance.
+ *
+ * @param apiKey the API key
+ * @param secret the Secret
+ * @return the binance api client factory
+ */
+ public static BinanceMarginApiClientFactory newInstance(String apiKey, String secret, String apiUrl, String websocketUrl) {
+ return new BinanceMarginApiClientFactory(apiKey, secret, apiUrl, websocketUrl);
+ }
+
+ /**
+ * New instance without authentication.
+ *
+ * @return the binance api client factory
+ * @see BinanceAbstractFactory
+ */
+ public static BinanceMarginApiClientFactory newInstance() {
+ return new BinanceMarginApiClientFactory(null, null, null, null);
+ }
+
+ /**
+ * Creates a new asynchronous/non-blocking Margin REST client.
+ */
+ public BinanceApiAsyncMarginRestClient newAsyncRestClient() {
+ return new BinanceApiAsyncMarginRestClientImpl(apiKey, secret, apiUrl);
+ }
+
+ /**
+ * Creates a new synchronous/blocking Margin REST client.
+ */
+ public BinanceApiMarginRestClient newRestClient() {
+ return new BinanceApiMarginRestClientImpl(apiKey, secret, apiUrl);
+ }
+}
diff --git a/src/main/java/com/binance/api/client/factory/BinanceSpotApiClientFactory.java b/src/main/java/com/binance/api/client/factory/BinanceSpotApiClientFactory.java
new file mode 100755
index 000000000..f7f5b5e8d
--- /dev/null
+++ b/src/main/java/com/binance/api/client/factory/BinanceSpotApiClientFactory.java
@@ -0,0 +1,84 @@
+package com.binance.api.client.factory;
+
+import com.binance.api.client.api.BinanceApiWebSocketClient;
+import com.binance.api.client.api.async.BinanceApiSpotAsyncRestClient;
+import com.binance.api.client.api.sync.BinanceApiSpotRestClient;
+import com.binance.api.client.impl.async.BinanceApiSpotAsyncRestClientImpl;
+import com.binance.api.client.impl.sync.BinanceApiSpotRestClientImpl;
+import com.binance.api.client.impl.ws.BinanceApiWebSocketClientImpl;
+
+import static com.binance.api.client.impl.BinanceApiServiceGenerator.getSharedClient;
+
+/**
+ * A factory for creating BinanceApi client objects.
+ */
+public class BinanceSpotApiClientFactory implements BinanceFactory {
+
+ /**
+ * API Key
+ */
+ private final String apiKey;
+
+ /**
+ * Secret.
+ */
+ private final String secret;
+
+ private final String apiUrl;
+ private final String websocketUrl;
+
+ /**
+ * Instantiates a new binance api client factory.
+ *
+ * @param apiKey the API key
+ * @param secret the Secret
+ */
+ private BinanceSpotApiClientFactory(String apiKey, String secret, String apiUrl, String websocketUrl) {
+ this.apiKey = apiKey;
+ this.secret = secret;
+ this.apiUrl = apiUrl;
+ this.websocketUrl = websocketUrl;
+ }
+
+ /**
+ * New instance.
+ *
+ * @param apiKey the API key
+ * @param secret the Secret
+ * @return the binance api client factory
+ */
+ public static BinanceSpotApiClientFactory newInstance(String apiKey, String secret, String apiUrl, String websocketUrl) {
+ return new BinanceSpotApiClientFactory(apiKey, secret, apiUrl, websocketUrl);
+ }
+
+ /**
+ * New instance without authentication.
+ *
+ * @return the binance api client factory
+ * @see BinanceAbstractFactory
+ */
+ public static BinanceSpotApiClientFactory newInstance() {
+ return new BinanceSpotApiClientFactory(null, null, null, null);
+ }
+
+ /**
+ * Creates a new synchronous/blocking REST client.
+ */
+ public BinanceApiSpotRestClient newRestClient() {
+ return new BinanceApiSpotRestClientImpl(apiKey, secret, apiUrl);
+ }
+
+ /**
+ * Creates a new asynchronous/non-blocking REST client.
+ */
+ public BinanceApiSpotAsyncRestClient newAsyncRestClient() {
+ return new BinanceApiSpotAsyncRestClientImpl(apiKey, secret, apiUrl);
+ }
+
+ /**
+ * Creates a new web socket client used for handling data streams.
+ */
+ public BinanceApiWebSocketClient newWebSocketClient() {
+ return new BinanceApiWebSocketClientImpl(getSharedClient(), websocketUrl);
+ }
+}
diff --git a/src/main/java/com/binance/api/client/factory/BinanceSwapApiClientFactory.java b/src/main/java/com/binance/api/client/factory/BinanceSwapApiClientFactory.java
new file mode 100755
index 000000000..ee6671e57
--- /dev/null
+++ b/src/main/java/com/binance/api/client/factory/BinanceSwapApiClientFactory.java
@@ -0,0 +1,71 @@
+package com.binance.api.client.factory;
+
+import com.binance.api.client.api.async.BinanceApiSwapAsyncRestClient;
+import com.binance.api.client.api.sync.BinanceApiSwapRestClient;
+import com.binance.api.client.impl.async.BinanceApiSwapAsyncRestClientImpl;
+import com.binance.api.client.impl.sync.BinanceApiSwapRestClientImpl;
+
+/**
+ * A factory for creating BinanceApi client objects.
+ */
+public class BinanceSwapApiClientFactory implements BinanceFactory {
+
+ /**
+ * API Key
+ */
+ private final String apiKey;
+
+ /**
+ * Secret.
+ */
+ private final String secret;
+
+ private final String apiUrl;
+
+ /**
+ * Instantiates a new binance api client factory.
+ *
+ * @param apiKey the API key
+ * @param secret the Secret
+ */
+ private BinanceSwapApiClientFactory(String apiKey, String secret, String apiUrl) {
+ this.apiKey = apiKey;
+ this.secret = secret;
+ this.apiUrl = apiUrl;
+ }
+
+ /**
+ * New instance.
+ *
+ * @param apiKey the API key
+ * @param secret the Secret
+ * @return the binance api client factory
+ */
+ public static BinanceSwapApiClientFactory newInstance(String apiKey, String secret, String apiUrl) {
+ return new BinanceSwapApiClientFactory(apiKey, secret, apiUrl);
+ }
+
+ /**
+ * New instance without authentication.
+ *
+ * @return the binance api client factory
+ * @see BinanceAbstractFactory
+ */
+ public static BinanceSwapApiClientFactory newInstance() {
+ return new BinanceSwapApiClientFactory(null, null, null);
+ }
+
+ /**
+ * Creates a new synchronous/blocking Swap REST client.
+ */
+ public BinanceApiSwapRestClient newRestClient() {
+ return new BinanceApiSwapRestClientImpl(apiKey, secret, apiUrl);
+ }
+
+ /**
+ * Creates a new asynchronous/non-blocking REST client.
+ */
+ public BinanceApiSwapAsyncRestClient newAsyncRestClient() {
+ return new BinanceApiSwapAsyncRestClientImpl(apiKey, secret, apiUrl);
+ }
+}
diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiAsyncRestClientImpl.java b/src/main/java/com/binance/api/client/impl/BinanceApiAsyncRestClientImpl.java
deleted file mode 100755
index e6ea387b9..000000000
--- a/src/main/java/com/binance/api/client/impl/BinanceApiAsyncRestClientImpl.java
+++ /dev/null
@@ -1,251 +0,0 @@
-package com.binance.api.client.impl;
-
-import com.binance.api.client.BinanceApiAsyncRestClient;
-import com.binance.api.client.BinanceApiCallback;
-import com.binance.api.client.config.BinanceApiConfig;
-import com.binance.api.client.constant.BinanceApiConstants;
-import com.binance.api.client.domain.account.Account;
-import com.binance.api.client.domain.account.DepositAddress;
-import com.binance.api.client.domain.account.DepositHistory;
-import com.binance.api.client.domain.account.NewOrder;
-import com.binance.api.client.domain.account.NewOrderResponse;
-import com.binance.api.client.domain.account.Order;
-import com.binance.api.client.domain.account.Trade;
-import com.binance.api.client.domain.account.TradeHistoryItem;
-import com.binance.api.client.domain.account.WithdrawHistory;
-import com.binance.api.client.domain.account.WithdrawResult;
-import com.binance.api.client.domain.account.request.AllOrdersRequest;
-import com.binance.api.client.domain.account.request.CancelOrderRequest;
-import com.binance.api.client.domain.account.request.CancelOrderResponse;
-import com.binance.api.client.domain.account.request.OrderRequest;
-import com.binance.api.client.domain.account.request.OrderStatusRequest;
-import com.binance.api.client.domain.event.ListenKey;
-import com.binance.api.client.domain.general.Asset;
-import com.binance.api.client.domain.general.ExchangeInfo;
-import com.binance.api.client.domain.general.ServerTime;
-import com.binance.api.client.domain.market.AggTrade;
-import com.binance.api.client.domain.market.BookTicker;
-import com.binance.api.client.domain.market.Candlestick;
-import com.binance.api.client.domain.market.CandlestickInterval;
-import com.binance.api.client.domain.market.OrderBook;
-import com.binance.api.client.domain.market.TickerPrice;
-import com.binance.api.client.domain.market.TickerStatistics;
-
-import java.util.List;
-
-import static com.binance.api.client.impl.BinanceApiServiceGenerator.createService;
-
-/**
- * Implementation of Binance's REST API using Retrofit with asynchronous/non-blocking method calls.
- */
-public class BinanceApiAsyncRestClientImpl implements BinanceApiAsyncRestClient {
-
- private final BinanceApiService binanceApiService;
-
- public BinanceApiAsyncRestClientImpl(String apiKey, String secret) {
- binanceApiService = createService(BinanceApiService.class, apiKey, secret);
- }
-
- // General endpoints
-
- @Override
- public void ping(BinanceApiCallback callback) {
- binanceApiService.ping().enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getServerTime(BinanceApiCallback callback) {
- binanceApiService.getServerTime().enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getExchangeInfo(BinanceApiCallback callback) {
- binanceApiService.getExchangeInfo().enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getAllAssets(BinanceApiCallback> callback) {
- binanceApiService.getAllAssets(BinanceApiConfig.getAssetInfoApiBaseUrl() + "assetWithdraw/getAllAsset.html")
- .enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- // Market Data endpoints
-
- @Override
- public void getOrderBook(String symbol, Integer limit, BinanceApiCallback callback) {
- binanceApiService.getOrderBook(symbol, limit).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getTrades(String symbol, Integer limit, BinanceApiCallback> callback) {
- binanceApiService.getTrades(symbol, limit).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getHistoricalTrades(String symbol, Integer limit, Long fromId, BinanceApiCallback> callback) {
- binanceApiService.getHistoricalTrades(symbol, limit, fromId).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getAggTrades(String symbol, String fromId, Integer limit, Long startTime, Long endTime, BinanceApiCallback> callback) {
- binanceApiService.getAggTrades(symbol, fromId, limit, startTime, endTime).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getAggTrades(String symbol, BinanceApiCallback> callback) {
- getAggTrades(symbol, null, null, null, null, callback);
- }
-
- @Override
- public void getCandlestickBars(String symbol, CandlestickInterval interval, Integer limit, Long startTime, Long endTime, BinanceApiCallback> callback) {
- binanceApiService.getCandlestickBars(symbol, interval.getIntervalId(), limit, startTime, endTime).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getCandlestickBars(String symbol, CandlestickInterval interval, BinanceApiCallback> callback) {
- getCandlestickBars(symbol, interval, null, null, null, callback);
- }
-
- @Override
- public void get24HrPriceStatistics(String symbol, BinanceApiCallback callback) {
- binanceApiService.get24HrPriceStatistics(symbol).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getAll24HrPriceStatistics(BinanceApiCallback> callback) {
- binanceApiService.getAll24HrPriceStatistics().enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getAllPrices(BinanceApiCallback> callback) {
- binanceApiService.getLatestPrices().enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getPrice(String symbol , BinanceApiCallback callback) {
- binanceApiService.getLatestPrice(symbol).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getBookTickers(BinanceApiCallback> callback) {
- binanceApiService.getBookTickers().enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void newOrder(NewOrder order, BinanceApiCallback callback) {
- if (order.getQuoteOrderQty() == null) {
- binanceApiService.newOrder(order.getSymbol(), order.getSide(), order.getType(),
- order.getTimeInForce(), order.getQuantity(), order.getPrice(),
- order.getNewClientOrderId(), order.getStopPrice(), order.getIcebergQty(), order.getNewOrderRespType(),
- order.getRecvWindow(), order.getTimestamp()).enqueue(new BinanceApiCallbackAdapter<>(callback));
- } else {
- binanceApiService.newOrderQuoteQty(order.getSymbol(), order.getSide(), order.getType(),
- order.getTimeInForce(), order.getQuoteOrderQty(), order.getPrice(),
- order.getNewClientOrderId(), order.getStopPrice(), order.getIcebergQty(), order.getNewOrderRespType(),
- order.getRecvWindow(), order.getTimestamp()).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
- }
-
- @Override
- public void newOrderTest(NewOrder order, BinanceApiCallback callback) {
- binanceApiService.newOrderTest(order.getSymbol(), order.getSide(), order.getType(),
- order.getTimeInForce(), order.getQuantity(), order.getPrice(), order.getNewClientOrderId(), order.getStopPrice(),
- order.getIcebergQty(), order.getNewOrderRespType(), order.getRecvWindow(), order.getTimestamp()).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- // Account endpoints
-
- @Override
- public void getOrderStatus(OrderStatusRequest orderStatusRequest, BinanceApiCallback callback) {
- binanceApiService.getOrderStatus(orderStatusRequest.getSymbol(),
- orderStatusRequest.getOrderId(), orderStatusRequest.getOrigClientOrderId(),
- orderStatusRequest.getRecvWindow(), orderStatusRequest.getTimestamp()).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void cancelOrder(CancelOrderRequest cancelOrderRequest, BinanceApiCallback callback) {
- binanceApiService.cancelOrder(cancelOrderRequest.getSymbol(),
- cancelOrderRequest.getOrderId(), cancelOrderRequest.getOrigClientOrderId(), cancelOrderRequest.getNewClientOrderId(),
- cancelOrderRequest.getRecvWindow(), cancelOrderRequest.getTimestamp()).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getOpenOrders(OrderRequest orderRequest, BinanceApiCallback> callback) {
- binanceApiService.getOpenOrders(orderRequest.getSymbol(),
- orderRequest.getRecvWindow(), orderRequest.getTimestamp()).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getAllOrders(AllOrdersRequest orderRequest, BinanceApiCallback> callback) {
- binanceApiService.getAllOrders(orderRequest.getSymbol(),
- orderRequest.getOrderId(), orderRequest.getLimit(),
- orderRequest.getRecvWindow(), orderRequest.getTimestamp()).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getAccount(Long recvWindow, Long timestamp, BinanceApiCallback callback) {
- binanceApiService.getAccount(recvWindow, timestamp).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getAccount(BinanceApiCallback callback) {
- long timestamp = System.currentTimeMillis();
- binanceApiService.getAccount(BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, timestamp).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getMyTrades(String symbol, Integer limit, Long fromId, Long recvWindow, Long timestamp, BinanceApiCallback> callback) {
- binanceApiService.getMyTrades(symbol, limit, fromId, recvWindow, timestamp).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getMyTrades(String symbol, Integer limit, BinanceApiCallback> callback) {
- getMyTrades(symbol, limit, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis(), callback);
- }
-
- @Override
- public void getMyTrades(String symbol, BinanceApiCallback> callback) {
- getMyTrades(symbol, null, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis(), callback);
- }
-
- @Override
- public void withdraw(String asset, String address, String amount, String name, String addressTag, BinanceApiCallback callback) {
- binanceApiService.withdraw(asset, address, amount, name, addressTag, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis())
- .enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getDepositHistory(String asset, BinanceApiCallback callback) {
- binanceApiService.getDepositHistory(asset, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis())
- .enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getWithdrawHistory(String asset, BinanceApiCallback callback) {
- binanceApiService.getWithdrawHistory(asset, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis())
- .enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void getDepositAddress(String asset, BinanceApiCallback callback) {
- binanceApiService.getDepositAddress(asset, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis())
- .enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- // User stream endpoints
-
- @Override
- public void startUserDataStream(BinanceApiCallback callback) {
- binanceApiService.startUserDataStream().enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void keepAliveUserDataStream(String listenKey, BinanceApiCallback callback) {
- binanceApiService.keepAliveUserDataStream(listenKey).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-
- @Override
- public void closeUserDataStream(String listenKey, BinanceApiCallback callback) {
- binanceApiService.closeAliveUserDataStream(listenKey).enqueue(new BinanceApiCallbackAdapter<>(callback));
- }
-}
diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiCallbackAdapter.java b/src/main/java/com/binance/api/client/impl/BinanceApiCallbackAdapter.java
index 355fa1348..8cd6859ca 100755
--- a/src/main/java/com/binance/api/client/impl/BinanceApiCallbackAdapter.java
+++ b/src/main/java/com/binance/api/client/impl/BinanceApiCallbackAdapter.java
@@ -1,7 +1,7 @@
package com.binance.api.client.impl;
-import com.binance.api.client.BinanceApiCallback;
-import com.binance.api.client.BinanceApiError;
+import com.binance.api.client.api.BinanceApiCallback;
+import com.binance.api.client.api.BinanceApiError;
import com.binance.api.client.exception.BinanceApiException;
import retrofit2.Call;
import retrofit2.Callback;
diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiRestClientImpl.java b/src/main/java/com/binance/api/client/impl/BinanceApiRestClientImpl.java
deleted file mode 100755
index dd647166d..000000000
--- a/src/main/java/com/binance/api/client/impl/BinanceApiRestClientImpl.java
+++ /dev/null
@@ -1,249 +0,0 @@
-package com.binance.api.client.impl;
-
-import com.binance.api.client.BinanceApiRestClient;
-import com.binance.api.client.config.BinanceApiConfig;
-import com.binance.api.client.constant.BinanceApiConstants;
-import com.binance.api.client.domain.account.*;
-import com.binance.api.client.domain.account.request.*;
-import com.binance.api.client.domain.general.Asset;
-import com.binance.api.client.domain.general.ExchangeInfo;
-import com.binance.api.client.domain.market.*;
-import retrofit2.Call;
-
-import java.util.List;
-
-import static com.binance.api.client.impl.BinanceApiServiceGenerator.createService;
-import static com.binance.api.client.impl.BinanceApiServiceGenerator.executeSync;
-
-/**
- * Implementation of Binance's REST API using Retrofit with synchronous/blocking
- * method calls.
- */
-public class BinanceApiRestClientImpl implements BinanceApiRestClient {
-
- private final BinanceApiService binanceApiService;
-
- public BinanceApiRestClientImpl(String apiKey, String secret) {
- binanceApiService = createService(BinanceApiService.class, apiKey, secret);
- }
-
- // General endpoints
-
- @Override
- public void ping() {
- executeSync(binanceApiService.ping());
- }
-
- @Override
- public Long getServerTime() {
- return executeSync(binanceApiService.getServerTime()).getServerTime();
- }
-
- @Override
- public ExchangeInfo getExchangeInfo() {
- return executeSync(binanceApiService.getExchangeInfo());
- }
-
- @Override
- public List getAllAssets() {
- return executeSync(binanceApiService
- .getAllAssets(BinanceApiConfig.getAssetInfoApiBaseUrl() + "assetWithdraw/getAllAsset.html"));
- }
-
- // Market Data endpoints
-
- @Override
- public OrderBook getOrderBook(String symbol, Integer limit) {
- return executeSync(binanceApiService.getOrderBook(symbol, limit));
- }
-
- @Override
- public List getTrades(String symbol, Integer limit) {
- return executeSync(binanceApiService.getTrades(symbol, limit));
- }
-
- @Override
- public List getHistoricalTrades(String symbol, Integer limit, Long fromId) {
- return executeSync(binanceApiService.getHistoricalTrades(symbol, limit, fromId));
- }
-
- @Override
- public List getAggTrades(String symbol, String fromId, Integer limit, Long startTime, Long endTime) {
- return executeSync(binanceApiService.getAggTrades(symbol, fromId, limit, startTime, endTime));
- }
-
- @Override
- public List getAggTrades(String symbol) {
- return getAggTrades(symbol, null, null, null, null);
- }
-
- @Override
- public List getCandlestickBars(String symbol, CandlestickInterval interval, Integer limit,
- Long startTime, Long endTime) {
- return executeSync(
- binanceApiService.getCandlestickBars(symbol, interval.getIntervalId(), limit, startTime, endTime));
- }
-
- @Override
- public List getCandlestickBars(String symbol, CandlestickInterval interval) {
- return getCandlestickBars(symbol, interval, null, null, null);
- }
-
- @Override
- public TickerStatistics get24HrPriceStatistics(String symbol) {
- return executeSync(binanceApiService.get24HrPriceStatistics(symbol));
- }
-
- @Override
- public List getAll24HrPriceStatistics() {
- return executeSync(binanceApiService.getAll24HrPriceStatistics());
- }
-
- @Override
- public TickerPrice getPrice(String symbol) {
- return executeSync(binanceApiService.getLatestPrice(symbol));
- }
-
- @Override
- public List getAllPrices() {
- return executeSync(binanceApiService.getLatestPrices());
- }
-
- @Override
- public List getBookTickers() {
- return executeSync(binanceApiService.getBookTickers());
- }
-
- @Override
- public NewOrderResponse newOrder(NewOrder order) {
- final Call call;
- if (order.getQuoteOrderQty() == null) {
- call = binanceApiService.newOrder(order.getSymbol(), order.getSide(), order.getType(),
- order.getTimeInForce(), order.getQuantity(), order.getPrice(), order.getNewClientOrderId(),
- order.getStopPrice(), order.getIcebergQty(), order.getNewOrderRespType(), order.getRecvWindow(),
- order.getTimestamp());
- } else {
- call = binanceApiService.newOrderQuoteQty(order.getSymbol(), order.getSide(), order.getType(),
- order.getTimeInForce(), order.getQuoteOrderQty(), order.getPrice(), order.getNewClientOrderId(),
- order.getStopPrice(), order.getIcebergQty(), order.getNewOrderRespType(), order.getRecvWindow(),
- order.getTimestamp());
- }
- return executeSync(call);
- }
-
- @Override
- public void newOrderTest(NewOrder order) {
- executeSync(binanceApiService.newOrderTest(order.getSymbol(), order.getSide(), order.getType(),
- order.getTimeInForce(), order.getQuantity(), order.getPrice(), order.getNewClientOrderId(),
- order.getStopPrice(), order.getIcebergQty(), order.getNewOrderRespType(), order.getRecvWindow(),
- order.getTimestamp()));
- }
-
- // Account endpoints
-
- @Override
- public Order getOrderStatus(OrderStatusRequest orderStatusRequest) {
- return executeSync(binanceApiService.getOrderStatus(orderStatusRequest.getSymbol(),
- orderStatusRequest.getOrderId(), orderStatusRequest.getOrigClientOrderId(),
- orderStatusRequest.getRecvWindow(), orderStatusRequest.getTimestamp()));
- }
-
- @Override
- public CancelOrderResponse cancelOrder(CancelOrderRequest cancelOrderRequest) {
- return executeSync(
- binanceApiService.cancelOrder(cancelOrderRequest.getSymbol(), cancelOrderRequest.getOrderId(),
- cancelOrderRequest.getOrigClientOrderId(), cancelOrderRequest.getNewClientOrderId(),
- cancelOrderRequest.getRecvWindow(), cancelOrderRequest.getTimestamp()));
- }
-
- @Override
- public List getOpenOrders(OrderRequest orderRequest) {
- return executeSync(binanceApiService.getOpenOrders(orderRequest.getSymbol(), orderRequest.getRecvWindow(),
- orderRequest.getTimestamp()));
- }
-
- @Override
- public List getAllOrders(AllOrdersRequest orderRequest) {
- return executeSync(binanceApiService.getAllOrders(orderRequest.getSymbol(), orderRequest.getOrderId(),
- orderRequest.getLimit(), orderRequest.getRecvWindow(), orderRequest.getTimestamp()));
- }
-
- @Override
- public Account getAccount(Long recvWindow, Long timestamp) {
- return executeSync(binanceApiService.getAccount(recvWindow, timestamp));
- }
-
- @Override
- public Account getAccount() {
- return getAccount(BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis());
- }
-
- @Override
- public List getMyTrades(String symbol, Integer limit, Long fromId, Long recvWindow, Long timestamp) {
- return executeSync(binanceApiService.getMyTrades(symbol, limit, fromId, recvWindow, timestamp));
- }
-
- @Override
- public List getMyTrades(String symbol, Integer limit) {
- return getMyTrades(symbol, limit, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW,
- System.currentTimeMillis());
- }
-
- @Override
- public List getMyTrades(String symbol) {
- return getMyTrades(symbol, null, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW,
- System.currentTimeMillis());
- }
-
- @Override
- public List getMyTrades(String symbol, Long fromId) {
- return getMyTrades(symbol, null, fromId, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW,
- System.currentTimeMillis());
- }
-
- @Override
- public WithdrawResult withdraw(String asset, String address, String amount, String name, String addressTag) {
- return executeSync(binanceApiService.withdraw(asset, address, amount, name, addressTag,
- BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis()));
- }
-
- @Override
- public DepositHistory getDepositHistory(String asset) {
- return executeSync(binanceApiService.getDepositHistory(asset, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW,
- System.currentTimeMillis()));
- }
-
- @Override
- public WithdrawHistory getWithdrawHistory(String asset) {
- return executeSync(binanceApiService.getWithdrawHistory(asset, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW,
- System.currentTimeMillis()));
- }
-
- @Override
- public List getSubAccountTransfers() {
- return executeSync(binanceApiService.getSubAccountTransfers(System.currentTimeMillis()));
- }
-
- @Override
- public DepositAddress getDepositAddress(String asset) {
- return executeSync(binanceApiService.getDepositAddress(asset, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW,
- System.currentTimeMillis()));
- }
-
- // User stream endpoints
-
- @Override
- public String startUserDataStream() {
- return executeSync(binanceApiService.startUserDataStream()).toString();
- }
-
- @Override
- public void keepAliveUserDataStream(String listenKey) {
- executeSync(binanceApiService.keepAliveUserDataStream(listenKey));
- }
-
- @Override
- public void closeUserDataStream(String listenKey) {
- executeSync(binanceApiService.closeAliveUserDataStream(listenKey));
- }
-}
diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java
index 1bd11a9e2..8c1785f22 100755
--- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java
+++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java
@@ -1,7 +1,7 @@
package com.binance.api.client.impl;
-import com.binance.api.client.BinanceApiError;
-import com.binance.api.client.config.BinanceApiConfig;
+import com.binance.api.client.api.BinanceApiError;
+import com.binance.api.client.api.BinanceApiService;
import com.binance.api.client.exception.BinanceApiException;
import com.binance.api.client.security.AuthenticationInterceptor;
import okhttp3.Dispatcher;
@@ -38,16 +38,12 @@ public class BinanceApiServiceGenerator {
@SuppressWarnings("unchecked")
private static final Converter errorBodyConverter =
- (Converter)converterFactory.responseBodyConverter(
+ (Converter) converterFactory.responseBodyConverter(
BinanceApiError.class, new Annotation[0], null);
- public static S createService(Class serviceClass) {
- return createService(serviceClass, null, null);
- }
-
- public static S createService(Class serviceClass, String apiKey, String secret) {
+ public static S createService(Class serviceClass, String apiKey, String secret, String apiUrl) {
Retrofit.Builder retrofitBuilder = new Retrofit.Builder()
- .baseUrl(BinanceApiConfig.getApiBaseUrl())
+ .baseUrl(apiUrl)
.addConverterFactory(converterFactory);
if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) {
diff --git a/src/main/java/com/binance/api/client/impl/async/BinanceApiAsyncFuturesRestClientImpl.java b/src/main/java/com/binance/api/client/impl/async/BinanceApiAsyncFuturesRestClientImpl.java
new file mode 100755
index 000000000..348dba3e7
--- /dev/null
+++ b/src/main/java/com/binance/api/client/impl/async/BinanceApiAsyncFuturesRestClientImpl.java
@@ -0,0 +1,78 @@
+package com.binance.api.client.impl.async;
+
+import com.binance.api.client.api.BinanceApiCallback;
+import com.binance.api.client.api.BinanceFuturesApiService;
+import com.binance.api.client.api.async.BinanceApiAsyncFuturesRestClient;
+import com.binance.api.client.constant.BinanceApiConstants;
+import com.binance.api.client.domain.account.*;
+import com.binance.api.client.domain.account.request.CancelOrderRequest;
+import com.binance.api.client.domain.account.request.CancelOrderResponse;
+import com.binance.api.client.domain.account.request.OrderRequest;
+import com.binance.api.client.domain.account.request.OrderStatusRequest;
+import com.binance.api.client.impl.BinanceApiCallbackAdapter;
+import com.binance.api.client.impl.BinanceApiServiceGenerator;
+
+import java.util.List;
+
+/**
+ * Implementation of Binance's Margin REST API using Retrofit with asynchronous/non-blocking method calls.
+ *
+ * @author Mahdi Sheikh Hosseini
+ */
+public class BinanceApiAsyncFuturesRestClientImpl implements BinanceApiAsyncFuturesRestClient {
+
+ private final BinanceFuturesApiService binanceFuturesApiService;
+
+ public BinanceApiAsyncFuturesRestClientImpl(String apiKey, String secret, String apiUrl) {
+ binanceFuturesApiService = BinanceApiServiceGenerator.createService(BinanceFuturesApiService.class, apiKey, secret, apiUrl);
+ }
+
+ // Margin Account endpoints
+
+ @Override
+ public void getAccount(Long recvWindow, Long timestamp, BinanceApiCallback