尝试命中fapi.binance.com/fapi/v1/exchangeInfo
端点,以获得一对的当前最小订购量(让我们以ETHUSDT为例)。
以下是Binance显示的minQty:ETH的最低订购量为0.004 ETH。
当到达上述端点并检查ETHUSDT符号特定响应时:
{
"symbol": "ETHUSDT",
"pair": "ETHUSDT",
"contractType": "PERPETUAL",
"deliveryDate": 4133404800000,
"onboardDate": 1569398400000,
"status": "TRADING",
"maintMarginPercent": "2.5000",
"requiredMarginPercent": "5.0000",
"baseAsset": "ETH",
"quoteAsset": "USDT",
"marginAsset": "USDT",
"pricePrecision": 2,
"quantityPrecision": 3,
"baseAssetPrecision": 8,
"quotePrecision": 8,
"underlyingType": "COIN",
"underlyingSubType": [
"Layer-1"
],
"settlePlan": 0,
"triggerProtect": "0.0500",
"liquidationFee": "0.015000",
"marketTakeBound": "0.05",
"filters": [
{
"minPrice": "39.86",
"maxPrice": "306177",
"filterType": "PRICE_FILTER",
"tickSize": "0.01"
},
{
"stepSize": "0.001",
"filterType": "LOT_SIZE",
"maxQty": "10000",
"minQty": "0.001"
},
{
"stepSize": "0.001",
"filterType": "MARKET_LOT_SIZE",
"maxQty": "2000",
"minQty": "0.001"
},
{
"limit": 200,
"filterType": "MAX_NUM_ORDERS"
},
{
"limit": 10,
"filterType": "MAX_NUM_ALGO_ORDERS"
},
{
"notional": "5",
"filterType": "MIN_NOTIONAL"
},
{
"multiplierDown": "0.9500",
"multiplierUp": "1.0500",
"multiplierDecimal": "4",
"filterType": "PERCENT_PRICE"
}
],
"orderTypes": [
"LIMIT",
"MARKET",
"STOP",
"STOP_MARKET",
"TAKE_PROFIT",
"TAKE_PROFIT_MARKET",
"TRAILING_STOP_MARKET"
],
"timeInForce": [
"GTC",
"IOC",
"FOK",
"GTX"
]
}
我们可以看到,这里没有数据表明minQty是正确的,尽管filters
数组中的一些文档(如LOT_SIZE
和MARKET_LOT_SIZE
)正在尝试。
我是遗漏了什么,还是这是Binance API的bug?
发布于 2022-09-01 18:13:34
花了一段时间才弄明白,但我相信我已经找到了解决办法/解释。
如前所述,我们感兴趣的是在filters
端点的响应中找到的fapi.binance.com/fapi/v1/exchangeInfo
数组,特别是MARKET_LOT_SIZE
(如果您对市场订单不感兴趣)和MIN_NOTIONAL
过滤器。当我写这个问题的时候,我认为其中一个必须是事实的来源,但这两个问题中没有一个能始终与Binance UI上的最低订购量相匹配。
原来它不是其中的一个,而是两个combined...sort的。
对于缺乏经验的交易者来说--一个快速的定义。Base asset
-你正在购买的资产。Quote asset
-您正在获取的基本资产的资产。在我的例子中(ETHUSDT),ETH
是基本资产,USDT
是报价资产。
MIN_NOTIONAL
过滤器告诉您获取基本资产所需的报价资产的最小金额。在投寄时ETHUSDT的情况下,此过滤器等于5 USDT。
MARKET_LOT_SIZE
过滤器告诉您可以购买的基本资产的最小金额。如果在投寄时使用ETHUSDT,则此过滤器等于0.001。
取决于ETH的价格,0.001 ETH的成本可能低于5 USDT,这将无法满足MIN_NOTIONAL
滤波器的要求。同样,如果由于价格原因,5 USDT购买的小于0.001 ETH,一个名义价值为5 USDT的订单将无法满足MARKET_LOT_SIZE
过滤器的要求。
因此,要计算最小订购量,我们需要取两者的最大值,但有一个警告。我们首先需要将5 USDT的MIN_NOTIONAL
滤波器值转换为ETH。我们可以通过将这个值除以ETH的当前价格来实现。请注意,如果除法的结果有更多的小数点,那么在Binance上资产的数量精度就会更高,我们需要把这个小数集合起来。
最后,Python中的计算示例:
max(
MIN_MARKET_LOT_SIZE,
round_up((MIN_NOTIONAL / CURRENT_ETH_PRICE), ETH_QUANTITY_PRECISION)
)
小数舍入函数的一个例子可以找到这里。
https://stackoverflow.com/questions/73571626
复制相似问题