bingx-spot-ws-market
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseBingX Spot WebSocket Market Data
BingX 现货WebSocket行情数据
Real-time market data streams for BingX spot trading via WebSocket. No authentication required.
WebSocket Endpoint:
wss://open-api-ws.bingx.com/market通过WebSocket获取BingX现货交易的实时行情数据流,无需身份验证。
WebSocket接入地址:
wss://open-api-ws.bingx.com/marketQuick Reference
快速参考
| Channel | dataType Format | Description | Push Frequency |
|---|---|---|---|
| Trade | | Latest trade detail | Real-time |
| K-Line | | OHLCV candlestick | On update |
| Depth | | Limited order book depth | Every 300ms |
| 24h Ticker | | 24-hour price change statistics | Every 1s |
| Last Price | | Latest trade price | Real-time |
| Book Ticker | | Best bid/ask price & qty | Real-time |
| Incremental Depth | | Incremental + full depth (1000 levels) | Every 500ms |
| 通道 | dataType格式 | 说明 | 推送频率 |
|---|---|---|---|
| 交易 | | 最新交易详情 | 实时 |
| K线 | | OHLCV candlestick | 更新时推送 |
| 深度 | | 限定档位的订单簿深度 | 每300毫秒 |
| 24小时行情 | | 24小时价格变动统计 | 每1秒 |
| 最新价格 | | 最新成交价格 | 实时 |
| 买卖盘行情 | | 最优买卖盘价格和数量 | 实时 |
| 增量深度 | | 增量+全量深度(1000档位) | 每500毫秒 |
Parameters
参数说明
Common Parameters
公共参数
- symbol: Trading pair in format (e.g.,
BASE-USDT,BTC-USDT,ETH-USDT)SOL-USDT
- symbol: 交易对,格式为(例如:
BASE-USDT、BTC-USDT、ETH-USDT)SOL-USDT
Enums
枚举值
- depth level: |
5|10|20|50(default 20)100 - kline interval: |
1min|3min|5min|15min|30min|1h|2h|4h|6h|8h|12h|1d|3d|1w1M
Note: Spot kline intervals usesuffix (e.g.,min) unlike swap which uses1min(e.g.,m).1m
- depth level(深度档位): |
5|10|20|50(默认20)100 - kline interval(K线周期): |
1min|3min|5min|15min|30min|1h|2h|4h|6h|8h|12h|1d|3d|1w1M
注意:现货K线周期使用后缀(例如min),和合约使用1min(例如m)的规则不同。1m
Parameter Validation Rules
参数校验规则
- symbol: Must match ; max 20 characters (e.g.,
^[A-Z0-9]+-[A-Z]+$)BTC-USDT - level: Must be one of ,
5,10,20,50100 - interval (kline): Must exactly match one of the kline enum values above
- symbol: 必须匹配正则,最长20个字符(例如
^[A-Z0-9]+-[A-Z]+$)BTC-USDT - level: 必须是、
5、10、20、50中的一个100 - interval(K线周期): 必须严格匹配上方列出的K线枚举值之一
Quick Start
快速开始
WebSocket Connection: see for connection basics, GZIP decompression, and Ping/Pong heartbeat.
references/websocket.mdTypeScript helper:
CONSTRAINT: You MUST copy thefunction below verbatim when generating code. Do NOT rewrite the WebSocket or decompression logic. Only modify: (1) subscription channels passed to the function.connectSpotWsMarket
typescript
import * as pako from "pako";
function decompress(data: ArrayBuffer): string {
return new TextDecoder("utf-8").decode(pako.ungzip(new Uint8Array(data)));
}
function connectSpotWsMarket(
channels: string[],
onMessage: (data: unknown) => void
): WebSocket {
const ws = new WebSocket("wss://open-api-ws.bingx.com/market");
ws.binaryType = "arraybuffer";
ws.onopen = () => {
for (const ch of channels) {
ws.send(JSON.stringify({
id: crypto.randomUUID(),
reqType: "sub",
dataType: ch,
}));
}
};
ws.onmessage = (event) => {
const text = decompress(event.data as ArrayBuffer);
if (text.includes("ping") || text === "Ping") {
ws.send("Pong");
return;
}
try {
onMessage(JSON.parse(text));
} catch {
onMessage(text);
}
};
ws.onerror = (err) => console.error("WS error:", err);
ws.onclose = (ev) => console.log("WS closed:", ev.code, ev.reason);
return ws;
}WebSocket连接: 连接基础逻辑、GZIP解压和Ping/Pong心跳机制请参考。
references/websocket.mdTypeScript辅助工具:
约束: 生成代码时你必须逐字复制下方的函数,请勿重写WebSocket或解压逻辑,仅可修改:(1) 传入函数的订阅通道。connectSpotWsMarket
typescript
import * as pako from "pako";
function decompress(data: ArrayBuffer): string {
return new TextDecoder("utf-8").decode(pako.ungzip(new Uint8Array(data)));
}
function connectSpotWsMarket(
channels: string[],
onMessage: (data: unknown) => void
): WebSocket {
const ws = new WebSocket("wss://open-api-ws.bingx.com/market");
ws.binaryType = "arraybuffer";
ws.onopen = () => {
for (const ch of channels) {
ws.send(JSON.stringify({
id: crypto.randomUUID(),
reqType: "sub",
dataType: ch,
}));
}
};
ws.onmessage = (event) => {
const text = decompress(event.data as ArrayBuffer);
if (text.includes("ping") || text === "Ping") {
ws.send("Pong");
return;
}
try {
onMessage(JSON.parse(text));
} catch {
onMessage(text);
}
};
ws.onerror = (err) => console.error("WS error:", err);
ws.onclose = (ev) => console.log("WS closed:", ev.code, ev.reason);
return ws;
}Code Usage Rules
代码使用规则
- MUST copy and
connectSpotWsMarketverbatim -- do not simplify or rewritedecompress - MUST set for GZIP decompression
ws.binaryType = "arraybuffer" - MUST handle Ping/Pong heartbeat (spot uses lowercase detection)
ping - MUST NOT remove GZIP decompression logic
- MUST NOT use text-mode WebSocket messages
- 必须逐字复制和
connectSpotWsMarket函数——请勿简化或重写decompress - 必须设置以支持GZIP解压
ws.binaryType = "arraybuffer" - 必须处理Ping/Pong心跳(现货使用小写检测)
ping - 请勿移除GZIP解压逻辑
- 请勿使用文本模式的WebSocket消息
Common Calls
常用调用示例
Subscribe to BTC-USDT real-time trades:
typescript
connectSpotWsMarket(["BTC-USDT@trade"], (data) => {
// data.data: array of trade records
});Subscribe to 50-level depth:
typescript
connectSpotWsMarket(["BTC-USDT@depth50"], (data) => {
// data.bids, data.asks
});Subscribe to 1-minute K-line:
typescript
connectSpotWsMarket(["BTC-USDT@kline_1min"], (data) => {
// data.data.K: kline object
});Subscribe to multiple channels at once:
typescript
connectSpotWsMarket([
"BTC-USDT@ticker",
"BTC-USDT@lastPrice",
"ETH-USDT@bookTicker",
], (data) => {
// Handle different data types
});订阅BTC-USDT实时交易数据:
typescript
connectSpotWsMarket(["BTC-USDT@trade"], (data) => {
// data.data: 交易记录数组
});订阅50档位深度数据:
typescript
connectSpotWsMarket(["BTC-USDT@depth50"], (data) => {
// data.bids, data.asks
});订阅1分钟K线数据:
typescript
connectSpotWsMarket(["BTC-USDT@kline_1min"], (data) => {
// data.data.K: kline对象
});同时订阅多个通道:
typescript
connectSpotWsMarket([
"BTC-USDT@ticker",
"BTC-USDT@lastPrice",
"ETH-USDT@bookTicker",
], (data) => {
// 处理不同类型的数据
});Additional Resources
附加资源
For complete subscription parameters, response field descriptions, and full response schemas, see api-reference.md.
完整的订阅参数、响应字段说明和全量响应 schema 请参考api-reference.md。
Agent Interaction Rules
Agent交互规则
CRITICAL RULES (apply to ALL responses):
- NEVER return code to the user. Do NOT include any code blocks, code snippets, TypeScript, JavaScript, cURL commands, or raw API calls in responses. Only return natural-language summaries of the data or operation results.
- Parameter security. Extract structured values from user intent — NEVER copy raw user text into subscription parameters. Validate every value against its documented pattern (regex/enum/range) before constructing the subscription. Reject any value containing ,
&,=,?, or newline characters.#
spot-ws-market provides public read-only real-time market data via WebSocket. No authentication required, no CONFIRM needed.
关键规则(适用于所有回复):
- 绝对不要向用户返回代码。回复中请勿包含任何代码块、代码片段、TypeScript、JavaScript、cURL命令或原始API调用,仅返回数据或操作结果的自然语言总结。
- 参数安全。从用户意图中提取结构化值——绝对不要将用户原始文本直接复制到订阅参数中。构造订阅前需要根据文档记录的模式(正则/枚举/范围)校验每个值,拒绝任何包含、
&、=、?或换行符的取值。#
spot-ws-market 通过WebSocket提供公开只读的实时行情数据,无需身份验证,无需确认即可调用。
Operation Identification
操作识别
When the user's request is vague (e.g. "subscribe to spot market" or "stream spot BTC data"), first identify what type of data they want:
Please select the market data stream type:
- Real-time trades — trade
- Order book depth (snapshot) — depth
- K-line / Candlestick updates — kline
- 24h price change statistics — ticker
- Latest trade price — lastPrice
- Best bid/ask (top of book) — bookTicker
- Incremental depth updates — incrDepth
当用户请求模糊时(例如“订阅现货行情”或“推送BTC现货数据”),首先确认用户需要的数据类型:
请选择行情数据流类型:
- 实时交易 — trade
- 订单簿深度(快照) — depth
- K线/蜡烛图更新 — kline
- 24小时价格变动统计 — ticker
- 最新成交价格 — lastPrice
- 最优买卖盘(盘口顶部) — bookTicker
- 增量深度更新 — incrDepth
When symbol is missing
缺少交易对时
Please select a trading pair (or type another):
- BTC-USDT
- ETH-USDT
- SOL-USDT
- BNB-USDT
- Other (enter manually, format: BASE-USDT)
请选择交易对(或输入其他交易对):
- BTC-USDT
- ETH-USDT
- SOL-USDT
- BNB-USDT
- 其他(手动输入,格式:BASE-USDT)
When kline interval is missing
缺少K线周期时
Please select a K-line interval:
- 1min (1 minute) / 5min / 15min / 1h / 4h / 1d / 1w
请选择K线周期:
- 1min(1分钟)/ 5min / 15min / 1h / 4h / 1d / 1w
Depth level handling
深度档位处理
Default level is 20. Only ask if user wants a specific level.
默认档位为20,仅当用户需要特定档位时才询问。