Appearance
Binance JavaScript 杠杆交易连接器
这是一个用于 Binance 杠杆交易 API 的客户端库,使开发者能够通过编程方式与 Binance 的杠杆交易平台进行交互。该库提供了通过 REST API 使用第三方提供的资金进行资产交易的工具:
目录
支持的功能
- REST API 接口:
/sapi/v1/margin/*/sapi/v1/bnbBurn/*/sapi/v1/userDataStream/*
- 包含测试用例和示例,便于快速上手。
安装
要使用该库,请确保您的环境运行的是 Node.js 22.12.0 或更高版本。如果您使用 nvm(Node 版本管理器),可以按如下方式设置正确的版本:
bash
nvm install 22.12.0
nvm use 22.12.0然后使用 npm 安装库:
bash
npm install @binance/margin-trading文档
如需详细信息,请参考 Binance API 文档。
REST API
所有 REST API 端点均可通过 rest-api 模块访问。请注意,某些端点需要使用您的 Binance API 凭证进行身份验证。
typescript
import { MarginTrading, MarginTradingRestAPI } from '@binance/margin-trading';
const configurationRestAPI = {
apiKey: 'your-api-key',
apiSecret: 'your-api-secret',
};
const client = new MarginTrading({ configurationRestAPI });
client.restAPI
.getSummaryOfMarginAccount()
.then((res) => res.data())
.then((data: MarginTradingRestAPI.GetSummaryOfMarginAccountResponse) => console.log(data))
.catch((err) => console.error(err));更多示例可在 examples/rest-api 文件夹中找到。
配置选项
REST API 支持以下高级配置选项:
timeout:请求超时时间,单位为毫秒(默认值:1000 毫秒)。proxy:代理配置:host:代理服务器主机名。port:代理服务器端口。protocol:代理协议(http 或 https)。auth:代理身份验证凭据:username:代理用户名。password:代理密码。
keepAlive:启用 HTTP keep-alive(默认值:true)。compression:启用响应压缩(默认值:true)。retries:请求失败时的重试次数(默认值:3 次)。backoff:重试之间的延迟毫秒数(默认值:1000 毫秒)。httpsAgent:用于高级 TLS 配置的自定义 HTTPS 代理。privateKey:用于身份验证的 RSA 或 ED25519 私钥。privateKeyPassphrase:私钥的密码短语(如果加密)。
超时
您可以将请求的超时时间配置为毫秒。如果请求超过指定的超时时间,则会被中止。有关详细用法,请参阅 超时示例。
代理
REST API 支持 HTTP/HTTPS 代理配置。有关详细用法,请参阅 代理示例。
Keep-Alive
为持久连接启用 HTTP keep-alive。有关详细用法,请参阅 Keep-Alive 示例。
压缩
启用或禁用响应压缩。有关详细用法,请参阅 压缩示例。
重试
为失败的请求配置重试次数和每次重试之间的延迟毫秒数。有关详细用法,请参阅 重试示例。
HTTPS 代理
为高级 TLS 配置自定义 HTTPS 代理。有关详细用法,请参阅 HTTPS 代理示例。
基于密钥对的身份验证
REST API 支持基于密钥对的安全通信身份验证。您可以使用 RSA 或 ED25519 密钥对请求进行签名。有关详细用法,请参阅 基于密钥对的身份验证示例。
证书锁定
为增强安全性,您可以在配置中使用 httpsAgent 选项进行证书锁定。这确保客户端仅与使用特定证书的服务器通信。有关详细用法,请参阅 证书锁定示例。
错误处理
REST API 提供了详细的错误类型,以帮助您有效地处理问题:
ConnectorClientError:通用客户端错误。RequiredError:缺少必填参数时抛出。UnauthorizedError:表示缺少或无效的身份验证凭据。ForbiddenError:禁止访问所请求的资源。TooManyRequestsError:超出速率限制。RateLimitBanError:IP 地址因超出速率限制而被封禁。ServerError:内部服务器错误。NetworkError:网络连接问题。NotFoundError:未找到资源。BadRequestError:无效请求。
有关详细用法,请参阅 错误处理示例。
如果未提供 basePath,则默认为 https://api.binance.com。
WebSocket 流
margin-trading 中的 WebSocket 流用于订阅风险和交易数据流。使用 websocket-streams 模块与之交互。
配置选项
WebSocket 流 API 支持以下高级配置选项:
reconnectDelay:指定重新连接尝试之间的延迟(默认值:5000 毫秒)。compression:启用或禁用 WebSocket 消息的压缩(默认值:true)。agent:用于高级配置自定义 WebSocket 代理。mode:选择single或pool连接模式。single:单个 WebSocket 连接。pool:一组 WebSocket 连接。
poolSize:在池模式下定义 WebSocket 连接数量。
订阅风险和交易数据流
您可以消费风险和交易数据流,该流发送账户级别的事件,如账户和订单更新。首先通过 REST API 创建一个 listen-key;然后:
typescript
import { MarginTrading, MARGIN_TRADING_WS_STREAMS_PROD_URL } from '@binance/margin-trading';
const configurationWebsocketStreams = {
wsURL: MARGIN_TRADING_WS_STREAMS_PROD_URL,
};
const client = new MarginTrading({ configurationWebsocketStreams });
client.websocketStreams
.connect()
.then((connection) => {
const tradeStream = connection.tradeData('listenKey');
tradeStream.on('message', (data) => {
switch (data.e) {
case 'balanceUpdate':
console.log('余额更新流', data);
break;
case 'outboundAccountPosition':
console.log('出站账户持仓流', data);
break;
// …处理其他情况…
default:
console.log('未知流', data);
break;
}
});
})
.catch((err) => console.error(err));基本示例
以下是一个简单的 FastAPI 应用,演示了如何使用 pydantic 模型进行请求和响应数据的验证。
python
from fastapi import FastAPI
from pydantic import BaseModel
import uvicorn
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.get("/")
def read_root():
return {"message": "欢迎使用 FastAPI!"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {
"item_id": item_id,
"item_name": item.name,
"item_price": item.price
}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)演示说明
Item是一个 pydantic 模型,用于验证请求体。@app.get()、@app.put()等是 FastAPI 提供的装饰器,用于定义 API 路由。uvicorn.run()用于启动 ASGI 应用。
运行应用
安装依赖:
bashpip install fastapi uvicorn将上述代码保存为
main.py。运行服务器:
bashuvicorn main:app --reload打开浏览器访问 http://127.0.0.1:8000/docs 以查看交互式 API 文档。
typescript
import { MarginTrading, MARGIN_TRADING_RISK_WS_STREAMS_PROD_URL } from '@binance/margin-trading';
const configurationWebsocketStreams = {
wsURL: MARGIN_TRADING_RISK_WS_STREAMS_PROD_URL,
};
const client = new MarginTrading({ configurationWebsocketStreams });
client.websocketStreams
.connect()
.then((connection) => {
const riskStream = connection.riskData('listenKey');
riskStream.on('message', (data) => {
switch (data.e) {
case 'MARGIN_LEVEL_STATUS_CHANGE':
console.log('风险等级变更流', data);
break;
case 'USER_LIABILITY_CHANGE':
console.log('风险等级变更流', data);
break;
default:
console.log('未知数据流', data);
break;
}
});
})
.catch((err) => console.error(err));取消订阅流
你可以使用 unsubscribe 方法取消对风险和交易数据流的订阅。这在无需关闭连接的情况下,有助于管理当前的活跃订阅。
typescript
import { MarginTrading, MARGIN_TRADING_WS_STREAMS_PROD_URL } from '@binance/margin-trading';
const configurationWebsocketStreams = {
wsURL: MARGIN_TRADING_WS_STREAMS_PROD_URL,
};
const client = new MarginTrading({ configurationWebsocketStreams });
client.websocketStreams
.connect()
.then((connection) => {
const tradeStream = connection.tradeData('listenKey');
tradeStream.on('message', (data) => {
switch (data.e) {
case 'balanceUpdate':
console.log('余额更新流', data);
break;
case 'outboundAccountPosition':
console.log('出站账户持仓流', data);
break;
default:
console.log('未知流', data);
break;
}
});
setTimeout(() => {
stream.unsubscribe();
console.log('已取消订阅交易数据流');
}, 10000);
})
.catch((err) => console.error(err));如果未提供 wsURL,则默认使用 wss://stream.binance.com:9443。
自动连接续期
在 API 密钥 24 小时过期之前,系统会自动为 WebSocket API 和 WebSocket 流连接续期,以确保持续连接。
测试
要运行测试:
bash
npm 安装
npm 运行测试测试涵盖:
- REST API 端点
- 错误处理和边界情况
迁移指南
如果您正在升级到新的模块化结构,请参考迁移指南,以获取详细步骤。
贡献
我们欢迎贡献!
由于此仓库包含自动生成的代码,我们建议您首先创建一个 GitHub Issue 来讨论您的想法或提出改进建议。这有助于确保所做的更改符合项目的开发目标和自动化生成流程。
如需贡献,请遵循以下步骤:
- 创建一个 GitHub Issue,描述您的建议或发现的 Bug。
- 如果确认需要更改,维护人员将把更改合并到主分支中。
如果您直接进行贡献,请确保所有测试都能通过。请在讨论并确认更改后再提交 Pull Request。
感谢您的贡献!
许可证
本项目采用 MIT 许可证。详情请参阅 LICENCE 文件。
