mcpField
B
bingx-standard-trade

bingx-standard-trade

github.com/bingx-apiその他19173 回インストール6 日前に更新
リポジトリ

bingx-standard-trade について

BingXの標準契約におけるポジション、注文履歴、残高を照会するスキルです。パラメーター検証と署名付きの読み取り専用APIリクエストを案内します。

主な機能

  1. 01現在のポジション照会
  2. 02過去の注文検索
  3. 03契約残高の確認
  4. 04署名リクエストの検証

活用シーン

  1. 01ポジションと未実現損益の確認
  2. 02取引ペアの注文確認
  3. 03契約口座の利用可能残高確認

MCP 対応

エージェント向けに認証済みBingX APIの呼び出し方法を説明します。MCPサーバーやクライアント機能についての記載はありません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bingx-api/api-ai-skills --skill bingx-standard-trade

インストール後、Claude Code で/bingx-standard-tradeを入力して読み込まれたか確認します。

同梱ファイルapi-reference.md

詳細

BingX Standard Contract Trading

BingX 標準コントラクト(標準先物)データを取得するための認証済みエンドポイントです。すべてのエンドポイントで HMAC SHA256 署名認証が必要です。

ベース URL: references/base-urls.md を参照 | 認証: references/authentication.md を参照


クイックリファレンス

エンドポイントメソッド説明認証
/openApi/contract/v1/allPositionGET現在のポジションを照会はい
/openApi/contract/v1/allOrdersGET過去の注文を照会はい
/openApi/contract/v1/balanceGET標準コントラクトの残高を照会はい

1. ポジションを照会

GET /openApi/contract/v1/allPosition

標準コントラクト口座の現在のすべてのポジションを照会します。

パラメーター: 共通の署名パラメーター(timestamp、recvWindow)以外に追加のパラメーターはありません。

レスポンス data(配列):

フィールド型説明
symbolstring取引ペア(例:BTC-USDT)
initialMarginnumber証拠金
leveragenumberレバレッジ
unrealizedProfitnumber未実現損益
isolatedbooltrue = 分離マージンモード
entryPricenumber平均建値
positionSidestringポジションの方向:LONG または SHORT
positionAmtnumberポジション数量
currentPricenumber現在価格
timeint64建玉時刻(ms)

2. 過去の注文を照会

GET /openApi/contract/v1/allOrders

標準コントラクト取引ペアの過去の注文を照会します。

パラメーター:

パラメーター型必須説明
symbolstringはい取引ペア(例:BTC-USDT)
orderIdint64いいえ注文 ID フィルター
startTimeint64いいえ開始時刻(ミリ秒)
endTimeint64いいえ終了時刻(ミリ秒)
limitint64いいえ件数(任意)
recvWindowint64いいえリクエストの有効期間(ミリ秒)

レスポンス data(配列):

フィールド型説明
orderIdnumberシステム注文 ID
symbolstring取引ペア
positionSidestringポジションの方向:LONG または SHORT
statusstring注文ステータス(例:CLOSED)
avgPricenumber平均約定価格
cumQuotenumber取引金額
executedQtynumber約定数量
marginnumber証拠金
leveragenumberレバレッジ
isolatedbooltrue = 分離マージンモード
closePricenumber決済価格
positionIdint64ポジション ID
timeint64注文時刻(ms)
updateTimeint64最終更新時刻(ms)

3. 標準コントラクトの残高を照会

GET /openApi/contract/v1/balance

標準コントラクト口座の残高を照会します。

パラメーター: 共通の署名パラメーター(timestamp、recvWindow)以外に追加のパラメーターはありません。

レスポンス data:

フィールド型説明
assetstring資産名
balancestring総残高
crossWalletBalancestringクロスマージンのウォレット残高
crossUnPnlstringクロスマージンの未実現損益
availableBalancestring注文に使用可能な残高
maxWithdrawAmountstring最大振替可能額
marginAvailablebool証拠金として使用可能かどうか
updateTimenumber最終更新タイムスタンプ
パラメーターの検証ルール
  • symbol:^[A-Z0-9]+-[A-Z]+$ に一致する必要があります。最大20文字です(例:BTC-USDT)
  • orderId:指定する場合は、正の整数である必要があります
  • startTime / endTime:ミリ秒単位のUnixタイムスタンプです。endTime は startTime 以上である必要があります
  • limit:正の整数です
  • recvWindow:1~5000 ms の整数です(リプレイ攻撃対策を参照)
  • timestamp:ミリ秒単位のUnix時刻です。サーバー時刻との差が recvWindow 以内である必要があります

クイックスタート

制約:コードを生成する際は、以下の fetchSigned 関数をそのままコピーする必要があります 署名、リクエスト、JSON の解析ロジックを書き換えないでください。変更できるのは、(1)カスタム環境用の BASE URL エントリー、 (2)fetchSigned に渡すビジネスパラメーターのみです。URL エンコードと JSON ボディに対応したクライアント全体については、 references/authentication.mdを参照してください。

