From f555f2a5f4cb9f9fddd2cf72673d7d60dfc6d8f7 Mon Sep 17 00:00:00 2001 From: Phong Phuong <66398960+phong-phuong@users.noreply.github.com> Date: Fri, 26 May 2023 10:37:46 +1000 Subject: [PATCH] Add support for new FilterTypes in ExchangeInfo --- README.md | 2 +- pom.xml | 2 +- .../api/client/BinanceApiSwapRestClient.java | 2 - .../api/client/domain/general/FilterType.java | 6 +- .../client/domain/general/SymbolFilter.java | 123 ++++++++++++++++++ .../market/OrderBookEntryDeserializer.java | 1 - .../general/ExchangeInfoDeserializerTest.java | 46 ++++++- 7 files changed, 175 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e90c3ed4c..ee9bf1795 100755 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ binance-java-api is a lightweight Java library for interacting with the [Binance com.binance.api binance-api-client - 1.0.0 + 1.0.2 ``` diff --git a/pom.xml b/pom.xml index 67e7af532..a57d63dbf 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.binance.api binance-api-client - 1.0.1 + 1.0.2 The MIT License diff --git a/src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java b/src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java index f7baf2c2e..eb6f053b6 100755 --- a/src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java +++ b/src/main/java/com/binance/api/client/BinanceApiSwapRestClient.java @@ -2,8 +2,6 @@ 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; 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..1877ff1e7 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 @@ -19,8 +19,12 @@ public enum FilterType { MARKET_LOT_SIZE, MAX_NUM_ICEBERG_ORDERS, MAX_POSITION, + NOTIONAL, + TRAILING_DELTA, + PERCENT_PRICE_BY_SIDE, // Exchange EXCHANGE_MAX_NUM_ORDERS, - EXCHANGE_MAX_ALGO_ORDERS + EXCHANGE_MAX_ALGO_ORDERS, + } \ No newline at end of file diff --git a/src/main/java/com/binance/api/client/domain/general/SymbolFilter.java b/src/main/java/com/binance/api/client/domain/general/SymbolFilter.java index e6a8b98c8..6ed2a8610 100755 --- a/src/main/java/com/binance/api/client/domain/general/SymbolFilter.java +++ b/src/main/java/com/binance/api/client/domain/general/SymbolFilter.java @@ -8,6 +8,8 @@ * The PRICE_FILTER defines the price rules for a symbol. * * The LOT_SIZE filter defines the quantity (aka "lots" in auction terms) rules for a symbol. + * + * The NOTIONAL filter defines the acceptable notional range allowed for an order on a symbol. * * The MIN_NOTIONAL filter defines the minimum notional value allowed for an order on a symbol. An order's notional value is the price * quantity. * @@ -77,6 +79,30 @@ public class SymbolFilter { */ private String limit; + private String minTrailingAboveDelta; + + private String maxTrailingAboveDelta; + + private String minTrailingBelowDelta; + + private String maxTrailingBelowDelta; + + private String bidMultiplierUp; + + private String bidMultiplierDown; + + private String askMultiplierUp; + + private String askMultiplierDown; + + private String avgPriceMins; + + private String applyMinToMarket; + + private String applyMaxToMarket; + + private String maxNotional; + public FilterType getFilterType() { return filterType; } @@ -157,4 +183,101 @@ public String getLimit() { public void setLimit(String limit) { this.limit = limit; } + + public String getMinTrailingAboveDelta() { + return this.minTrailingAboveDelta; + } + + public void setMinTrailingAboveDelta(String trailingDelta) { + this.minTrailingAboveDelta = trailingDelta; + } + + public String getMaxTrailingAboveDelta() { + return this.maxTrailingAboveDelta; + } + + public void setMaxTrailingAboveDelta(String trailingDelta) { + this.maxTrailingAboveDelta = trailingDelta; + } + + public String getMinTrailingBelowDelta() { + return this.minTrailingBelowDelta; + } + + public void setMinTrailingBelowDelta(String trailingDelta) { + this.minTrailingBelowDelta = trailingDelta; + } + + public String getMaxTrailingBelowDelta() { + return this.maxTrailingBelowDelta; + } + + public void setMaxTrailingBelowDelta(String trailingDelta) { + this.maxTrailingBelowDelta = trailingDelta; + } + + public String getBidMultiplierUp() { + return bidMultiplierUp; + } + + public void setBidMultiplierUp(String bidMultiplierUp) { + this.bidMultiplierUp = bidMultiplierUp; + } + + public String getBidMultiplierDown() { + return bidMultiplierDown; + } + + public void setBidMultiplierDown(String bidMultiplierDown) { + this.bidMultiplierDown = bidMultiplierDown; + } + + public String getAskMultiplierUp() { + return askMultiplierUp; + } + + public void setAskMultiplierUp(String askMultiplierUp) { + this.askMultiplierUp = askMultiplierUp; + } + + public String getAskMultiplierDown() { + return askMultiplierDown; + } + + public void setAskMultiplierDown(String askMultiplierDown) { + this.askMultiplierDown = askMultiplierDown; + } + + public String getAvgPriceMins() { + return avgPriceMins; + } + + public void setAvgPriceMins(String avgPriceMins) { + this.avgPriceMins = avgPriceMins; + } + + public String getApplyMinToMarket() { + return applyMinToMarket; + } + + public void setApplyMinToMarket(String applyMinToMarket) { + this.applyMinToMarket = applyMinToMarket; + } + + public String getApplyMaxToMarket() { + return applyMaxToMarket; + } + + public void setApplyMaxToMarket(String applyMaxToMarket) { + this.applyMaxToMarket = applyMaxToMarket; + } + + public String getMaxNotional() { + return maxNotional; + } + + public void setMaxNotional(String maxNotional) { + this.maxNotional = maxNotional; + } + } 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..a0e9ddf04 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,6 +1,5 @@ package com.binance.api.client.domain.market; -import com.binance.api.client.domain.market.OrderBookEntry; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.databind.DeserializationContext; diff --git a/src/test/java/com/binance/api/domain/general/ExchangeInfoDeserializerTest.java b/src/test/java/com/binance/api/domain/general/ExchangeInfoDeserializerTest.java index 94467915b..6539d5fba 100755 --- a/src/test/java/com/binance/api/domain/general/ExchangeInfoDeserializerTest.java +++ b/src/test/java/com/binance/api/domain/general/ExchangeInfoDeserializerTest.java @@ -69,6 +69,26 @@ public void testExchangeInfoDeserialization() { " }, {\n" + " \"filterType\": \"MIN_NOTIONAL\",\n" + " \"minNotional\": \"0.00100000\"\n" + + " }, {\n" + + " \"filterType\": \"TRAILING_DELTA\",\n" + + " \"minTrailingAboveDelta\": 10,\n" + + " \"maxTrailingAboveDelta\": 2000,\n" + + " \"minTrailingBelowDelta\": 10,\n" + + " \"maxTrailingBelowDelta\": 2000\n" + + " }, {\n" + + " \"filterType\": \"PERCENT_PRICE_BY_SIDE\",\n" + + " \"bidMultiplierUp\": \"5\",\n" + + " \"bidMultiplierDown\": \"0.2\",\n" + + " \"askMultiplierUp\": \"5\",\n" + + " \"askMultiplierDown\": \"0.2\",\n" + + " \"avgPriceMins\": \"5\"\n" + + " }, {\n" + + " \"filterType\": \"NOTIONAL\",\n" + + " \"minNotional\": \"0.00010000\",\n" + + " \"applyMinToMarket\": true,\n" + + " \"maxNotional\": \"9000000.00000000\",\n" + + " \"applyMaxToMarket\": false,\n" + + " \"avgPriceMins\": \"5\"\n" + " }]\n" + " }]" + "}"; @@ -98,7 +118,7 @@ public void testExchangeInfoDeserialization() { assertFalse(symbolInfo.isIcebergAllowed()); List symbolFilters = symbolInfo.getFilters(); - assertEquals(symbolFilters.size(), 3); + assertEquals(symbolFilters.size(), 6); SymbolFilter priceFilter = symbolFilters.get(0); assertEquals(priceFilter.getFilterType(), FilterType.PRICE_FILTER); @@ -115,6 +135,30 @@ public void testExchangeInfoDeserialization() { SymbolFilter minNotionalFilter = symbolFilters.get(2); assertEquals(minNotionalFilter.getFilterType(), FilterType.MIN_NOTIONAL); assertEquals(minNotionalFilter.getMinNotional(), "0.00100000"); + + SymbolFilter trailingDeltaFilter = symbolFilters.get(3); + assertEquals(trailingDeltaFilter.getFilterType(), FilterType.TRAILING_DELTA); + assertEquals(trailingDeltaFilter.getMinTrailingAboveDelta(), "10"); + assertEquals(trailingDeltaFilter.getMaxTrailingAboveDelta(), "2000"); + assertEquals(trailingDeltaFilter.getMinTrailingBelowDelta(), "10"); + assertEquals(trailingDeltaFilter.getMaxTrailingBelowDelta(), "2000"); + + SymbolFilter percentPriceBySideFilter = symbolFilters.get(4); + assertEquals(percentPriceBySideFilter.getFilterType(), FilterType.PERCENT_PRICE_BY_SIDE); + assertEquals(percentPriceBySideFilter.getBidMultiplierUp(), "5"); + assertEquals(percentPriceBySideFilter.getBidMultiplierDown(), "0.2"); + assertEquals(percentPriceBySideFilter.getAskMultiplierUp(), "5"); + assertEquals(percentPriceBySideFilter.getAskMultiplierDown(), "0.2"); + assertEquals(percentPriceBySideFilter.getAvgPriceMins(), "5"); + + SymbolFilter notionalFilter = symbolFilters.get(5); + assertEquals(notionalFilter.getFilterType(), FilterType.NOTIONAL); + assertEquals(notionalFilter.getMinNotional(), "0.00010000"); + assertEquals(notionalFilter.getApplyMinToMarket(), "true"); + assertEquals(notionalFilter.getMaxNotional(), "9000000.00000000"); + assertEquals(notionalFilter.getApplyMaxToMarket(), "false"); + assertEquals(notionalFilter.getAvgPriceMins(), "5"); + } catch (IOException e) { fail(); }