跳到主要内容

速率限制

连接数量限制

每IP地址、每5分钟最多可以发送300次连接请求。

速率限制基本信息

  • exchangeInfo 有包含与速率限制相关的信息。
  • 根据不同的间隔,有多种频率限制类型。
  • 从响应中的可选 rateLimits 字段,能看到当前的频率限制状态。
  • 当您超出未成交订单计数或者请求速率限制时,请求会失败并返回 HTTP 状态代码 429。

如何咨询频率限制

频率限制状态的响应可能如下所示:

{
"id": "7069b743-f477-4ae3-81db-db9b8df085d2",
"status": 200,
"result": {
"serverTime": 1656400526260
},
"rateLimits": [
{
"rateLimitType": "REQUEST_WEIGHT",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 6000,
"count": 70
}
]
}

rate Limits 数组描述了受请求影响的所有当前的速率限制。

名称类型是否必须描述
rateLimitTypeENUMYES频率限制类型: REQUEST_WEIGHT, ORDERS
intervalENUMYES频率限制间隔: SECOND, MINUTE, HOUR, DAY
intervalNumINTYES频率限制间隔乘数
limitINTYES每个间隔的请求限制
countINTYES每个间隔的当前使用情况

频率限制按间隔计算。

例如,1 MINUTE 间隔表示每分钟开始。 在 00:01:23.456 提交的请求计入 00:01:00 分钟的限制。 一旦 00:02:00 分钟开始,计数将再次重置为零。

其他间隔的行为方式类似。 例如,1 DAY 频率限制是在每天 00:00 UTC 重置,并且 10 SECOND 间隔重置为每分钟的 00、10、20...秒。

API 有多种频率限制间隔。 如果您用完了较短的间隔但较长的间隔仍然允许请求,您将不得不等待较短的间隔到期并重置。 如果你用完了更长的间隔,你将不得不等待那个间隔重置,即使较短的频率限制计数为零。

如何显示/隐藏频率限制信息

默认情况下,每个响应都包含 rateLimits 字段。

但是,频率限制信息可能非常大。 如果您对每个请求的详细频率限制状态不感兴趣,可以从响应中省略 rateLimits 字段。

  • 请求中的可选 returnRateLimits boolean 参数。

    使用 returnRateLimits 参数控制是否包含 rateLimits 字段以响应单个请求。

    默认请求和响应:

    {"id":1,"method":"time"}
    {"id":1,"status":200,"result":{"serverTime":1656400526260},"rateLimits":[{"rateLimitType":"REQUEST_WEIGHT","interval":"MINUTE","intervalNum":1,"limit":6000,"count":70}]}

    没有频率限制状态的请求和响应:

    {"id":2,"method":"time","params":{"returnRateLimits":false}}
    {"id":2,"status":200,"result":{"serverTime":1656400527891}}
  • 连接 URL 中可选的 returnRateLimits boolean 参数。

    如果您希望在默认情况下从所有响应中省略 rateLimits,可以在 query string 中使用 returnRateLimits 参数:

    wss://ws-api.binance.com:443/ws-api/v3?returnRateLimits=false

    这将使通过此连接发出的所有请求的行为就像您已传了 "returnRateLimits":false 一样。

    如果您_想_查看特定请求的频率限制,您需要特定传 "returnRateLimits":true 参数。

注意: 如果您在响应中隐藏 rateLimits 字段,您的请求仍然还是会受到频率限制的。

IP 访问限制

  • 每个请求都有一个特定的 权重,它会添加到您的访问限制中。
    • 越消耗资源的接口, 比如查询多个交易对, 权重就会越大。
    • 连接到 WebSocket API 会用到2个权重。
  • 当前权重使用由 REQUEST_WEIGHT 频率限制类型指示。
  • 请使用exchangeInfo请求来跟踪当前的重量限制。
  • 权重是基于每个 IP 地址累积的,并由来自该地址的所有连接共享。
  • 如果超多限制,客服端会收到 429
    • 这错误代码表示您有责任停止发送请求,不得滥用API。
    • 响应会包含一个 retryAfter 字段,指示在什么时候您能重试。
  • 屡次违反速率限制或者在收到429后未能退缩将导致自动 IP 封禁和断开连接。
    • 被禁止 IP 地址的请求失败,状态为 418
    • retryAfter 字段表示解除禁令的timestamp。
  • 频繁违反限制的封禁时间会逐渐延长从最短2分钟到最长3天

表示在1分钟内使用了(1200权重限制中的)70权重的成功响应:

{
"id": "7069b743-f477-4ae3-81db-db9b8df085d2",
"status": 200,
"result": [],
"rateLimits": [
{
"rateLimitType": "REQUEST_WEIGHT",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 6000,
"count": 70
}
]
}

表示已被封禁且封禁将在 epoch 1659146400000 解锁的失败响应:

{
"id": "fc93a61a-a192-4cf4-bb2a-a8f0f0c51e06",
"status": 418,
"error": {
"code": -1003,
"msg": "Way too much request weight used; IP banned until 1659146400000. Please use WebSocket Streams for live updates to avoid bans.",
"data": {
"serverTime": 1659142907531,
"retryAfter": 1659146400000
}
},
"rateLimits": [
{
"rateLimitType": "REQUEST_WEIGHT",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 6000,
"count": 2411
}
]
}

未成交订单计数

  • 成功下单将更新 订单 速率限制类型。
  • 被拒绝或不成功的订单可能会也可能不会更新 订单 速率限制类型。
  • 请注意,如果您的订单一直顺利完成交易,您可以通过 API 持续下订单。更多信息,请参见 现货未成交订单计数规则
  • 使用 account.rateLimits.orders 请求来跟踪您在此时间间隔内下了多少订单。
  • 如果超过此值,请求将失败,状态为 429
    • 此状态代码表示您应退出并停止向 API 滥发信息。
    • 状态为 429 的响应会包含 retryAfter 字段,用以指示何时可以重试请求。
  • 这是按 每一个账户 维护的,并由该账户的所有 API 密钥共享。

表示在10秒内下了12个订单和在24小时内下了4043个订单的成功响应:

{
"id": "e2a85d9f-07a5-4f94-8d5f-789dc3deb097",
"status": 200,
"result": {
"symbol": "BTCUSDT",
"orderId": 12510053279,
"orderListId": -1,
"clientOrderId": "a097fe6304b20a7e4fc436",
"transactTime": 1655716096505,
"price": "0.10000000",
"origQty": "10.00000000",
"executedQty": "0.00000000",
"origQuoteOrderQty": "0.000000",
"cummulativeQuoteQty": "0.00000000",
"status": "NEW",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"workingTime": 1655716096505,
"selfTradePreventionMode": "NONE"
},
"rateLimits": [
{
"rateLimitType": "ORDERS",
"interval": "SECOND",
"intervalNum": 10,
"limit": 50,
"count": 12
},
{
"rateLimitType": "ORDERS",
"interval": "DAY",
"intervalNum": 1,
"limit": 160000,
"count": 4043
},
{
"rateLimitType": "REQUEST_WEIGHT",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 6000,
"count": 321
}
]
}