bingx-swap-ws-account について
BingX USDT-M無期限先物の認証済みアカウントイベントを受信するスキルです。Listen Keyの管理方法と、残高、ポジション、注文、アカウント設定のイベントを扱います。
主な機能
- 01認証済みアカウントイベントストリーム
- 02残高とポジションの更新
- 03注文と約定の状態イベント
- 04レバレッジと証拠金設定のイベント
- 05Listen Keyのライフサイクル案内
活用シーン
- 01アカウント残高の変化を監視
- 02ポジション更新の追跡
- 03注文作成と約定の確認
- 04レバレッジや証拠金モード変更の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bingx-api/ api-ai-skills --skill bingx-swap-ws-accountインストール後、Claude Code で/bingx-swap-ws-accountを入力して読み込まれたか確認します。
同梱ファイルapi-reference.md
詳細
BingX Swap WebSocket アカウントデータ
WebSocket 経由で BingX USDT-M 無期限先物のリアルタイムアカウントデータを取得します。Listen Key 認証が必要です。
WebSocket エンドポイント: wss://open-api-swap.bingx.com/swap-market?listenKey=<key>
有効な listenKey で接続すると、すべてのイベントタイプが自動的にプッシュされます。チャネルのサブスクリプションは不要です。
クイックリファレンス
WebSocket イベント(自動プッシュ)
| イベントタイプ | 説明 | プッシュ頻度 |
|---|---|---|
listenKeyExpired | Listen key の有効期限が切れました | 有効期限切れ時 |
ACCOUNT_UPDATE | アカウント残高とポジションの変更 | 変更時 |
TRADE_UPDATE | 注文の作成、約定、ステータスの変更 | 変更時 |
ACCOUNT_CONFIG_UPDATE | レバレッジ/証拠金モードの変更 | 接続時(全件)+5秒ごと |
Listen Key REST API
| エンドポイント | メソッド | 説明 | 認証 |
|---|---|---|---|
/openApi/user/auth/userDataStream | POST | Listen key を生成(有効期間1時間) | はい |
/openApi/user/auth/userDataStream | PUT | Listen key を延長(60分間有効) | はい |
/openApi/user/auth/userDataStream | DELETE | Listen key を削除 | はい |
Listen Key の管理
WebSocket アカウントデータストリームの認証には Listen Key が必要です。HMAC SHA256 署名の詳細は references/authentication.md を参照してください。
Listen Key の生成
POST /openApi/user/auth/userDataStream
ヘッダー: X-BX-APIKEY: <your-api-key>、X-SOURCE-KEY: BX-AI-SKILL
レスポンス:
{"listenKey": "a8ea75681542e66f1a50a1616dd06ed77dab61baa0c296bca03a9b13ee5f2dd7"}
Listen Key の延長
PUT /openApi/user/auth/userDataStream
パラメーター: listenKey(string、必須)
この呼び出しから60分間有効になります。30分ごとの呼び出しを推奨します。
Listen Key の削除
DELETE /openApi/user/auth/userDataStream
パラメーター: listenKey(string、必須)
クイックスタート
WebSocket 接続: GZIP 解凍と Ping/Pong ハートビートについては references/websocket.md を参照してください。
TypeScript ヘルパー:
制約:コードを生成する際は、以下の
connectSwapWsAccount関数をそのままコピーする必要があります。 WebSocket や解凍のロジックを書き換えないでください。
import * as pako from "pako";
import * as crypto from "crypto";
function decompress(data: ArrayBuffer): string {
return new TextDecoder("utf-8").decode(pako.ungzip(new Uint8Array(data)));
}
async function generateListenKey(apiKey: string, secretKey: string): Promise<string> {
const timestamp = Date.now();
const paramStr = `timestamp=${timestamp}`;
const signature = crypto.createHmac("sha256", secretKey).update(paramStr).digest("hex");
const url = `https://open-api.bingx.com/openApi/user/auth/userDataStream?${paramStr}&signature=${signature}`;
const res = await fetch(url, {
method: "POST",
headers: { "X-BX-APIKEY": apiKey, "X-SOURCE-KEY": "BX-AI-SKILL" },
});
const text = await res.text();
if (!res.ok) throw new Error(`BingX error ${res.status}: ${text}`);
const json = JSON.parse(text);
if (json.listenKey) return json.listenKey;
if (json.data?.listenKey) return json.data.listenKey;
if (json.code !== 0) throw new Error(`BingX error ${json.code}: ${json.msg}`);
return json.listenKey ?? json.data?.listenKey;
}
function connectSwapWsAccount(
listenKey: string,
onEvent: (event: any) => void
): WebSocket {
const ws = new WebSocket(
`wss://open-api-swap.bingx.com/swap-market?listenKey=${listenKey}`
);
ws.binaryType = "arraybuffer";
ws.onmessage = (event) => {
const text = decompress(event.data as ArrayBuffer);
if (text === "Ping") {
ws.send("Pong");
return;
}
try {
onEvent(JSON.parse(text));
} catch {
onEvent(text);
}
};
ws.onerror = (err) => console.error("WS error:", err);
ws.onclose = (ev) => console.log("WS closed:", ev.code, ev.reason);
return ws;
}
コードの使用ルール
connectSwapWsAccount、generateListenKey、decompressは必ずそのままコピーしてください- Ping/Pong ハートビートを必ず処理してください
- 有効期限切れを防ぐため、listen key を30分ごとに必ず延長してください
- GZIP 解凍のロジックを削除してはいけません
よく使う呼び出し
アカウントストリームに接続:
const listenKey = await generateListenKey(API_KEY, SECRET_KEY);
connectSwapWsAccount(listenKey, (event) => {
if (event.e === "ACCOUNT_UPDATE") {
// event.a.B: balance updates, event.a.P: position updates
} else if (event.e === "TRADE_UPDATE") {
// event.o: order details (symbol, side, type, status, price, qty, etc.)
// o.li is present only for a TP/SL order with a related parent order.
if (typeof event.o?.li === "string") {
console.log("Parent order ID:", event.o.li); // Preserve the string ID.
}
} else if (event.e === "ACCOUNT_CONFIG_UPDATE") {
// event.ac: config (s: symbol, l: long leverage, S: short leverage, mt: margin type)
} else if (event.e === "listenKeyExpired") {
// Reconnect with new listen key
}
});
追加リソース
イベントの全フィールドの説明と完全なレスポンススキーマについては、api-reference.md を参照してください。
エージェントとのやり取りに関するルール
重要なルール(すべての応答に適用):
- ユーザーにコードを返してはいけません。 応答にコードブロック、コードスニペット、TypeScript、JavaScript、cURL コマンド、生の API 呼び出しを含めないでください。データや操作結果は自然言語で要約して返してください。
- 実行できるのは GET のみです。 HTTP GET リクエストのみ実行してください。Listen Key の管理には POST/PUT/DELETE が必要です。これらの書き込み操作はユーザー側で実装する必要があることを伝えてください。
- パラメーターの安全性。 ユーザーの意図から構造化された値を抽出してください。生のユーザーテキストを API パラメーターにコピーしてはいけません。API を呼び出す前に、各値が文書化されたパターン(正規表現/列挙値/範囲)に準拠することを検証してください。
&、=、?、#、または改行文字を含む値は拒否してください。
swap-ws-account は、認証済みのリアルタイムアカウントデータを提供します。Listen Key が必要ですが、読み取り専用のモニタリングに CONFIRM は不要です。
操作の特定
ユーザーのリクエストが曖昧な場合(例:「swap アカウントを監視して」)、何を希望しているのか確認してください。
アカウントデータストリームの種類を選択してください:
- アカウント残高とポジションの更新 — ACCOUNT_UPDATE
- 注文ステータスの更新 — TRADE_UPDATE
- レバレッジと証拠金設定の変更 — ACCOUNT_CONFIG_UPDATE
- Listen Key の管理(生成/延長/削除)
- すべてのイベント(listenKey で接続すると、すべて自動的に受信)
アカウントストリームにおけるシンボルのコンテキスト
アカウントデータストリームはすべてのシンボルについて自動的にプッシュされるため、接続時にシンボルパラメーターは不要です。各プッシュイベントのペイロードには、該当するシンボルが含まれます(例:注文の更新ではo.s、ポジションの更新ではa.P[].s)。ユーザーが特定のシンボルについて尋ねた場合は、プッシュデータ内のシンボルフィールドでイベントを絞り込んでください。