添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

币安教程文档-基本信息3:WebSocket API基本信息

币安binance量化交易机器人 ,完全免费,办公环境运行,适合小白入门。


Base url 为: 'wss://ws-fapi.binance.com/ws-fapi/v1'

测试网的 Base url 为: wss://testnet.binancefuture.com/ws-fapi/v1

单次连接 API 有效期仅为 24 小时 ; 预计在 24 小时标记后断开连接。

Websocket 服务器每 3 分钟发送一个 ping 消息。

如果 websocket 服务器在 10 分钟内没有收到来自连接的 pong frame ,则连接将断开。

当客户收到 ping 消息,必需尽快回复 pong 消息,同时 payload 需要和 ping 消息一致。

未经请求的 pong 消息是被允许的,但是不会保证连接不断开。对于这些 pong 消息,建议 payload 为空。

必须通过获取除签名之外的所有请求参数并按字母顺序按名称排序来生成签名 payload

除非另有说明,否则列表按时间顺序返回。

除非另有说明,否则所有时间戳均以 UTC 中的毫秒为单位。

除非另有说明,否则所有字段名称和值均区分大小写。

INT 参数(如时间戳)应为 JSON 整数,而不是字符串。

DECIMAL 参数(如 price )应为 JSON 字符串,而不是浮点数。

用户数据流请求 - 您需要建立单独的 WebSocket 连接来获得 [ 账户信息推送 ] https://binance-docs.github.io/apidocs/futures/cn/#websocket-2

请求示例 :

{

"id": "9ca10e58-7452-467e-9454-f669bb9c764e",

"method": "order.place",

"params": {

"apiKey": "yeqKcXjtA9Eu4Tr3nJk61UJAGzXsEmFqqfVterxpMpR4peNfqE7Zl7oans8Qj089",

"price": "42088.0",

"quantity": "0.1",

"recvWindow": 5000,

"side": "BUY",

"signature": "996962a19802b5a09d7bc6ab1524227894533322a2f8a1f8934991689cabf8fe",

"symbol": "BTCUSDT",

"timeInForce": "GTC",

"timestamp": 1705311512994,

"type": "LIMIT"

}

}

请求字段 :

名称 类型 是否必需 描述

id      INT / STRING / null  YES 任意的 ID 用于匹配对请求的响应

method    STRING    YES 请求函数名称

params    OBJECT    NO 请求参数。如果没有参数可以省略

请求 id 是任意的。可以使用 UUID 、顺次 ID 、当前时间戳等。 服务器不会以任何方式解释 id ,只是在响应中回显它。

可以在一个会话中自由重复使用 ID ,不过请注意不要一次发送多个具有相同 ID 的请求,因为否则可能无法区分响应。

请求函数名称可以以显式版本为前缀,例如: "v3/order.place"

params 的顺序不重要。

WebSocket API 响应格式

响应在 text 中以 JSON 格式返回,每帧一个响应。

成功响应示例 :

{

"id": "43a3843a-2321-4e45-8f79-351e5c354563",

"status": 200,

"result": {

"orderId": 336829446,

"symbol": "BTCUSDT",

"status": "NEW",

"clientOrderId": "FqEw6cn0vDhrkmfiwLYPeo",

"price": "42088.00",

"avgPrice": "0.00",

"origQty": "0.100",

"executedQty": "0.000",

"cumQty": "0.000",

"cumQuote": "0.00000",

"timeInForce": "GTC",

"type": "LIMIT",

"reduceOnly": false,

"closePosition": false,

"side": "BUY",

"positionSide": "BOTH",

"stopPrice": "0.00",

"workingType": "CONTRACT_PRICE",

"priceProtect": false,

"origType": "LIMIT",

"priceMatch": "NONE",

"selfTradePreventionMode": "NONE",

"goodTillDate": 0,

"updateTime": 1705385954229

},

"rateLimits": [

{

"rateLimitType": "REQUEST_WEIGHT",

"interval": "MINUTE",

"intervalNum": 1,

"limit": 2400,

"count": 1

},

{

"rateLimitType": "ORDERS",

"interval": "SECOND",

"intervalNum": 10,

"limit": 300,

"count": 1

},

{

"rateLimitType": "ORDERS",

"interval": "MINUTE",

"intervalNum": 1,

"limit": 1200,

"count": 0

}

]

}

