【问题标题】:Binance API response shows wrong minimum order quantityBinance API 响应显示错误的最小订购量
【发布时间】:2023-02-17 23:35:17
【问题描述】:

尝试点击 fapi.binance.com/fapi/v1/exchangeInfo 端点以获得当前货币对的最小订单数量(让我们以 ETHUSDT 为例)。

这是 Binance UI 显示的最小数量:Minimum order quantity for ETH is 0.004ETH

当命中上述端点并检查 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"
  ]
}

我们可以观察到,尽管 filters 数组中的某些文档(如 LOT_SIZE 和 MARKET_LOT_SIZE)正在尝试,但这里没有数据表明正确的 minQty。

我是不是遗漏了什么或者这是一个 Binance API 错误?

【问题讨论】:

  • filters中LOT_SIZE的stepSize给出了正确的最小数量。不知道截图的原因和来源。
  • @halfelf 这是我在欧盟币安平台上发帖时拍的。我相信我已经找到了解决我自己问题的方法 - 请参阅下面的答案。
  • ^ 认为它也有助于澄清它是欧盟期货 USDT-M Binance 平台

标签: trading algorithmic-trading binance binance-api-client


【解决方案1】:

花了一段时间才弄清楚,但我相信我已经找到了解决方案/解释。

正如我之前提到的,我们对在 fapi.binance.com/fapi/v1/exchangeInfo 端点的响应中找到的 filters 数组感兴趣,特别是 MARKET_LOT_SIZE(LOT_SIZE 如果您对市场订单不感兴趣)和 MIN_NOTIONAL 过滤器。当我写这个问题时,我假设其中之一必须是真相的来源,但两者都没有始终符合 Binance UI 上看到的最低订购量。

事实证明它不是其中之一,而是两者的结合……有点。

对于没有经验的交易者 - 快速定义。 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 过滤器的要求。

因此,要计算最小订货量,我们需要注意取两者的最大值。我们首先需要将MIN_NOTIONAL过滤值5 USDT转换为ETH。我们可以通过将该值除以 ETH 的当前价格来做到这一点。请注意,如果除法结果的小数点比 Binance 上资产的数量精度多,我们需要四舍五入到该小数位数。

最终,Python中的计算示例:

max(
  MIN_MARKET_LOT_SIZE, 
  round_up((MIN_NOTIONAL / CURRENT_ETH_PRICE), ETH_QUANTITY_PRECISION)
) 

可以找到小数舍入函数的示例here

【讨论】:

    【解决方案2】:

    下面的计算对我有用。

    将交易品种的当前价格乘以 MIN_NOTIONAL 值以获得下单的最小数量

    minQty = 交易品种的当前价格 * MIN_NOTIONAL

    就我而言, MIN_NOTIONAL 值为 5.0, 我用过5.1,只是为了超过最低数量下订单

    谢谢

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多