While implementing the Binance API, we might get the following error.
{
"code":-1013,
"msg":"Filter failure: PRICE_FILTER"
}
This might be due to the mismatch of the given Filter for the price by Binance. As from the Binance Spot Api documentation, the condition that needs to be satisfied is
price >= minPrice
price <= maxPrice
price % tickSize == 0
We can get the Filter value for PRICE_FILTER as below.
For BTC USDT:
https://api.binance.us/api/v3/exchangeInfo?symbol=BTCUSDT
OR
https://api.binance.com/api/v3/exchangeInfo?symbol=BTCUSDT
The output of the above endpoint is:
{
"timezone":"UTC",
"serverTime":1657086978303,
"rateLimits":[
{
"rateLimitType":"REQUEST_WEIGHT",
"interval":"MINUTE",
"intervalNum":1,
"limit":1200
},
{
"rateLimitType":"ORDERS",
"interval":"SECOND",
"intervalNum":10,
"limit":100
},
{
"rateLimitType":"ORDERS",
"interval":"DAY",
"intervalNum":1,
"limit":200000
},
{
"rateLimitType":"RAW_REQUESTS",
"interval":"MINUTE",
"intervalNum":5,
"limit":6100
}
],
"exchangeFilters":[
],
"symbols":[
{
"symbol":"BTCUSDT",
"status":"TRADING",
"baseAsset":"BTC",
"baseAssetPrecision":8,
"quoteAsset":"USDT",
"quotePrecision":8,
"quoteAssetPrecision":8,
"baseCommissionPrecision":8,
"quoteCommissionPrecision":8,
"orderTypes":[
"LIMIT",
"LIMIT_MAKER",
"MARKET",
"STOP_LOSS_LIMIT",
"TAKE_PROFIT_LIMIT"
],
"icebergAllowed":true,
"ocoAllowed":true,
"quoteOrderQtyMarketAllowed":true,
"allowTrailingStop":false,
"cancelReplaceAllowed":false,
"isSpotTradingAllowed":true,
"isMarginTradingAllowed":false,
"filters":[
{
"filterType":"PRICE_FILTER",
"minPrice":"0.01000000",
"maxPrice":"100000.00000000",
"tickSize":"0.01000000"
},
{
"filterType":"PERCENT_PRICE",
"multiplierUp":"5",
"multiplierDown":"0.2",
"avgPriceMins":5
},
{
"filterType":"LOT_SIZE",
"minQty":"0.00000100",
"maxQty":"9000.00000000",
"stepSize":"0.00000100"
},
{
"filterType":"MIN_NOTIONAL",
"minNotional":"10.00000000",
"applyToMarket":true,
"avgPriceMins":5
},
{
"filterType":"ICEBERG_PARTS",
"limit":10
},
{
"filterType":"MARKET_LOT_SIZE",
"minQty":"0.00000000",
"maxQty":"29.33387056",
"stepSize":"0.00000000"
},
{
"filterType":"MAX_NUM_ORDERS",
"maxNumOrders":200
},
{
"filterType":"MAX_NUM_ALGO_ORDERS",
"maxNumAlgoOrders":5
}
],
"permissions":[
"SPOT"
]
}
]
}
For PRICE_FILTER:
{
"filterType":"PRICE_FILTER",
"minPrice":"0.01000000",
"maxPrice":"100000.00000000",
"tickSize":"0.01000000"
},
Lets look into the first condition; price >= minPrice
price <= maxPrice
We need to have a price that must be greater or equal to min price and less than or equal to the max price.
Let's look into the second condition: price % tickSize == 0; For this, we might get the precision issue if we don't parse the price. Here, tickSize is in the 2 decimal place so we need to parse the price in 2 decimal places to validate the filter. This will help resolve the issue.