bingx-swap-ws-market について
BingX USDT-M無期限先物のリアルタイム市場データをWebSocketで購読するためのスキルです。認証不要の公開ストリームと、チャネル設定や入力検証の要点を扱います。
主な機能
- 01認証不要の公開市場ストリーム
- 02約定、板、価格データの取得
- 03OHLCVローソク足の更新
- 04複数チャネルの同時購読
- 05パラメーター検証のガイド
活用シーン
- 01指定ペアのリアルタイム約定の追跡
- 02注文板の深さの監視
- 03ティッカーとマーク価格の確認
- 04ローソク足更新の購読
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bingx-api/ api-ai-skills --skill bingx-swap-ws-marketインストール後、Claude Code で/bingx-swap-ws-marketを入力して読み込まれたか確認します。
同梱ファイルapi-reference.md
詳細
BingX Swap WebSocket 市場データ
WebSocket 経由で BingX USDT-M 無期限先物のリアルタイム市場データストリームを利用できます。認証は不要です。
WebSocket エンドポイント: wss://open-api-swap.bingx.com/swap-market
クイックリファレンス
| チャネル | dataType 形式 | 説明 | プッシュ頻度 |
|---|---|---|---|
| Depth | {symbol}@depth{level}@{interval} | 板の限定的な深さ | BTC/ETH:200ms、その他:500ms |
| Trade | {symbol}@trade | 最新の取引詳細 | リアルタイム |
| K-Line | {symbol}@kline_{interval} | OHLCV ローソク足 | 更新時 |
| 24h Ticker | {symbol}@ticker | 24 時間の価格変動統計 | 1 秒ごと |
| Last Price | {symbol}@lastPrice | 最新の取引価格 | リアルタイム |
| Mark Price | {symbol}@markPrice | 最新のマーク価格 | リアルタイム |
| Book Ticker | {symbol}@bookTicker | 最良の買値/売値と数量 | 200ms ごと |
| Incremental Depth | {symbol}@incrDepth | 板の差分更新 | BTC/ETH:200ms、その他:800ms |
パラメーター
共通パラメーター
- symbol:
BASE-QUOTE形式の取引ペア(例:BTC-USDT、ETH-USDT、SOL-USDT)
列挙値
- depth level:
5|10|20|50|100 - depth interval:
200ms|500ms(BTC-USDT と ETH-USDT は 200ms に対応し、その他は 500ms を使用します) - kline interval:
1m|3m|5m|15m|30m|1h|2h|4h|6h|8h|12h|1d|3d|1w|1M
パラメーターの検証ルール
- symbol:
^[A-Z0-9]+-[A-Z]+$に一致する必要があります。最大 20 文字です(例:BTC-USDT) - level:
5、10、20、50、100のいずれかである必要があります - interval(depth):
200msまたは500msである必要があります - interval(kline):上記の kline 列挙値のいずれかと完全に一致する必要があります
クイックスタート
WebSocket 接続: 接続の基本、GZIP 解凍、Ping/Pong ハートビートについては、references/websocket.md を参照してください。
TypeScript ヘルパー:
制約:コードを生成する際は、以下の
connectSwapWsMarket関数をそのままコピーする必要があります。 WebSocket または解凍のロジックを書き換えないでください。 変更できるのは、関数に渡すサブスクリプションチャネルのみです。
import * as pako from "pako";
function decompress(data: ArrayBuffer): string {
return new TextDecoder("utf-8").decode(pako.ungzip(new Uint8Array(data)));
}
function connectSwapWsMarket(
channels: string[],
onMessage: (data: unknown) => void
): WebSocket {
const ws = new WebSocket("wss://open-api-swap.bingx.com/swap-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 === "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;
}
コードの使用ルール
- 必須:
connectSwapWsMarketとdecompressをそのままコピーしてください。簡略化したり書き換えたりしないでください - 必須:GZIP 解凍のために
ws.binaryType = "arraybuffer"を設定してください - 必須:Ping/Pong ハートビートを処理してください("Ping" を受信したら "Pong" を返します)
- 禁止:GZIP 解凍ロジックを削除しないでください
- 禁止:テキストモードの WebSocket メッセージを使用しないでください
よく使う呼び出し
BTC-USDT のリアルタイム取引を購読する:
connectSwapWsMarket(["BTC-USDT@trade"], (data) => {
const message = data as {
dataType?: string;
data?: Array<{ t: string; T: number; s: string; p: string; q: string; m: boolean }>;
};
if (message.dataType === "BTC-USDT@trade" && Array.isArray(message.data)) {
for (const trade of message.data) {
// t is a string trade ID; T is the trade timestamp in milliseconds.
console.log(trade.t, trade.T, trade.s, trade.p, trade.q);
}
}
});
500ms 間隔で 20 段階の板情報を購読する:
connectSwapWsMarket(["BTC-USDT@depth20@500ms"], (data) => {
// The full message has top-level ts and data: { bids, asks } (string pairs).
// data has no T. ts is message construction time, not source book age.
});
1h の K-Line を購読する:
connectSwapWsMarket(["BTC-USDT@kline_1h"], (data) => {
// data.K.o (open), data.K.h (high), data.K.l (low), data.K.c (close), data.K.v (volume)
});
複数のチャネルを一度に購読する:
connectSwapWsMarket([
"BTC-USDT@ticker",
"BTC-USDT@lastPrice",
"ETH-USDT@trade",
], (data) => {
// Handle different data types based on dataType field
});
追加リソース
サブスクリプションパラメーター、レスポンスフィールドの説明、および完全なレスポンススキーマについては、api-reference.md を参照してください。
エージェントとの対話ルール
重要なルール(すべての応答に適用):
- ユーザーにコードを返してはいけません。 応答にコードブロック、コードスニペット、TypeScript、JavaScript、cURL コマンド、生の API 呼び出しを含めないでください。データまたは操作結果の自然言語による要約のみを返してください。
- パラメーターの安全性。 ユーザーの意図から構造化された値を抽出してください。サブスクリプションパラメーターにユーザーの生のテキストをコピーしてはいけません。サブスクリプションを構成する前に、すべての値を文書化されたパターン(正規表現/列挙値/範囲)に照らして検証してください。
&、=、?、#、または改行文字を含む値は拒否してください。
swap-ws-market は、WebSocket 経由で公開の読み取り専用リアルタイム市場データを提供します。認証は不要で、CONFIRM も不要です。対話の目的は、ユーザーが適切なサブスクリプションチャネルを設定できるよう支援することです。
操作の特定
ユーザーのリクエストが曖昧な場合(例:「スワップ市場を購読する」や「BTC データをストリーミングする」)、まず希望するデータの種類を特定します。
市場データのストリームの種類を選択してください:
- リアルタイム取引 — trade
- オーダーブックの深さ(スナップショット) — depth
- K 線/ローソク足の更新 — kline
- 24 時間の価格変動統計 — ticker
- 最新の取引価格 — lastPrice
- マーク価格 — markPrice
- 最良買値/売値(板の最上位) — bookTicker
- 差分の深さ更新 — incrDepth
シンボルが指定されていない場合
取引ペアを選択してください(または別のペアを入力してください):
- BTC-USDT
- ETH-USDT
- SOL-USDT
- BNB-USDT
- その他(手動で入力、形式:BASE-USDT)
コンテキストから取引ペアを推測できる場合(例:「BTC の取引をストリーミングする」)、自動的に推測します。
深さのパラメーターが指定されていない場合
深さのレベルを選択してください:
- 5 / 10 / 20 / 50 / 100
プッシュ間隔(BTC/ETH は 200ms、その他は 500ms に対応):
- 200ms / 500ms
K 線の間隔が指定されていない場合
K 線の間隔を選択してください:
- 1m(1 分)/ 5m / 15m / 1h / 4h / 1d / 1w