mcpField
B
bingx-swap-trade

bingx-swap-trade

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

bingx-swap-trade について

HMAC SHA256認証のエンドポイントでBingXの無期限先物取引を操作するエージェント向けスキルです。注文の発注・取消、注文照会、ポジションや証拠金の設定を扱います。

主な機能

  1. 01単一注文と一括注文の発注
  2. 02注文テストと取消の管理
  3. 03注文、約定、ポジション履歴の照会
  4. 04レバレッジ、証拠金、ポジションモードの変更
  5. 05TWAP注文の作成と管理

活用シーン

  1. 01無期限先物の成行注文または指値注文の送信
  2. 02損切り・利確の設定と未約定注文の取消
  3. 03注文状況と過去の約定の確認
  4. 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/orderPOST新しい注文を発注はい
/openApi/swap/v2/trade/order/testPOST注文発注をテスト(約定なし)はい
/openApi/swap/v2/trade/batchOrdersPOST複数の注文を発注(バッチ、最大 5 件)はい
/openApi/swap/v2/trade/orderDELETE注文をキャンセルはい
/openApi/swap/v2/trade/batchOrdersDELETE複数の注文をキャンセルはい
/openApi/swap/v2/trade/allOpenOrdersDELETEすべての未約定注文をキャンセルはい
/openApi/swap/v2/trade/cancelAllAfterPOST自動キャンセルのカウントダウン(キルスイッチ)はい
/openApi/swap/v2/trade/closeAllPositionsPOSTすべてのポジションを決済はい
/openApi/swap/v1/trade/closePositionPOSTpositionId でポジションを決済はい
/openApi/swap/v2/trade/positionMarginPOST分離マージン額を調整はい
/openApi/swap/v1/positionMargin/historyGETマージン調整履歴を照会はい
/openApi/swap/v2/trade/openOrdersGET未約定注文を照会はい
/openApi/swap/v2/trade/openOrderGET単一の未約定注文を照会はい
/openApi/swap/v2/trade/orderGETID で注文を照会はい
/openApi/swap/v1/trade/fullOrderGET注文の詳細を照会はい
/openApi/swap/v2/trade/allOrdersGETすべての過去の注文を照会はい
/openApi/swap/v2/trade/forceOrdersGET清算/ADL 注文を照会はい
/openApi/swap/v2/trade/allFillOrdersGET取引の約定履歴を照会はい
/openApi/swap/v2/trade/fillHistoryGET過去の取引約定の詳細を照会はい
/openApi/swap/v1/twap/openOrdersGET未約定の TWAP 注文を照会はい
/openApi/swap/v1/twap/historyOrdersGETTWAP 注文履歴を照会はい
/openApi/swap/v1/twap/orderDetailGETTWAP 注文の詳細を照会はい
/openApi/swap/v1/twap/orderPOSTTWAP 注文を作成はい
/openApi/swap/v1/twap/cancelOrderPOSTTWAP 注文をキャンセルはい
/openApi/swap/v1/trade/positionHistoryGETポジション履歴を照会はい
/openApi/swap/v1/maintMarginRatioGET維持マージン比率を照会はい
/openApi/swap/v2/trade/marginTypeGETマージンタイプを照会はい
/openApi/swap/v2/trade/marginTypePOSTマージンタイプを設定(ISOLATED/CROSSED)はい
/openApi/swap/v2/trade/leverageGET現在のレバレッジを照会はい
/openApi/swap/v2/trade/leveragePOSTレバレッジを設定はい
/openApi/swap/v1/positionSide/dualGETポジションモードを照会はい
/openApi/swap/v1/positionSide/dualPOSTポジションモードを設定はい
/openApi/swap/v1/trade/assetModeGET資産モードを照会(単一/マルチアセット)はい
/openApi/swap/v1/trade/assetModePOST資産モードを設定(単一/マルチアセット)はい
/openApi/swap/v1/trade/multiAssetsRulesGETマルチアセットのマージンルールを照会はい
/openApi/swap/v1/user/marginAssetsGETマルチアセットモードのマージン資産を照会はい
/openApi/swap/v1/trade/autoAddMarginPOSTポジションの自動マージン追加を設定はい
/openApi/swap/v1/trade/reversePOSTポジションを反転(ワンクリックで反対売買)はい
/openApi/swap/v1/trade/cancelReplacePOST注文をキャンセルして置き換え(アトミック)はい
/openApi/swap/v1/trade/batchCancelReplacePOST複数の注文を一括でキャンセルして置き換えはい
/openApi/swap/v1/trade/amendPOST既存の未約定注文を変更はい
/openApi/swap/v2/trade/getVstPOSTVST(仮想シミュレーション取引)を取得はい

パラメーター

注文パラメーター
  • 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)カスタム環境向けの 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 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 とステータスをユーザーに返してください。


注文キャンセルのフロー
  1. orderId(またはclientOrderId)が指定されていない場合は、尋ねます。
  2. prod-liveの場合は、CONFIRMを求めます。
  3. DELETE /openApi/swap/v2/trade/orderを実行します。
ポジション決済のフロー
  1. 指定されていない場合は、シンボルを尋ねます。
  2. オプションを提示します:特定のポジション(LONG/SHORT)を決済するか、すべて決済するか。
  3. prod-liveの場合は、CONFIRMを求めます。
  4. POST /openApi/swap/v2/trade/closeAllPositionsを使用するか、反対方向のMARKET注文を出します。
レバレッジ設定のフロー
  1. 指定されていない場合は、シンボルを尋ねます。
  2. ポジションサイド(LONG/SHORT/両方)を尋ねます。
  3. レバレッジ値(例:1~125)を尋ねます。
  4. prod-liveの場合は、CONFIRMを求めます。
  5. POST /openApi/swap/v2/trade/leverageを実行します。
証拠金タイプ設定のフロー
  1. 指定されていない場合は、シンボルを尋ねます。
  2. オプションを提示します:ISOLATEDまたはCROSSED。
  3. prod-liveの場合は、CONFIRMを求めます。
  4. POST /openApi/swap/v2/trade/marginTypeを実行します。
ポジションモード設定のフロー
  1. オプションを提示します:ヘッジモード(dualSidePosition: true)またはワンウェイモード(dualSidePosition: false)。
  2. prod-liveの場合は、CONFIRMを求めます。
  3. POST /openApi/swap/v1/positionSide/dualを実行します。

コメント