diff --git a/pom.xml b/pom.xml index 67e7af532..14618669d 100755 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,7 @@ org.apache.maven.plugins maven-compiler-plugin + 3.8.0 1.8 1.8 diff --git a/src/main/java/com/binance/api/client/BinanceApiRestClient.java b/src/main/java/com/binance/api/client/BinanceApiRestClient.java index ebe0b9667..f3be4921f 100755 --- a/src/main/java/com/binance/api/client/BinanceApiRestClient.java +++ b/src/main/java/com/binance/api/client/BinanceApiRestClient.java @@ -1,9 +1,34 @@ package com.binance.api.client; -import com.binance.api.client.domain.account.*; -import com.binance.api.client.domain.account.request.*; -import com.binance.api.client.domain.general.ExchangeInfo; +import java.util.List; + +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.DustConvertableResponse; +import com.binance.api.client.domain.account.DustTransferResponse; +import com.binance.api.client.domain.account.NewOCO; +import com.binance.api.client.domain.account.NewOCOResponse; +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.OrderList; +import com.binance.api.client.domain.account.SubAccountTransfer; +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.AllOrderListRequest; +import com.binance.api.client.domain.account.request.AllOrdersRequest; +import com.binance.api.client.domain.account.request.CancelOrderListRequest; +import com.binance.api.client.domain.account.request.CancelOrderListResponse; +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.OrderListStatusRequest; +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.Asset; +import com.binance.api.client.domain.general.ExchangeInfo; import com.binance.api.client.domain.market.AggTrade; import com.binance.api.client.domain.market.BookTicker; import com.binance.api.client.domain.market.Candlestick; @@ -12,8 +37,6 @@ import com.binance.api.client.domain.market.TickerPrice; import com.binance.api.client.domain.market.TickerStatistics; -import java.util.List; - /** * Binance API facade, supporting synchronous/blocking access Binance's REST API. */ @@ -173,6 +196,8 @@ public interface BinanceApiRestClient { */ CancelOrderResponse cancelOrder(CancelOrderRequest cancelOrderRequest); + List cancelAllOpenOrders(OrderRequest order); + /** * Get all open orders on a symbol. * @@ -239,7 +264,8 @@ public interface BinanceApiRestClient { * @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); + List getMyTrades(String symbol, Long orderId, Long startTime, Long endTime, Integer limit, Long fromId, + Long recvWindow, Long timestamp); /** * Get trades for a specific account and symbol. @@ -277,7 +303,16 @@ public interface BinanceApiRestClient { * Conver a list of assets to BNB * @param asset the list of assets to convert */ - DustTransferResponse dustTranfer(List asset); + DustTransferResponse dustTransfer(List asset); + + /** + * Get Assets That Can Be Converted Into BNB. + * + * @param recvWindow + * @param timestamp + * @return + */ + DustConvertableResponse dustConvertable(); /** * Fetch account deposit history. @@ -329,4 +364,5 @@ public interface BinanceApiRestClient { * @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/BinanceApiSwapRestClient.java index f7baf2c2e..9ec2c04c4 100755 --- a/src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java +++ b/src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java @@ -1,12 +1,15 @@ package com.binance.api.client; -import com.binance.api.client.domain.SwapRemoveType; -import com.binance.api.client.domain.account.*; -import retrofit2.Call; -import retrofit2.http.Query; - import java.util.List; +import com.binance.api.client.domain.SwapRemoveType; +import com.binance.api.client.domain.account.Liquidity; +import com.binance.api.client.domain.account.LiquidityOperationRecord; +import com.binance.api.client.domain.account.Pool; +import com.binance.api.client.domain.account.SwapHistory; +import com.binance.api.client.domain.account.SwapQuote; +import com.binance.api.client.domain.account.SwapRecord; + public interface BinanceApiSwapRestClient { /** diff --git a/src/main/java/com/binance/api/client/domain/account/DustConvertableDetailsResponse.java b/src/main/java/com/binance/api/client/domain/account/DustConvertableDetailsResponse.java new file mode 100644 index 000000000..ff673049a --- /dev/null +++ b/src/main/java/com/binance/api/client/domain/account/DustConvertableDetailsResponse.java @@ -0,0 +1,83 @@ +package com.binance.api.client.domain.account; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +import com.binance.api.client.constant.BinanceApiConstants; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class DustConvertableDetailsResponse { + + private String asset; + private String assetFullName; + private String amountFree; + private String toBTC; + private String toBNB; + private String toBNBOffExchange; + private String exchange; + + public String getAsset() { + return asset; + } + + public void setAsset(String asset) { + this.asset = asset; + } + + public String getAssetFullName() { + return assetFullName; + } + + public void setAssetFullName(String assetFullName) { + this.assetFullName = assetFullName; + } + + public String getAmountFree() { + return amountFree; + } + + public void setAmountFree(String amountFree) { + this.amountFree = amountFree; + } + + public String getToBTC() { + return toBTC; + } + + public void setToBTC(String toBTC) { + this.toBTC = toBTC; + } + + public String getToBNB() { + return toBNB; + } + + public void setToBNB(String toBNB) { + this.toBNB = toBNB; + } + + public String getToBNBOffExchange() { + return toBNBOffExchange; + } + + public void setToBNBOffExchange(String toBNBOffExchange) { + this.toBNBOffExchange = toBNBOffExchange; + } + + public String getExchange() { + return exchange; + } + + public void setExchange(String exchange) { + this.exchange = exchange; + } + + @Override + public String toString() { + return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE).append("asset", asset) + .append("assetFullName", assetFullName).append("amountFree", amountFree).append("toBTC", toBTC) + .append("toBNB", toBNB).append("toBNBOffExchange", toBNBOffExchange).append("exchange", exchange) + .toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/com/binance/api/client/domain/account/DustConvertableResponse.java b/src/main/java/com/binance/api/client/domain/account/DustConvertableResponse.java new file mode 100644 index 000000000..0ecfc813b --- /dev/null +++ b/src/main/java/com/binance/api/client/domain/account/DustConvertableResponse.java @@ -0,0 +1,57 @@ +package com.binance.api.client.domain.account; + +import java.util.List; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +import com.binance.api.client.constant.BinanceApiConstants; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class DustConvertableResponse { + + private List details; + private String totalTransferBtc; + private String totalTransferBNB; + private String dribbletPercentage; + + @Override + public String toString() { + return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE).append("details", details) + .append("totalTransferBtc", totalTransferBtc).append("totalTransferBNB", totalTransferBNB) + .append("dribbletPercentage", dribbletPercentage).toString(); + } + + public List getDetails() { + return details; + } + + public void setDetails(List details) { + this.details = details; + } + + public String getTotalTransferBtc() { + return totalTransferBtc; + } + + public void setTotalTransferBtc(String totalTransferBtc) { + this.totalTransferBtc = totalTransferBtc; + } + + public String getTotalTransferBNB() { + return totalTransferBNB; + } + + public void setTotalTransferBNB(String totalTransferBNB) { + this.totalTransferBNB = totalTransferBNB; + } + + public String getDribbletPercentage() { + return dribbletPercentage; + } + + public void setDribbletPercentage(String dribbletPercentage) { + this.dribbletPercentage = dribbletPercentage; + } + +} \ No newline at end of file diff --git a/src/main/java/com/binance/api/client/domain/account/MaxBorrowableQueryResult.java b/src/main/java/com/binance/api/client/domain/account/MaxBorrowableQueryResult.java index 8a50fdea4..a4546f6c5 100755 --- a/src/main/java/com/binance/api/client/domain/account/MaxBorrowableQueryResult.java +++ b/src/main/java/com/binance/api/client/domain/account/MaxBorrowableQueryResult.java @@ -2,8 +2,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import java.util.List; - /** * Max Borrow Query Result * 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 index 6c592219a..28e4aa815 100755 --- a/src/main/java/com/binance/api/client/domain/account/NewOrder.java +++ b/src/main/java/com/binance/api/client/domain/account/NewOrder.java @@ -1,11 +1,12 @@ package com.binance.api.client.domain.account; +import org.apache.commons.lang3.builder.ToStringBuilder; + import com.binance.api.client.constant.BinanceApiConstants; import com.binance.api.client.domain.OrderSide; import com.binance.api.client.domain.OrderType; import com.binance.api.client.domain.TimeInForce; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.apache.commons.lang3.builder.ToStringBuilder; /** * A trade order to enter or exit a position. @@ -267,6 +268,37 @@ public static NewOrder limitSell(String symbol, TimeInForce timeInForce, String return new NewOrder(symbol, OrderSide.SELL, OrderType.LIMIT, timeInForce, quantity, price); } + /** + * Places a STOP buy order for the given quantity and + * price. + * + * @return a new order which is pre-configured with STOP as the order type and + * BUY as the order side. + */ + public static NewOrder stopBuy(String symbol, String quantity, String stopPrice, String stopLimitPrice, + TimeInForce timeInForce) { + NewOrder newOrder = new NewOrder(symbol, OrderSide.BUY, OrderType.STOP_LOSS_LIMIT, timeInForce, quantity, null); + newOrder.stopPrice = stopPrice; + newOrder.price = stopLimitPrice; + return newOrder; + } + + /** + * Places a STOP sell order for the given quantity and + * price. + * + * @return a new order which is pre-configured with STOP as the order type and + * SELL as the order side. + */ + public static NewOrder stopSell(String symbol, String quantity, String stopPrice, String stopLimitPrice, + TimeInForce timeInForce) { + NewOrder newOrder = new NewOrder(symbol, OrderSide.SELL, OrderType.STOP_LOSS_LIMIT, timeInForce, quantity, + null); + newOrder.stopPrice = stopPrice; + newOrder.price = stopLimitPrice; + return newOrder; + } + @Override public String toString() { return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE) 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 index 881efd6dc..fd7457c65 100755 --- a/src/main/java/com/binance/api/client/domain/account/Order.java +++ b/src/main/java/com/binance/api/client/domain/account/Order.java @@ -25,6 +25,11 @@ public class Order { */ private Long orderId; + /** + * Order id. + */ + private Long orderListId; + /** * Client order id. */ @@ -70,11 +75,6 @@ public class Order { */ private String stopPrice; - /** - * Used with stop orders. - */ - private String stopLimitPrice; - /** * Used with iceberg orders. */ @@ -194,14 +194,6 @@ public void setStopPrice(String stopPrice) { this.stopPrice = stopPrice; } - public String getStopLimitPrice() { - return stopLimitPrice; - } - - public void setStopLimitPrice(String stopLimitPrice) { - this.stopLimitPrice = stopLimitPrice; - } - public String getIcebergQty() { return icebergQty; } @@ -255,6 +247,7 @@ public String toString() { return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE) .append("symbol", symbol) .append("orderId", orderId) + .append("orderListId", orderId) .append("clientOrderId", clientOrderId) .append("price", price) .append("origQty", origQty) @@ -264,7 +257,6 @@ public String toString() { .append("type", type) .append("side", side) .append("stopPrice", stopPrice) - .append("stopLimitPrice", stopLimitPrice) .append("icebergQty", icebergQty) .append("time", time) .append("cummulativeQuoteQty", cummulativeQuoteQty) @@ -273,4 +265,12 @@ public String toString() { .append("origQuoteOrderQty", origQuoteOrderQty) .toString(); } + +public Long getOrderListId() { + return orderListId; +} + +public void setOrderListId(Long orderListId) { + this.orderListId = orderListId; +} } diff --git a/src/main/java/com/binance/api/client/domain/account/request/AllOrdersRequest.java b/src/main/java/com/binance/api/client/domain/account/request/AllOrdersRequest.java index d58fca1da..315ad59a3 100755 --- a/src/main/java/com/binance/api/client/domain/account/request/AllOrdersRequest.java +++ b/src/main/java/com/binance/api/client/domain/account/request/AllOrdersRequest.java @@ -1,47 +1,69 @@ package com.binance.api.client.domain.account.request; -import com.binance.api.client.constant.BinanceApiConstants; import org.apache.commons.lang3.builder.ToStringBuilder; +import com.binance.api.client.constant.BinanceApiConstants; + /** * A specialized order request with additional filters. */ public class AllOrdersRequest extends OrderRequest { - private static final Integer DEFAULT_LIMIT = 500; + private static final Integer DEFAULT_LIMIT = 500; + + private Long orderId; + + private Long startTime; + + private Long endTime; + + private Integer limit; + + public AllOrdersRequest(String symbol) { + super(symbol); + this.limit = DEFAULT_LIMIT; + } + + public Long getOrderId() { + return orderId; + } + + public AllOrdersRequest orderId(Long orderId) { + this.orderId = orderId; + return this; + } - private Long orderId; + public Integer getLimit() { + return limit; + } - private Integer limit; + public AllOrdersRequest limit(Integer limit) { + this.limit = limit; + return this; + } - public AllOrdersRequest(String symbol) { - super(symbol); - this.limit = DEFAULT_LIMIT; - } + public Long getStartTime() { + return startTime; + } - public Long getOrderId() { - return orderId; - } + public AllOrdersRequest startTime(Long startTime) { + this.startTime = startTime; + return this; + } - public AllOrdersRequest orderId(Long orderId) { - this.orderId = orderId; - return this; - } + public Long getEndTime() { + return endTime; + } - public Integer getLimit() { - return limit; - } + public AllOrdersRequest endTime(Long endTime) { + this.endTime = endTime; + return this; + } - public AllOrdersRequest limit(Integer limit) { - this.limit = limit; - return this; - } + @Override + public String toString() { + return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE).append("orderId", orderId) + .append("limit", limit).append("startTime", startTime).append("endTime", endTime).toString(); + } - @Override - public String toString() { - return new ToStringBuilder(this, BinanceApiConstants.TO_STRING_BUILDER_STYLE) - .append("orderId", orderId) - .append("limit", limit) - .toString(); - } } diff --git a/src/main/java/com/binance/api/client/domain/general/FilterType.java b/src/main/java/com/binance/api/client/domain/general/FilterType.java index 57c2931db..f6cd5852e 100755 --- a/src/main/java/com/binance/api/client/domain/general/FilterType.java +++ b/src/main/java/com/binance/api/client/domain/general/FilterType.java @@ -10,6 +10,7 @@ public enum FilterType { // Symbol PRICE_FILTER, LOT_SIZE, + NOTIONAL, MIN_NOTIONAL, MAX_NUM_ORDERS, MAX_ALGO_ORDERS, @@ -22,5 +23,8 @@ public enum FilterType { // Exchange EXCHANGE_MAX_NUM_ORDERS, - EXCHANGE_MAX_ALGO_ORDERS + EXCHANGE_MAX_ALGO_ORDERS, + + TRAILING_DELTA, + PERCENT_PRICE_BY_SIDE } \ 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..dec21a1c2 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 @@ -6,6 +6,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import java.util.List; +import java.util.Optional; /** * Symbol information (base/quote). @@ -148,10 +149,12 @@ public void setFilters(List filters) { * @return symbol filter information for the provided filter type. */ public SymbolFilter getSymbolFilter(FilterType filterType) { - return filters.stream() - .filter(symbolFilter -> symbolFilter.getFilterType() == filterType) - .findFirst() - .get(); + Optional first = filters.stream().filter(symbolFilter -> symbolFilter.getFilterType() == filterType).findFirst(); + if (first.isPresent()) { + return first.get(); + } else { + return null; + } } @Override diff --git a/src/main/java/com/binance/api/client/domain/market/OrderBookEntryDeserializer.java b/src/main/java/com/binance/api/client/domain/market/OrderBookEntryDeserializer.java index 4a65e253b..1ac6dee8f 100755 --- a/src/main/java/com/binance/api/client/domain/market/OrderBookEntryDeserializer.java +++ b/src/main/java/com/binance/api/client/domain/market/OrderBookEntryDeserializer.java @@ -1,14 +1,13 @@ package com.binance.api.client.domain.market; -import com.binance.api.client.domain.market.OrderBookEntry; +import java.io.IOException; + import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonNode; -import java.io.IOException; - /** * Custom deserializer for an OrderBookEntry, since the API returns an array in the format [ price, qty, [] ]. */ diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiAsyncMarginRestClientImpl.java b/src/main/java/com/binance/api/client/impl/BinanceApiAsyncMarginRestClientImpl.java index d3e5c22f6..1483ca03f 100755 --- a/src/main/java/com/binance/api/client/impl/BinanceApiAsyncMarginRestClientImpl.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiAsyncMarginRestClientImpl.java @@ -1,20 +1,25 @@ package com.binance.api.client.impl; +import static com.binance.api.client.impl.BinanceApiServiceGenerator.createService; + +import java.util.List; + import com.binance.api.client.BinanceApiAsyncMarginRestClient; import com.binance.api.client.BinanceApiCallback; import com.binance.api.client.constant.BinanceApiConstants; import com.binance.api.client.domain.TransferType; -import com.binance.api.client.domain.account.*; +import com.binance.api.client.domain.account.MarginAccount; +import com.binance.api.client.domain.account.MarginNewOrder; +import com.binance.api.client.domain.account.MarginNewOrderResponse; +import com.binance.api.client.domain.account.MarginTransaction; +import com.binance.api.client.domain.account.Order; +import com.binance.api.client.domain.account.Trade; 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 java.util.List; - -import static com.binance.api.client.impl.BinanceApiServiceGenerator.createService; - /** * Implementation of Binance's Margin REST API using Retrofit with asynchronous/non-blocking method calls. */ @@ -68,7 +73,9 @@ public void getOrderStatus(OrderStatusRequest orderStatusRequest, BinanceApiCall @Override public void getMyTrades(String symbol, BinanceApiCallback> callback) { - binanceApiService.getMyTrades(symbol, null, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis()).enqueue(new BinanceApiCallbackAdapter<>(callback)); + binanceApiService + .getMyTrades(symbol, null, null, null, null, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, + System.currentTimeMillis()).enqueue(new BinanceApiCallbackAdapter<>(callback)); } // user stream endpoints diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiAsyncRestClientImpl.java b/src/main/java/com/binance/api/client/impl/BinanceApiAsyncRestClientImpl.java index e6ea387b9..2c1d8ba91 100755 --- a/src/main/java/com/binance/api/client/impl/BinanceApiAsyncRestClientImpl.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiAsyncRestClientImpl.java @@ -1,5 +1,9 @@ package com.binance.api.client.impl; +import static com.binance.api.client.impl.BinanceApiServiceGenerator.createService; + +import java.util.List; + import com.binance.api.client.BinanceApiAsyncRestClient; import com.binance.api.client.BinanceApiCallback; import com.binance.api.client.config.BinanceApiConfig; @@ -31,10 +35,6 @@ 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. */ @@ -178,7 +178,7 @@ public void getOpenOrders(OrderRequest orderRequest, BinanceApiCallback> callback) { binanceApiService.getAllOrders(orderRequest.getSymbol(), - orderRequest.getOrderId(), orderRequest.getLimit(), + orderRequest.getOrderId(), orderRequest.getStartTime(), orderRequest.getEndTime(), orderRequest.getLimit(), orderRequest.getRecvWindow(), orderRequest.getTimestamp()).enqueue(new BinanceApiCallbackAdapter<>(callback)); } @@ -195,7 +195,8 @@ public void getAccount(BinanceApiCallback 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)); + binanceApiService.getMyTrades(symbol, null, null, null, limit, fromId, recvWindow, timestamp) + .enqueue(new BinanceApiCallbackAdapter<>(callback)); } @Override diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiMarginRestClientImpl.java b/src/main/java/com/binance/api/client/impl/BinanceApiMarginRestClientImpl.java index 959fa2a5f..d46c04782 100755 --- a/src/main/java/com/binance/api/client/impl/BinanceApiMarginRestClientImpl.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiMarginRestClientImpl.java @@ -1,19 +1,27 @@ package com.binance.api.client.impl; +import static com.binance.api.client.impl.BinanceApiServiceGenerator.createService; +import static com.binance.api.client.impl.BinanceApiServiceGenerator.executeSync; + +import java.util.List; + import com.binance.api.client.BinanceApiMarginRestClient; import com.binance.api.client.constant.BinanceApiConstants; import com.binance.api.client.domain.TransferType; -import com.binance.api.client.domain.account.*; +import com.binance.api.client.domain.account.LoanQueryResult; +import com.binance.api.client.domain.account.MarginAccount; +import com.binance.api.client.domain.account.MarginNewOrder; +import com.binance.api.client.domain.account.MarginNewOrderResponse; +import com.binance.api.client.domain.account.MarginTransaction; +import com.binance.api.client.domain.account.MaxBorrowableQueryResult; +import com.binance.api.client.domain.account.Order; +import com.binance.api.client.domain.account.RepayQueryResult; +import com.binance.api.client.domain.account.Trade; 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 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 Margin REST API using Retrofit with asynchronous/non-blocking method calls. */ @@ -60,7 +68,8 @@ public Order getOrderStatus(OrderStatusRequest orderStatusRequest) { @Override public List getMyTrades(String symbol) { - return executeSync(binanceApiService.getMyTrades(symbol, null, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis())); + return executeSync(binanceApiService.getMyTrades(symbol, null, null, null, null, null, + BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis())); } // user stream endpoints diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiRestClientImpl.java b/src/main/java/com/binance/api/client/impl/BinanceApiRestClientImpl.java index c80c7a06d..d3a7e378e 100755 --- a/src/main/java/com/binance/api/client/impl/BinanceApiRestClientImpl.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiRestClientImpl.java @@ -1,19 +1,49 @@ package com.binance.api.client.impl; +import static com.binance.api.client.impl.BinanceApiServiceGenerator.createService; +import static com.binance.api.client.impl.BinanceApiServiceGenerator.executeSync; + +import java.util.List; + 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.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.DustConvertableResponse; +import com.binance.api.client.domain.account.DustTransferResponse; +import com.binance.api.client.domain.account.NewOCO; +import com.binance.api.client.domain.account.NewOCOResponse; +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.OrderList; +import com.binance.api.client.domain.account.SubAccountTransfer; +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.AllOrderListRequest; +import com.binance.api.client.domain.account.request.AllOrdersRequest; +import com.binance.api.client.domain.account.request.CancelOrderListRequest; +import com.binance.api.client.domain.account.request.CancelOrderListResponse; +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.OrderListStatusRequest; +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.Asset; import com.binance.api.client.domain.general.ExchangeInfo; -import com.binance.api.client.domain.market.*; -import retrofit2.Call; - -import java.util.List; +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 static com.binance.api.client.impl.BinanceApiServiceGenerator.createService; -import static com.binance.api.client.impl.BinanceApiServiceGenerator.executeSync; +import retrofit2.Call; /** * Implementation of Binance's REST API using Retrofit with synchronous/blocking @@ -156,6 +186,12 @@ public CancelOrderResponse cancelOrder(CancelOrderRequest cancelOrderRequest) { cancelOrderRequest.getRecvWindow(), cancelOrderRequest.getTimestamp())); } + @Override + public List cancelAllOpenOrders(OrderRequest order) { + return executeSync( + binanceApiService.cancelAllOpenOrders(order.getSymbol(), order.getRecvWindow(), order.getTimestamp())); + } + @Override public List getOpenOrders(OrderRequest orderRequest) { return executeSync(binanceApiService.getOpenOrders(orderRequest.getSymbol(), orderRequest.getRecvWindow(), @@ -165,6 +201,7 @@ public List getOpenOrders(OrderRequest orderRequest) { @Override public List getAllOrders(AllOrdersRequest orderRequest) { return executeSync(binanceApiService.getAllOrders(orderRequest.getSymbol(), orderRequest.getOrderId(), + orderRequest.getStartTime(), orderRequest.getEndTime(), orderRequest.getLimit(), orderRequest.getRecvWindow(), orderRequest.getTimestamp())); } @@ -206,25 +243,27 @@ public Account getAccount() { } @Override - public List getMyTrades(String symbol, Integer limit, Long fromId, Long recvWindow, Long timestamp) { - return executeSync(binanceApiService.getMyTrades(symbol, limit, fromId, recvWindow, timestamp)); + public List getMyTrades(String symbol, Long orderId, Long startTime, Long endTime, Integer limit, Long fromId, Long recvWindow, + Long timestamp) { + return executeSync(binanceApiService.getMyTrades(symbol, orderId, startTime, endTime, limit, fromId, recvWindow, + timestamp)); } @Override public List getMyTrades(String symbol, Integer limit) { - return getMyTrades(symbol, limit, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, + return getMyTrades(symbol, null, null, null, limit, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis()); } @Override public List getMyTrades(String symbol) { - return getMyTrades(symbol, null, null, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, + return getMyTrades(symbol, null, null, null, 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, + return getMyTrades(symbol, null, null, null, null, fromId, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis()); } @@ -235,10 +274,15 @@ public WithdrawResult withdraw(String asset, String address, String amount, Stri } @Override - public DustTransferResponse dustTranfer(List asset) { + public DustTransferResponse dustTransfer(List asset) { return executeSync(binanceApiService.dustTransfer(asset, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis())); } + @Override + public DustConvertableResponse dustConvertable() { + return executeSync(binanceApiService.dustConvertable(BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, System.currentTimeMillis())); + } + @Override public DepositHistory getDepositHistory(String asset) { return executeSync(binanceApiService.getDepositHistory(asset, BinanceApiConstants.DEFAULT_RECEIVING_WINDOW, @@ -278,4 +322,5 @@ public void keepAliveUserDataStream(String listenKey) { public void closeUserDataStream(String listenKey) { executeSync(binanceApiService.closeAliveUserDataStream(listenKey)); } + } diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiService.java b/src/main/java/com/binance/api/client/impl/BinanceApiService.java index 5825f9844..c96f0a7cf 100755 --- a/src/main/java/com/binance/api/client/impl/BinanceApiService.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiService.java @@ -1,22 +1,61 @@ package com.binance.api.client.impl; +import java.util.List; + import com.binance.api.client.constant.BinanceApiConstants; import com.binance.api.client.domain.OrderSide; import com.binance.api.client.domain.OrderType; import com.binance.api.client.domain.SwapRemoveType; import com.binance.api.client.domain.TimeInForce; -import com.binance.api.client.domain.account.*; +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.DustConvertableResponse; +import com.binance.api.client.domain.account.DustTransferResponse; +import com.binance.api.client.domain.account.Liquidity; +import com.binance.api.client.domain.account.LiquidityOperationRecord; +import com.binance.api.client.domain.account.LoanQueryResult; +import com.binance.api.client.domain.account.MarginAccount; +import com.binance.api.client.domain.account.MarginNewOrderResponse; +import com.binance.api.client.domain.account.MarginTransaction; +import com.binance.api.client.domain.account.MaxBorrowableQueryResult; +import com.binance.api.client.domain.account.NewOCOResponse; +import com.binance.api.client.domain.account.NewOrderResponse; +import com.binance.api.client.domain.account.NewOrderResponseType; +import com.binance.api.client.domain.account.Order; +import com.binance.api.client.domain.account.OrderList; +import com.binance.api.client.domain.account.Pool; +import com.binance.api.client.domain.account.RepayQueryResult; +import com.binance.api.client.domain.account.SideEffectType; +import com.binance.api.client.domain.account.SubAccountTransfer; +import com.binance.api.client.domain.account.SwapHistory; +import com.binance.api.client.domain.account.SwapQuote; +import com.binance.api.client.domain.account.SwapRecord; +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.CancelOrderListResponse; import com.binance.api.client.domain.account.request.CancelOrderResponse; 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.*; -import retrofit2.Call; -import retrofit2.http.*; +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.OrderBook; +import com.binance.api.client.domain.market.TickerPrice; +import com.binance.api.client.domain.market.TickerStatistics; -import java.util.List; +import retrofit2.Call; +import retrofit2.http.DELETE; +import retrofit2.http.GET; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.PUT; +import retrofit2.http.Query; +import retrofit2.http.Url; /** * Binance's REST API URL mappings and endpoint security configuration. @@ -110,6 +149,12 @@ Call cancelOrder(@Query("symbol") String symbol, @Query("or @Query("origClientOrderId") String origClientOrderId, @Query("newClientOrderId") String newClientOrderId, @Query("recvWindow") Long recvWindow, @Query("timestamp") Long timestamp); + @Headers(BinanceApiConstants.ENDPOINT_SECURITY_TYPE_SIGNED_HEADER) + @DELETE("/api/v3/openOrders") + Call> cancelAllOpenOrders(@Query("symbol") String symbol, + @Query("recvWindow") Long recvWindow, + @Query("timestamp") Long timestamp); + @Headers(BinanceApiConstants.ENDPOINT_SECURITY_TYPE_SIGNED_HEADER) @GET("/api/v3/openOrders") Call> getOpenOrders(@Query("symbol") String symbol, @Query("recvWindow") Long recvWindow, @Query("timestamp") Long timestamp); @@ -117,7 +162,8 @@ Call cancelOrder(@Query("symbol") String symbol, @Query("or @Headers(BinanceApiConstants.ENDPOINT_SECURITY_TYPE_SIGNED_HEADER) @GET("/api/v3/allOrders") Call> getAllOrders(@Query("symbol") String symbol, @Query("orderId") Long orderId, - @Query("limit") Integer limit, @Query("recvWindow") Long recvWindow, @Query("timestamp") Long timestamp); + @Query("startTime") Long startTime, @Query("endTime") Long endTime, @Query("limit") Integer limit, + @Query("recvWindow") Long recvWindow, @Query("timestamp") Long timestamp); @Headers(BinanceApiConstants.ENDPOINT_SECURITY_TYPE_SIGNED_HEADER) @POST("/api/v3/order/oco") @@ -148,7 +194,9 @@ Call> getAllOrderList(@Query("fromId") Long fromId, @Query("star @Headers(BinanceApiConstants.ENDPOINT_SECURITY_TYPE_SIGNED_HEADER) @GET("/api/v3/myTrades") - Call> getMyTrades(@Query("symbol") String symbol, @Query("limit") Integer limit, @Query("fromId") Long fromId, + Call> getMyTrades(@Query("symbol") String symbol, @Query("orderId") Long orderId, + @Query("startTime") Long startTime, @Query("endTime") Long endTime, + @Query("limit") Integer limit, @Query("fromId") Long fromId, @Query("recvWindow") Long recvWindow, @Query("timestamp") Long timestamp); @Headers(BinanceApiConstants.ENDPOINT_SECURITY_TYPE_SIGNED_HEADER) @@ -173,6 +221,10 @@ Call withdraw(@Query("asset") String asset, @Query("address") St @POST("/sapi/v1/asset/dust") Call dustTransfer(@Query("asset") List asset, @Query("recvWindow") Long recvWindow, @Query("timestamp") Long timestamp); + @Headers(BinanceApiConstants.ENDPOINT_SECURITY_TYPE_SIGNED_HEADER) + @POST("/sapi/v1/asset/dust-btc") + Call dustConvertable(@Query("recvWindow") Long recvWindow, @Query("timestamp") Long timestamp); + @Headers(BinanceApiConstants.ENDPOINT_SECURITY_TYPE_SIGNED_HEADER) @GET("/sapi/v1/sub-account/transfer/subUserHistory") Call> getSubAccountTransfers(@Query("timestamp") Long timestamp); @@ -331,4 +383,5 @@ Call> getSwapHistory( @Query("timestamp") Long timestamp); + }