失败响应示例 :

{

"id": "5761b939-27b1-4948-ab87-4a372a3f6b72",

"status": 400,

"error": {

"code": -1102,

"msg": "Mandatory parameter 'quantity' was not sent, was empty/null, or malformed."

},

"rateLimits": [

{

"rateLimitType": "REQUEST_WEIGHT",

"interval": "MINUTE",

"intervalNum": 1,

"limit": 2400,

"count": 1

},

{

"rateLimitType": "ORDERS",

"interval": "SECOND",

"intervalNum": 10,

"limit": 300,

"count": 1

},

{

"rateLimitType": "ORDERS",

"interval": "MINUTE",

"intervalNum": 1,

"limit": 1200,

"count": 1

}

]

}

响应字段 :

名称 类型 是否必需 描述

id      INT / STRING / null  YES 与原来请求的 ID 一样

status       INT   YES 响应状态。请看 状态代码

result        OBJECT / ARRAY      YES 响应内容。请求成功则显示

error         OBJECT 错误描述。请求失败则显示

rateLimits         ARRAY      NO 速率限制状态。请看 速率限制

WebSocket API 访问限制

速率限制与 REST API 相同,并且与 REST API 共享。

WebSocket 握手尝试消耗权重 5

ping/pong 帧的速率限制:每秒最多 5 次。

默认情况下,响应中包含速率限制信息,参见 rateLimits 字段。

可以通过在连接字符串或单个请求中的 returnRateLimits 布尔参数来控制 rateLimits 字段的可见性。

例如,使用 wss://ws-fapi.binance.com/ws-fapi/v1?returnRateLimits=false 默认在响应中隐藏 rateLimits 。在这样的情况下,您可以在请求中传递额外的 "returnRateLimits": true 参数,当默认隐藏时,就可以在响应中显示速率限制。

WebSocket API 连接后进行身份验证

你可以使用会话身份验证请求对已经建立的连接进行身份验证:

session.logon 进行身份验证,或更改与连接相关联的 API 密钥。

session.status 检查连接状态和当前 API 密钥。

session.logout 忘记与连接关联的 API 密钥。

WebSocket API 关于吊销 API 密钥

如果在活动会话期间,由于 任何 原因(例如 IP 地址未被加入白名单、 API 密钥被删除、 API 密钥没有正确的权限等),在下一个请求后,会话将被吊销,并显示以下错误消息 :

{

"id": null,

"status": 401,

"error": {

"code": -2015,

"msg": "Invalid API-key, IP, or permissions for action."

}

}

WebSocket API 授权 临时 请求

WebSocket 连接只能通过一个 API 密钥进行身份验证。 默认情况下,经过身份验证的 API 密钥将用于需要 apiKey 参数的请求。 但是,你始终可以为单个请求明确指定 apiKey signature ,覆盖已认证的 API 密钥,以使用不同的 API 密钥授权特定请求。

例如,你可能希望用默认密钥来验证 USER_DATA ,但在下单时使用 TRADE 密钥来签名。

WebSocket API 身份验证请求

注意: 仅支持 Ed25519 密钥用于此功能。

API key 登录 (SIGNED)

请求

{

"id": "c174a2b1-3f51-4580-b200-8528bd237cb7",

"method": "session.logon",

"params": {

"apiKey": "vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A",

"signature": "1cf54395b336b0a9727ef27d5d98987962bc47aca6e13fe978612d0adee066ed",

"timestamp": 1649729878532

}

}

响应 :

{

"id": "c174a2b1-3f51-4580-b200-8528bd237cb7",

"status": 200,

"result": {

"apiKey": "vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A",

"authorizedSince": 1649729878532,

"connectedSince": 1649729873021,

"returnRateLimits": false,

"serverTime": 1649729878630

}

}

使用提供的 API 密钥进行 WebSocket 连接身份验证。

在调用 session.logon 后,将来的需要 apiKey signature 参数的请求可以省略它们。

请注意,只能认证一个 API 密钥。 多次调用 session.logon 将更改当前已认证的 API 密钥。

