bingx-swap-trade について
HMAC SHA256認証のエンドポイントでBingXの無期限先物取引を操作するエージェント向けスキルです。注文の発注・取消、注文照会、ポジションや証拠金の設定を扱います。
主な機能
- 01単一注文と一括注文の発注
- 02注文テストと取消の管理
- 03注文、約定、ポジション履歴の照会
- 04レバレッジ、証拠金、ポジションモードの変更
- 05TWAP注文の作成と管理
活用シーン
- 01無期限先物の成行注文または指値注文の送信
- 02損切り・利確の設定と未約定注文の取消
- 03注文状況と過去の約定の確認
- 04レバレッジまたは証拠金モードの変更
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bingx-api/ api-ai-skills --skill bingx-swap-tradeインストール後、Claude Code で/bingx-swap-tradeを入力して読み込まれたか確認します。
同梱ファイルapi-reference.md
詳細
BingX Swap Trade
BingX 無期限先物の認証済み取引エンドポイントです。すべてのエンドポイントで HMAC SHA256 署名認証が必要です。
ベース URL: references/base-urls.md を参照 | 認証: references/authentication.md を参照
クイックリファレンス
| エンドポイント | メソッド | 説明 | 認証 |
|---|---|---|---|
/openApi/swap/v2/trade/order | POST | 新しい注文を発注 | はい |
/openApi/swap/v2/trade/order/test | POST | 注文発注をテスト(約定なし) | はい |
/openApi/swap/v2/trade/batchOrders | POST | 複数の注文を発注(バッチ、最大 5 件) | はい |
/openApi/swap/v2/trade/order | DELETE | 注文をキャンセル | はい |
/openApi/swap/v2/trade/batchOrders | DELETE | 複数の注文をキャンセル | はい |
/openApi/swap/v2/trade/allOpenOrders | DELETE | すべての未約定注文をキャンセル | はい |
/openApi/swap/v2/trade/cancelAllAfter | POST | 自動キャンセルのカウントダウン(キルスイッチ) | はい |
/openApi/swap/v2/trade/closeAllPositions | POST | すべてのポジションを決済 | はい |
/openApi/swap/v1/trade/closePosition | POST | positionId でポジションを決済 | はい |
/openApi/swap/v2/trade/positionMargin | POST | 分離マージン額を調整 | はい |
/openApi/swap/v1/positionMargin/history | GET | マージン調整履歴を照会 | はい |
/openApi/swap/v2/trade/openOrders | GET | 未約定注文を照会 | はい |
/openApi/swap/v2/trade/openOrder | GET | 単一の未約定注文を照会 | はい |
/openApi/swap/v2/trade/order | GET | ID で注文を照会 | はい |
/openApi/swap/v1/trade/fullOrder | GET | 注文の詳細を照会 | はい |
/openApi/swap/v2/trade/allOrders | GET | すべての過去の注文を照会 | はい |
/openApi/swap/v2/trade/forceOrders | GET | 清算/ADL 注文を照会 | はい |
/openApi/swap/v2/trade/allFillOrders | GET | 取引の約定履歴を照会 | はい |
/openApi/swap/v2/trade/fillHistory | GET | 過去の取引約定の詳細を照会 | はい |
/openApi/swap/v1/twap/openOrders | GET | 未約定の TWAP 注文を照会 | はい |
/openApi/swap/v1/twap/historyOrders | GET | TWAP 注文履歴を照会 | はい |
/openApi/swap/v1/twap/orderDetail | GET | TWAP 注文の詳細を照会 | はい |
/openApi/swap/v1/twap/order | POST | TWAP 注文を作成 | はい |
/openApi/swap/v1/twap/cancelOrder | POST | TWAP 注文をキャンセル | はい |
/openApi/swap/v1/trade/positionHistory | GET | ポジション履歴を照会 | はい |
/openApi/swap/v1/maintMarginRatio | GET | 維持マージン比率を照会 | はい |
/openApi/swap/v2/trade/marginType | GET | マージンタイプを照会 | はい |
/openApi/swap/v2/trade/marginType | POST | マージンタイプを設定(ISOLATED/CROSSED) | はい |
/openApi/swap/v2/trade/leverage | GET | 現在のレバレッジを照会 | はい |
/openApi/swap/v2/trade/leverage | POST | レバレッジを設定 | はい |
/openApi/swap/v1/positionSide/dual | GET | ポジションモードを照会 | はい |
/openApi/swap/v1/positionSide/dual | POST | ポジションモードを設定 | はい |
/openApi/swap/v1/trade/assetMode | GET | 資産モードを照会(単一/マルチアセット) | はい |
/openApi/swap/v1/trade/assetMode | POST | 資産モードを設定(単一/マルチアセット) | はい |
/openApi/swap/v1/trade/multiAssetsRules | GET | マルチアセットのマージンルールを照会 | はい |
/openApi/swap/v1/user/marginAssets | GET | マルチアセットモードのマージン資産を照会 | はい |
/openApi/swap/v1/trade/autoAddMargin | POST | ポジションの自動マージン追加を設定 | はい |
/openApi/swap/v1/trade/reverse | POST | ポジションを反転(ワンクリックで反対売買) | はい |
/openApi/swap/v1/trade/cancelReplace | POST | 注文をキャンセルして置き換え(アトミック) | はい |
/openApi/swap/v1/trade/batchCancelReplace | POST | 複数の注文を一括でキャンセルして置き換え | はい |
/openApi/swap/v1/trade/amend | POST | 既存の未約定注文を変更 | はい |
/openApi/swap/v2/trade/getVst | POST | VST(仮想シミュレーション取引)を取得 | はい |
パラメーター
注文パラメーター
- symbol:
BASE-QUOTE形式の取引ペア(例:BTC-USDT、ETH-USDT) - side:注文方向 —
BUYまたはSELL - positionSide:ポジション方向 —
LONGまたはSHORT(ヘッジモード)/BOTH(ワンウェイモード) - type:注文タイプ(列挙値を参照)
- quantity:コイン単位の注文数量(例:BTC-USDT の場合は
0.01)。closePosition: trueの場合も、STOP_MARKETとTAKE_PROFIT_MARKETでは必須です - price:指値価格(
LIMIT、STOP、TAKE_PROFITタイプで必須) - stopPrice:トリガー価格(
STOP_MARKET、STOP、TAKE_PROFIT_MARKET、TAKE_PROFITで必須) - timeInForce:
GTC|IOC|FOK|PostOnly— デフォルトはGTC。LIMITタイプでは必須です - clientOrderId:カスタム注文 ID。1~40 文字(小文字に変換されます)
- recvWindow:リクエストの有効期間(ミリ秒、最大 60000)
- orderId:システム注文 ID(キャンセル/照会操作用)
- workingType:条件付き注文のトリガーに使用する価格ソース —
MARK_PRICE(マーク価格)またはCONTRACT_PRICE(最終約定価格、デフォルト) - stopGuaranteed:
true|false— 損切り注文の約定が保証されるかどうか。保証付きストップ注文には追加手数料が発生する場合があります - closePosition:
true|false— トリガー発動時にポジション数量を全量決済します。STOP_MARKETとTAKE_PROFIT_MARKETのみでサポートされます。quantityとstopPriceは引き続き必須です。reduceOnlyと併用しないでください - reduceOnly:
true|false— ポジションサイズを減らすことのみが可能な注文です(増やすことはできません)。ヘッジモードではこのパラメーターを送信しないでください - activationPrice:
TRAILING_STOP_MARKET注文の有効化価格(任意。省略した場合は現在の市場価格がデフォルト値になります) - priceRate:
TRAILING_STOP_MARKET/TRAILING_TP_SL注文のトレーリング幅(例:0.05= 5%) - stopLoss:JSON 文字列のクエリパラメーター —
MARKET/LIMIT注文に損切りを設定します。ネストされたオブジェクトを先に作成して検証し、その後JSON.stringifyを一度だけ呼び出してください - takeProfit:JSON 文字列のクエリパラメーター —
MARKET/LIMIT注文に利確を設定します。ネストされたオブジェクトを先に作成して検証し、その後JSON.stringifyを一度だけ呼び出してください
ポジションパラメーター
- leverage:整数のレバレッジ倍率(例:
10、20、50) - marginType:
ISOLATEDまたはCROSSED - dualSidePosition:
"true"(ヘッジモード)または"false"(ワンウェイモード) - positionId:ポジション ID 文字列。通常のヘッジモード注文では不要です。分離アイソレートモードでポジションを決済する場合、およびポジションを明示的に指定するエンドポイントでは必須です
- amount:USDT 単位の証拠金調整額(
positionMarginエンドポイントで使用) - direction_type:
1(証拠金を追加)または2(証拠金を減らす)(positionMarginエンドポイントで使用)
列挙値
type(注文タイプ):
MARKET— 成行注文(最良価格で即時に約定します。ここにstopLoss/takeProfitオブジェクトを設定します)LIMIT— 指値注文(priceとtimeInForceが必要です。ここにstopLoss/takeProfitオブジェクトを設定します)STOP_MARKET— 損切り成行注文(stopPriceでトリガーされ、成行注文として執行されます)STOP— 損切り指値注文(stopPriceでトリガーされ、priceの指値注文として執行されます)TAKE_PROFIT_MARKET— 利確成行注文(stopPriceでトリガーされ、成行注文として執行されます)TAKE_PROFIT— 利確指値注文(stopPriceでトリガーされ、priceの指値注文として執行されます)TRAILING_STOP_MARKET— トレーリングストップ成行注文。priceRate(必須)と任意のactivationPriceを使用しますTRAILING_TP_SL— 既存のポジション用トレーリング TP/SL。symbolとpositionSideを介してポジションに紐付け、priceRateを使用します
side:BUY | SELL
positionSide:LONG | SHORT | BOTH
marginType:ISOLATED | CROSSED
timeInForce:GTC | IOC | FOK | PostOnly
workingType(条件付き注文のトリガー価格ソース):
MARK_PRICE— トリガー条件の判定にマーク価格を使用しますCONTRACT_PRICE— 最終約定価格を使用します(デフォルト)
ストップロス/テイクプロフィットのオブジェクト構造
MARKET または LIMIT 注文に stopLoss または takeProfit を付ける場合:
{
"stopLoss": {
"type": "STOP_MARKET", // "STOP_MARKET" or "STOP"
"stopPrice": 29000, // required: trigger price
"price": 28900, // required only for type "STOP" (limit execution price)
"workingType": "MARK_PRICE", // "MARK_PRICE" or "CONTRACT_PRICE"
"stopGuaranteed": false // true = guaranteed execution (extra fee may apply)
},
"takeProfit": {
"type": "TAKE_PROFIT_MARKET", // "TAKE_PROFIT_MARKET" or "TAKE_PROFIT"
"stopPrice": 35000, // required: trigger price
"price": 35100, // required only for type "TAKE_PROFIT" (limit execution price)
"workingType": "MARK_PRICE",
"stopGuaranteed": false
}
}
制約:
stopLoss/takeProfitオブジェクトは、MARKETまたはLIMIT注文タイプでのみサポートされます。STOP_MARKET、STOP、TAKE_PROFIT_MARKET、TAKE_PROFIT、TRAILING_STOP_MARKET、TRAILING_TP_SLでは使用できません。
外側の stopLoss と takeProfit の値は、JSON 文字列を含むクエリパラメーターです。その JSON 内では、stopPrice と省略可能な price は、引用符で囲んだ数値文字列ではなく、JSON の数値である必要があります。{"stopPrice":"63538.3"} は絶対に送信しないでください。
パラメーターの検証ルール
不要な API エラーを避けるため、リクエストを送信する前にクライアント側でパラメーターを検証してください。
- symbol:
^[A-Z0-9]+-[A-Z]+$に一致する必要があります。最大 20 文字です(例:BTC-USDT)。 - quantity:正の数(> 0)である必要があります。最大精度は銘柄の契約仕様によって異なります。
- price:指定する場合は、正の数(> 0)である必要があります。
- stopPrice:指定する場合は、正の数(> 0)である必要があります。現在の市場価格とは異なる値にしてください。
- stopLoss.stopPrice / takeProfit.stopPrice:JSON の数値が必須です。
Number(...)で変換し、その後、有限値かつ 0 より大きいことを確認してください。 - stopLoss.price / takeProfit.price:省略可能な JSON の数値です。指定する場合は、
Number(...)で変換し、その後、有限値かつ 0 より大きいことを確認してください。 - stopLoss / takeProfit のシリアライズ:シリアライズする前に、ネストされたオブジェクトを検証してください。署名対象のクエリ値は、
JSON.stringify(...)の結果と完全に一致している必要があります。 - leverage:正の整数です。範囲は銘柄によって異なります(BTC-USDT では通常 1~125)。
- clientOrderId:英数字のみ、1~40 文字です。パターンは
^[a-zA-Z0-9]{1,40}$で、特殊文字は使用できません。 - priceRate:トレーリングコールバック率です。0 < 値 ≤ 1 を満たす必要があります(例:
0.05= 5%)。 - recvWindow:整数、1~5000 ms です。できる限り小さくしてください(リプレイ攻撃対策を参照)。
- timestamp:ミリ秒単位の Unix 時刻です。サーバー時刻との差が
recvWindow内である必要があります。
クイックスタート
制約: コードを生成する際は、以下の
fetchSigned関数をそのままコピーする必要があります。 署名、リクエスト、JSON 解析のロジックを書き換えないでください。変更できるのは、(1)カスタム環境向けのBASEURL エントリー、(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 toPositiveNumber(value: unknown, field: string): number {
const numberValue = Number(value);
if (!Number.isFinite(numberValue) || numberValue <= 0) {
throw new Error(`${field} must be a finite positive number`);
}
return numberValue;
}
function normalizeAttachedOrder(
key: "stopLoss" | "takeProfit", value: unknown
): string {
let parsed: unknown = value;
if (typeof value === "string") {
try { parsed = JSON.parse(value); }
catch { throw new Error(`${key} must be valid JSON`); }
}
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
throw new Error(`${key} must be an object or a JSON object string`);
}
const nested = { ...(parsed as Record<string, unknown>) };
const allowedTypes = key === "stopLoss"
? new Set(["STOP_MARKET", "STOP"])
: new Set(["TAKE_PROFIT_MARKET", "TAKE_PROFIT"]);
if (typeof nested.type !== "string" || !allowedTypes.has(nested.type)) {
throw new Error(`${key}.type is invalid`);
}
nested.stopPrice = toPositiveNumber(nested.stopPrice, `${key}.stopPrice`);
if (nested.price !== undefined) {
nested.price = toPositiveNumber(nested.price, `${key}.price`);
}
if (nested.workingType !== undefined &&
nested.workingType !== "MARK_PRICE" &&
nested.workingType !== "CONTRACT_PRICE") {
throw new Error(`${key}.workingType is invalid`);
}
if (nested.stopGuaranteed !== undefined &&
typeof nested.stopGuaranteed !== "boolean") {
throw new Error(`${key}.stopGuaranteed must be a boolean`);
}
return JSON.stringify(nested);
}
function normalizeParams(params: Record<string, unknown>): Record<string, unknown> {
const normalized = { ...params };
if (normalized.price !== undefined) {
normalized.price = toPositiveNumber(normalized.price, "price");
}
for (const key of ["stopLoss", "takeProfit"] as const) {
if (normalized[key] !== undefined) {
normalized[key] = normalizeAttachedOrder(key, normalized[key]);
}
}
return normalized;
}
function serializeParamValue(value: unknown): string {
if (value !== null && typeof value === "object") return JSON.stringify(value);
return String(value);
}
function validateParams(params: Record<string, unknown>): void {
const FORBIDDEN = /[&=?#\r\n]/;
for (const [k, v] of Object.entries(params)) {
const s = serializeParamValue(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 normalized = normalizeParams(params);
const all = { ...normalized, timestamp: Date.now() };
validateParams(all);
const qs = Object.keys(all).sort()
.map(k => `${k}=${serializeParamValue(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チェックを削除しないでください。 - 必須: タイムスタンプと署名を作成する前に、すべてのビジネスパラメーターを正規化してシリアライズしてください。パラメーターに変更があった場合は、以前のタイムスタンプ/署名を破棄し、新しいリクエストに署名してください。
- 禁止: オブジェクトの値を
${params[k]}で直接補間しないでください。オブジェクトの値はJSON.stringifyでシリアライズする必要があります。そうしないと、[object Object]になります。
よく使う呼び出し
成行買い注文を出す:
const order = await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/swap/v2/trade/order", {
symbol: "BTC-USDT",
side: "BUY",
positionSide: "LONG",
type: "MARKET",
quantity: 0.01,
}
);
// order.orderId, order.status
ストップロスを付けた成行買い注文を出す:
const rawStopPrice = "63538.3";
const stopPrice = Number(rawStopPrice);
if (!Number.isFinite(stopPrice) || stopPrice <= 0) {
throw new Error("stopLoss.stopPrice must be a finite positive number");
}
const order = await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/swap/v2/trade/order", {
symbol: "BTC-USDT",
side: "BUY",
positionSide: "BOTH",
type: "MARKET",
quantity: 0.0004,
recvWindow: 5000,
stopLoss: JSON.stringify({
type: "STOP_MARKET",
stopPrice,
workingType: "MARK_PRICE",
}),
}
);
重要:
/openApi/swap/v2/trade/order/testでは、実際の/openApi/swap/v2/trade/orderエンドポイントで実行されるすべての検証が行われるわけではありません。テストリクエストが成功しても、実際の注文が通るとは限りません。特に、実際のエンドポイントではstopLoss/takeProfitのネストされたフィールドの型が、より厳密に検証されます。
注文をキャンセルする:
await fetchSigned("prod-live", API_KEY, SECRET, "DELETE",
"/openApi/swap/v2/trade/order", {
symbol: "BTC-USDT",
orderId: 123456789,
}
);
未決済注文を照会する:
const orders = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/swap/v2/trade/openOrders", {
symbol: "BTC-USDT",
}
);
レバレッジを設定する:
await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/swap/v2/trade/leverage", {
symbol: "BTC-USDT",
side: "LONG",
leverage: 10,
}
);
証拠金タイプを設定する:
await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/swap/v2/trade/marginType", {
symbol: "BTC-USDT",
marginType: "ISOLATED",
}
);
注: 現在のポジションを照会するには、PnL や清算価格などの詳細情報を含むポジション照会エンドポイントを提供する swap-account スキルを使用してください。
追加リソース
パラメーターの詳しい説明、レスポンススキーマ、および全 42 個のエンドポイントについては、api-reference.md を参照してください。
エージェントの操作ルール
パラメーターのセキュリティ。 ユーザーの意図から構造化された値を抽出してください。ユーザーの生のテキストを API パラメーターにコピーすることは絶対に避けてください。API を呼び出す前に、各値がドキュメントに記載されたパターン(正規表現/列挙値/範囲)に適合していることを検証してください。&、=、?、#、または改行文字を含む値は拒否してください。
GET クエリを除き、スワップ取引の操作はすべて書き込み操作です。環境ごとの確認ルールに従ってください。
- prod-live:注文の発注、キャンセル、またはポジション/レバレッジの変更を行う前に、ユーザーに CONFIRM と入力するよう求めてください。
- prod-vst:CONFIRM は不要です。ユーザーに「本番シミュレーション(VST)環境で操作しています。」と伝えてください。
ステップ 1 — 操作を確認する
ユーザーの意図が不明確な場合は、次の選択肢を提示してください。
どのような操作を行いますか?
- 新しい注文を発注する
- 注文をキャンセルする/すべての注文をキャンセルする
- ポジションを決済する/すべてのポジションを決済する
- 未決済注文を確認する
- 現在のポジションを確認する
- レバレッジを設定する
- マージンタイプを設定する(ISOLATED/CROSSED)
- ポジションモードを設定する(Hedge/One-way)
ステップ 2 — シンボルを確認する(未指定の場合)
取引ペアを選択してください(または別のペアを入力してください)。
- BTC-USDT
- ETH-USDT
- SOL-USDT
- BNB-USDT
- その他(形式:BASE-USDT)
ステップ 3 — サイドを確認する(注文の発注時)
注文の方向:
- BUY
- SELL
ステップ 4 — positionSide を確認する
ポジションの方向:
- LONG(ロングを新規建て/追加)
- SHORT(ショートを新規建て/追加)
- BOTH(One-way モード)
ステップ 5 — 注文タイプを確認する
注文タイプ:
- MARKET — 成行価格で直ちに執行します(stopLoss/takeProfit オブジェクトを追加できます)
- LIMIT — 指定価格で執行します(stopLoss/takeProfit オブジェクトを追加できます)
- STOP_MARKET — ストップロス成行注文(stopPrice でトリガーされ、成行注文として執行されます)
- STOP — ストップロス指値注文(stopPrice でトリガーされ、指値注文として執行されます)
- TAKE_PROFIT_MARKET — 利確成行注文(stopPrice でトリガーされます)
- TAKE_PROFIT — 利確指値注文(stopPrice でトリガーされ、指値注文として執行されます)
- TRAILING_STOP_MARKET — 新しいポジション向けのトレーリングストップ(priceRate が必要。activationPrice は任意)
- TRAILING_TP_SL — 既存ポジション向けのトレーリング TP/SL(symbol と positionSide で関連付け。priceRate が必要)
ステップ 6 — 数量と価格を確認する
- 数量はコイン単位で尋ねてください(例:BTC-USDT の場合は 0.01 BTC)。
STOP_MARKETとTAKE_PROFIT_MARKETでは、closePosition: trueを使用する場合も数量が必須です。 - タイプが
LIMIT、STOP、またはTAKE_PROFITの場合は、priceも尋ねてください。 - タイプが
STOP_MARKET、STOP、TAKE_PROFIT_MARKET、またはTAKE_PROFITの場合は、stopPriceも尋ねてください。 - タイプが
TRAILING_STOP_MARKETまたはTRAILING_TP_SLの場合は、priceRate(例:0.05 = 5%)を尋ね、必要に応じてactivationPriceも尋ねてください。 - タイプが
MARKETまたはLIMITの場合は、必要に応じてstopLossおよび/またはtakeProfitオブジェクトの追加を提案してください(トリガー価格とタイプを尋ねてください)。
任意の高度なパラメーター(関連する場合、またはユーザーから言及があった場合のみ尋ねてください):
workingType:トリガー価格のソース —MARK_PRICEまたはCONTRACT_PRICE(デフォルト)reduceOnly:ポジションサイズを減らす場合にのみ注文が執行されるようにするにはtrueを指定します。Hedge モードでは送信しないでください。closePosition:トリガー時にポジション全体を決済するにはtrueを指定します。STOP_MARKETとTAKE_PROFIT_MARKETでのみ使用できます。この場合もquantityとstopPriceは必須です。stopGuaranteed:保証付きストップ執行を指定するにはtrueを設定します(追加手数料が適用される場合があります)。
ステップ 7 — 確認する(prod-live のみ)
環境が prod-live の場合は、概要を提示して次のように尋ねてください。
Production Live で次の注文を発注しようとしています。
- シンボル:BTC-USDT
- サイド:BUY / LONG
- タイプ:MARKET
- 数量:0.01
続行するには CONFIRM と入力してください。キャンセルする場合は、それ以外を入力してください。
ステップ 8 — 実行して結果を報告する
API 呼び出しを実行し、注文 ID とステータスをユーザーに返してください。
注文キャンセルのフロー
orderId(またはclientOrderId)が指定されていない場合は、尋ねます。prod-liveの場合は、CONFIRMを求めます。- DELETE
/openApi/swap/v2/trade/orderを実行します。
ポジション決済のフロー
- 指定されていない場合は、シンボルを尋ねます。
- オプションを提示します:特定のポジション(LONG/SHORT)を決済するか、すべて決済するか。
prod-liveの場合は、CONFIRMを求めます。- POST
/openApi/swap/v2/trade/closeAllPositionsを使用するか、反対方向のMARKET注文を出します。
レバレッジ設定のフロー
- 指定されていない場合は、シンボルを尋ねます。
- ポジションサイド(LONG/SHORT/両方)を尋ねます。
- レバレッジ値(例:1~125)を尋ねます。
prod-liveの場合は、CONFIRMを求めます。- POST
/openApi/swap/v2/trade/leverageを実行します。
証拠金タイプ設定のフロー
- 指定されていない場合は、シンボルを尋ねます。
- オプションを提示します:ISOLATEDまたはCROSSED。
prod-liveの場合は、CONFIRMを求めます。- POST
/openApi/swap/v2/trade/marginTypeを実行します。
ポジションモード設定のフロー
- オプションを提示します:ヘッジモード(
dualSidePosition: true)またはワンウェイモード(dualSidePosition: false)。 prod-liveの場合は、CONFIRMを求めます。- POST
/openApi/swap/v1/positionSide/dualを実行します。