Skip to content
This repository has been archived by the owner on Oct 30, 2023. It is now read-only.

Add support for new FilterTypes in ExchangeInfo #442

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ binance-java-api is a lightweight Java library for interacting with the [Binance
<dependency>
<groupId>com.binance.api</groupId>
<artifactId>binance-api-client</artifactId>
<version>1.0.0</version>
<version>1.0.2</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.binance.api</groupId>
<artifactId>binance-api-client</artifactId>
<version>1.0.1</version>
<version>1.0.2</version>
<licenses>
<license>
<name>The MIT License</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,

}
123 changes: 123 additions & 0 deletions src/main/java/com/binance/api/client/domain/general/SymbolFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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" +
" }]" +
"}";
Expand Down Expand Up @@ -98,7 +118,7 @@ public void testExchangeInfoDeserialization() {
assertFalse(symbolInfo.isIcebergAllowed());

List<SymbolFilter> symbolFilters = symbolInfo.getFilters();
assertEquals(symbolFilters.size(), 3);
assertEquals(symbolFilters.size(), 6);

SymbolFilter priceFilter = symbolFilters.get(0);
assertEquals(priceFilter.getFilterType(), FilterType.PRICE_FILTER);
Expand All @@ -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();
}
Expand Down