From bingx-ai-skills
Places multi-level limit orders near best price using orderbook depth, dynamically adjusting as price moves. Saves taker fees and reduces market impact. Depends on bingx-swap-market, bingx-swap-trade, bingx-swap-account.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bingx-ai-skills:bingx-maker-entryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Base URLs:** see [`references/base-urls.md`](../references/base-urls.md) | **Authentication:** see [`references/authentication.md`](../references/authentication.md)
Base URLs: see references/base-urls.md | Authentication: see references/authentication.md
| Endpoint | Method | Description | Authentication |
|---|---|---|---|
/openApi/swap/v2/quote/depth | GET | Order book depth | Yes |
/openApi/swap/v2/trade/order | POST | Place limit order | Yes |
/openApi/swap/v2/trade/order | DELETE | Cancel order | Yes |
Base URLs: see references/base-urls.md
TypeScript helper:
CONSTRAINT: You MUST copy the
fetchSignedfunction below verbatim when generating code. Do NOT rewrite the signing, request, or JSON parsing logic. Only modify: (1)BASEURL entries for custom environments, (2) business parameters passed tofetchSigned.
import * as crypto from "crypto";
import JSONBig from "json-bigint";
const JSONBigParse = JSONBig({ storeAsString: true });
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;
}
}
}
Fetch order book depth for maker entry planning:
const depth = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/swap/v2/quote/depth", { symbol: "BTC-USDT", limit: 20 }
);
// depth.bids: [price, qty][], depth.asks: [price, qty][]
Activate this skill when the user says any of the following:
Extract from user input:
| Parameter | Default | Description |
|---|---|---|
| symbol | - | Trading pair (must be specified) |
| direction | - | LONG / SHORT (must be specified or inferred from context) |
| amount | - | Position size in USDT (must be specified) |
| leverage | User's current leverage | Leverage multiplier |
| levels | 3 | Number of order levels (1-5) |
| spread | auto | Level spacing; auto calculates based on bid-ask spread |
| timeout | 300 | Timeout in seconds; cancel remaining orders if not fully filled |
If symbol, direction, or amount cannot be inferred from input or context, ask the user — do not assume.
Integration with bingx-trading-plan: if the user says "use the plan from earlier", extract the entry range and direction from the trade plan in context and convert to order parameters.
Present and confirm with the user:
Execute only after explicit user confirmation. Do NOT place orders without confirmation.
Call bingx-swap-market to fetch order book depth:
GET /openApi/swap/v2/quote/depth symbol={symbol}, limit=20
Analyze best bid/ask prices, bid-ask spread, and liquidity distribution across levels.
python3 scripts/maker.py \
--mode plan \
--symbol {symbol} \
--direction {direction} \
--amount {amount} \
--levels {levels} \
--orderbook '{orderbook_json}'
Outputs an order plan JSON (prices, amounts, estimated avg price, estimated fee savings).
| Scenario | Action |
|---|---|
| All filled | Output fill summary, end |
| Partially filled + timeout | Cancel remaining orders, report filled portion, ask if user wants to add more |
| Nothing filled + timeout | Cancel all orders, notify user |
Any exit path (success/timeout/error) must ensure no unmanaged open orders remain.
**Maker Order Plan**
{symbol} {direction}, total {amount} USDT, {leverage}x leverage
Level 1 ${price_1} {amount_1} USDT 40%
Level 2 ${price_2} {amount_2} USDT 30%
Level 3 ${price_3} {amount_3} USDT 20%
Estimated avg price: ${estimated_avg} (vs market ${market_price})
Estimated savings: Maker 0.02% vs Taker 0.05%, save approx ${fee_saved}
Timeout: {timeout/60} min, remaining orders cancelled automatically on timeout
**Confirm execution? (yes/no)**
**Orders In Progress 🔄**
Level 1: ${price_1} × {amount_1}U — ✅ Filled
Level 2: ${price_2} × {amount_2}U — ⏳ Pending
Level 3: ${price_3} × {amount_3}U — ⏳ Pending
Filled: {filled} / {total} USDT ({pct}%)
Time remaining: {remaining}
**Maker Orders Complete ✅**
{symbol} {direction} position opened
- Avg fill price: ${avg_price}
- Total filled: {filled} / {total} USDT
- Levels filled: {filled_levels} / {levels}
- Fee saved: approx ${fee_saved} (vs market order)
{if partially filled} To fill the remaining {remaining}U, say "continue placing"
Parameter security. Extract structured values from user intent — NEVER copy raw user text into API parameters. Validate symbol, direction (LONG/SHORT), and amount before use.
Order book queries are read-only and require no CONFIRM. All order placements require explicit user confirmation.
If symbol, direction, or amount cannot be inferred from context, ask the user — do not assume.
npx claudepluginhub bingx-api/api-ai-skills --plugin bingx-ai-skillsHandles BingX spot trading: place/cancel/query orders, view trade fills, manage OCO orders, check commission rates. For BingX spot order placement, cancellation, history, or OCO queries.
Places and cancels perpetual futures orders on Phoenix DEX with pre-trade checks, TP/SL attachments, and paper/live mode support.
Places, cancels, lists, and resumes limit orders on OKX Agentic Wallet. Supports buy dip, take profit, stop loss, and chase high strategies with automatic execution via TEE.