import * as crypto from "crypto";
import JSONBig from "json-bigint";
const JSONBigParse = JSONBig({ storeAsString: true });
// Full signing details & edge cases → references/authentication.md
// Domain priority: .com is mandatory primary; .pro is fallback for network/timeout errors ONLY.
const BASE = {
  "prod-live": ["https://open-api.bingx.com", "https://open-api.bingx.pro"],
  "prod-vst":  ["https://open-api-vst.bingx.com", "https://open-api-vst.bingx.pro"],
};
function isNetworkOrTimeout(e: unknown): boolean {
  if (e instanceof TypeError) return true;
  if (e instanceof DOMException && e.name === "AbortError") return true;
  if (e instanceof Error && e.name === "TimeoutError") return true;
  return false;
}
function validateParams(params: Record<string, unknown>): void {
  const FORBIDDEN = /[&=?#\r\n]/;
  for (const [k, v] of Object.entries(params)) {
    const s = String(v);
    if (FORBIDDEN.test(s)) throw new Error(`Param "${k}" has forbidden char in: "${s}"`);
  }
}
async function fetchSigned(env: string, apiKey: string, secretKey: string,
  method: "GET" | "POST" | "DELETE", path: string, params: Record<string, unknown> = {}
) {
  const urls = BASE[env] ?? BASE["prod-live"];
  const all = { ...params, timestamp: Date.now() };
  validateParams(all);
  const qs = Object.keys(all).sort().map(k => `${k}=${all[k]}`).join("&");
  const sig = crypto.createHmac("sha256", secretKey).update(qs).digest("hex");
  const signed = `${qs}&signature=${sig}`;
  for (const base of urls) {
    try {
      const url = method === "POST" ? `${base}${path}` : `${base}${path}?${signed}`;
      const res = await fetch(url, {
        method,
        headers: { "X-BX-APIKEY": apiKey, "X-SOURCE-KEY": "BX-AI-SKILL",
          ...(method === "POST" ? { "Content-Type": "application/x-www-form-urlencoded" } : {}) },
        body: method === "POST" ? signed : undefined,
        signal: AbortSignal.timeout(10000),
      });
      const json = JSONBigParse.parse(await res.text());
      if (json.code !== 0) throw new Error(`BingX error ${json.code}: ${json.msg}`);
      return json.data;
    } catch (e) {
      if (!isNetworkOrTimeout(e) || base === urls[urls.length - 1]) throw e;
    }
  }
}
コードの使用ルール
  • fetchSigned は必ずそのままコピーしてください。簡略化したり、書き換えたりしないでください
  • レスポンスの解析には json-bigint(JSONBigParse.parse)を必ず使用してください。JSON.parse は使用しないでください
  • すべてのリクエストに X-SOURCE-KEY: BX-AI-SKILL ヘッダーを必ず含めてください
  • ドメインのフォールバックループや isNetworkOrTimeout チェックを削除しないでください

よく使う呼び出し

すべてのポジションを照会:

const positions = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/contract/v1/allPosition"
);
// positions[].symbol, positions[].positionAmt, positions[].unrealizedProfit, positions[].entryPrice

BTC-USDT の過去の注文を照会:

const orders = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/contract/v1/allOrders", { symbol: "BTC-USDT", limit: 50 }
);
// orders[].orderId, orders[].status, orders[].avgPrice, orders[].executedQty

口座残高を照会:

const balance = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/contract/v1/balance"
);
// balance.balance, balance.availableBalance, balance.crossUnPnl

追加リソース

パラメーターの詳細な説明と完全なレスポンススキーマについては、api-reference.mdを参照してください。


エージェントとのやり取りのルール

パラメーターのセキュリティ。 ユーザーの意図から構造化された値を抽出してください。API パラメーターにユーザーの生のテキストをコピーしてはなりません。API を呼び出す前に、すべての値が文書化されたパターン(正規表現/列挙値/範囲)に適合することを検証してください。&、=、?、#、または改行文字を含む値は拒否してください。

標準取引エンドポイントはすべて読み取り専用(GET)です。アカウントの状態を変更することはないため、CONFIRM は不要です。

認証情報が必要です。口座が指定されていない場合は、main 口座をデフォルトで使用してください。

ステップ 1 — 照会内容を特定する

ユーザーの意図が不明確な場合は、次の選択肢を提示してください。

照会する情報の種類を選択してください:

  • 現在のポジション/未実現損益 — positions
  • 過去の注文 — allOrders
  • 口座残高/利用可能証拠金 — balance
ステップ 2 — パラメーターを収集する

allOrders では、symbol が必須です。ユーザーが特定のコインについて尋ねた場合は、銘柄を推測してください(例:「BTC の注文」→ BTC-USDT)。startTime、endTime、limit は省略可能なフィルターです。

allPosition と balance では、パラメーターは不要です。

ステップ 3 — 実行して結果を報告する

API 呼び出しを実行し、読みやすい形式で結果を提示してください。

  • positions:ポジションごとに、symbol、side、amount、entry price、未実現損益、レバレッジを表で表示します。
  • allOrders:注文 ID、symbol、side、ステータス、平均約定価格、数量、時刻を表で表示します。
  • balance:合計残高、利用可能残高、クロスの未実現損益を表示します。

コメント