mcpField
B
bingx-standard-trade

bingx-standard-trade

github.com/bingx-api其他19173 次安装6 天前更新
代码仓库

关于 bingx-standard-trade

用于查询 BingX 标准合约持仓、历史订单和余额的 Skill,说明如何校验参数并发起签名的只读 API 请求。

主要功能

  1. 01查询当前持仓
  2. 02检索历史订单
  3. 03查看合约余额
  4. 04校验签名请求参数

适用场景

  1. 01查看持仓及未实现盈亏
  2. 02检查某交易对的订单
  3. 03查询合约可用余额

MCP 相关

该 Skill 为 Agent 提供经过认证的 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 标准合约交易

用于获取 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(数组):

字段类型描述
symbol字符串交易对,例如 BTC-USDT
initialMargin数字保证金
leverage数字杠杆
unrealizedProfit数字未实现盈亏
isolated布尔值true = 逐仓保证金模式
entryPrice数字平均入场价格
positionSide字符串持仓方向:LONG 或 SHORT
positionAmt数字持仓数量
currentPrice数字当前价格
timeint64开仓时间(毫秒)

2. 查询历史订单

GET /openApi/contract/v1/allOrders

查询标准合约交易对的历史订单。

参数:

参数类型必填描述
symbol字符串是交易对,例如 BTC-USDT
orderIdint64否订单 ID 筛选条件
startTimeint64否开始时间(毫秒)
endTimeint64否结束时间(毫秒)
limitint64否数量,可选
recvWindowint64否请求有效时间窗口(毫秒)

响应 data(数组):

字段类型描述
orderId数字系统订单 ID
symbol字符串交易对
positionSide字符串持仓方向:LONG 或 SHORT
status字符串订单状态,例如 CLOSED
avgPrice数字平均成交价格
cumQuote数字成交金额
executedQty数字已成交数量
margin数字保证金
leverage数字杠杆
isolated布尔值true = 逐仓保证金模式
closePrice数字平仓价格
positionIdint64持仓 ID
timeint64订单时间(毫秒)
updateTimeint64最后更新时间(毫秒)

3. 查询标准合约余额

GET /openApi/contract/v1/balance

查询标准合约账户余额。

参数: 除通用签名参数(timestamp、recvWindow)外,无其他参数。

响应 data:

字段类型描述
asset字符串资产名称
balance字符串总余额
crossWalletBalance字符串全仓钱包余额
crossUnPnl字符串全仓未实现盈亏
availableBalance字符串可用于下单的余额
maxWithdrawAmount字符串最大可划转金额
marginAvailable布尔值是否可用作保证金
updateTime数字最后更新时间戳
参数验证规则
  • 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。


Agent 交互规则

参数安全。 从用户意图中提取结构化值,绝不能将用户原始文本直接复制到 API 参数中。调用 API 前,根据文档规定的模式(正则表达式/枚举/范围)验证每个值。拒绝任何包含 &、=、?、# 或换行符的值。

所有标准交易端点均为只读(GET)。无需 CONFIRM——它们绝不会修改账户状态。

需要凭据。如果未指定账户,则默认使用 main 账户。

第 1 步 — 确认查询内容

如果用户的意图不明确,请提供以下选项:

请选择要查询的信息类型:

  • 当前持仓/未实现盈亏 — positions
  • 历史订单 — allOrders
  • 账户余额/可用保证金 — balance
第 2 步 — 收集参数

对于 allOrders,必须提供 symbol。如果用户询问某个特定币种,请推断 symbol(例如,“BTC 订单” -> BTC-USDT)。可选筛选条件包括 startTime、endTime 和 limit。

对于 allPosition 和 balance,无需参数。

第 3 步 — 执行并报告

执行 API 调用,并以易读的格式呈现结果:

  • positions:为每个持仓显示一张表格,包含:symbol、方向、数量、入场价格、未实现盈亏、杠杆。
  • allOrders:显示一张表格,包含:订单 ID、symbol、方向、状态、平均成交价格、数量、时间。
  • balance:显示总余额、可用余额、全仓未实现盈亏。

评论

支持 Markdown