权重 : 2

参数 :

参数名 类型 是否必需 描述

apiKey      STRING    YES

recvWindow     INT   NO   The value cannot be greater than 60000

signature STRING    YES

timestamp       INT   YES

数据源 : 缓存

查询会话状态

请求

{

"id": "b50c16cd-62c9-4e29-89e4-37f10111f5bf",

"method": "session.status"

}

响应 :

{

"id": "b50c16cd-62c9-4e29-89e4-37f10111f5bf",

"status": 200,

"result": {

// 如果连接未经身份验证, "apiKey" "authorizedSince" 将显示为 null

"apiKey": "vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A",

"authorizedSince": 1649729878532,

"connectedSince": 1649729873021,

"returnRateLimits": false,

"serverTime": 1649730611671

}

}

查询 WebSocket 连接的状态,检查用于授权请求的 API 密钥(如果有的话)。

权重 : 2

参数 : NONE

数据源 : 缓存

退出会话

请求

{

"id": "c174a2b1-3f51-4580-b200-8528bd237cb7",

"method": "session.logout"

}

响应 :

{

"id": "c174a2b1-3f51-4580-b200-8528bd237cb7",

"status": 200,

"result": {

"apiKey": null,

"authorizedSince": null,

"connectedSince": 1649729873021,

"returnRateLimits": false,

"serverTime": 1649730611671

}

}

忘记之前认证的 API 密钥。 如果连接未经身份验证,此请求不会有任何作用。

请注意, session.logout 请求后, WebSocket 连接仍然保持打开状态。 你可以继续使用连接,但现在必须在需要的地方明确提供 apiKey signature 参数。

权重 : 2

参数 : NONE

数据源 : 缓存

SIGNED (TRADE and USER_DATA) 请求安全

SIGNED 请求示例 (Ed25519)

* 我们建议使用 Ed25519 API keys** ,因为它在所有受支持的 API key 类型中提供最佳性能和安全性。

参数 取值

symbol     BTCUSDT

side  SELL

type LIMIT

timeInForce     GTC

quantity   1

price         0.2

timestamp       1668481559918

#!/usr/bin/env python3

import base64

import time

import json

from cryptography.hazmat.primitives.serialization import load_pem_private_key

from websocket import create_connection

# 设置身份验证:

API_KEY=' 替换成您的 API Key'

PRIVATE_KEY_PATH='test-prv-key.pem'

# 加载 private key

# 在这个例子中, private key 没有加密,但我们建议使用强密码以提高安全性。

with open(PRIVATE_KEY_PATH, 'rb') as f:

private_key = load_pem_private_key(data=f.read(), password=None)

# 设置请求参数:

params = {

'apiKey':        API_KEY,

'symbol':       'BTCUSDT',

'side':         'SELL',

'type':         'LIMIT',

'timeInForce':  'GTC',

'quantity':     '1.0000000',

'price':        '0.20'

}

# 参数中加时间戳:

timestamp = int(time.time() * 1000) # 以毫秒为单位的 UNIX 时间戳

params['timestamp'] = timestamp

# 参数中加签名:

payload = '&'.join([f'{param}={value}' for param, value in sorted(params.items())])

signature = base64.b64encode(private_key.sign(payload.encode('ASCII')))

params['signature'] = signature.decode('ASCII')

# 发送请求:

request = {

'id': 'my_new_order',

'method': 'order.place',

'params': params

}

ws = create_connection('wss://ws-fapi.binance.com/ws-fapi/v1')

ws.send(json.dumps(request))

result =  ws.recv()

ws.close()

print(result)

右边有 Python 脚本来示例如何使用 Ed25519 key 签名。



admin   2024-4-14 Does Futu NiuNiu quantitative trading bot support cryptocurrencies? bitmex半年合约出现正溢价,同时永续合约未平仓量创新高 ​​​​ 为什么bitmex跌出全球最大的比特币交易平台的神坛 ? BitMEX API获取资金费率历史表 比特币几近腰斩,短线超跌严重 aijiebots office excel crypto trading bots tutorial 5:How to set parameters? 区块链技术在供应链管理中的机遇与挑战 比特币走势分析-波动性背离和下降楔形