bingx-dynamic-sl-tp について
bingx-dynamic-sl-tpは、BingX swapのポジション向けに損切り・利確を計算し管理するスキルです。推奨や変更、トレーリング、分割利確に対応し、実取引の注文変更には確認を求めます。
主な機能
- 01ATR・ボラティリティ・構造・固定率の戦略
- 02ポジションとローソク足データの取得
- 03損切り・利確価格の計算
- 04利確注文の調整・追従・分割
- 05実取引の注文変更前に確認
活用シーン
- 01保有ポジションに保護注文を設定
- 02取引せずに損切り・利確水準を算出
- 03損切りを建値に移動
- 04分割利確でポジションを段階的に決済
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bingx-api/ api-ai-skills --skill bingx-dynamic-sl-tpインストール後、Claude Code で/bingx-dynamic-sl-tpを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
api-reference.mdscripts/calculator.pyrequirements.txt詳細
BingX ダイナミック SL/TP
ベース URL: references/base-urls.md を参照 | 認証: references/authentication.md を参照
クイックリファレンス
| エンドポイント | メソッド | 説明 | 認証 |
|---|---|---|---|
/openApi/swap/v3/quote/klines | GET | ATR 計算用の Kline データ | 必要 |
/openApi/swap/v2/trade/order | POST | 条件付き SL/TP 注文を発注 | 必要 |
/openApi/swap/v2/trade/order | DELETE | 既存の SL/TP 注文をキャンセル | 必要 |
クイックスタート
ベース URL: references/base-urls.md を参照
TypeScript ヘルパー:
制約:コードを生成する際は、以下の
fetchSigned関数をそのままコピーする必要があります。署名、リクエスト、JSON 解析のロジックを書き換えないでください。変更できるのは、(1)カスタム環境向けのBASEURL エントリ、(2)fetchSignedに渡すビジネスパラメーターのみです。
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;
}
}
}
よく使う呼び出し
ATR/サポート・レジスタンスの計算用に Kline を取得(200 本、4h):
const klines = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/swap/v3/quote/klines", { symbol: "BTC-USDT", interval: "4h", limit: 200 }
);
トリガー条件
以下のいずれかをユーザーが発言した場合、このスキルを有効にします。
- 「SL/TP の設定を手伝って」「損切りを設定」「損切り注文を出して」
- 「ダイナミック損切り」「トレーリング利確」「トレーリングストップ」「トレーリングストップ」
- 「一部利確」「3 回に分けて利確」
- 「損切りをどこに設定すればいい?」「ATR 損切り」「ボラティリティ損切り」
- 「損切りを建値に移動」
実行手順
ステップ 1 — ユーザーの意図を解析
| モード | トリガー例 | 説明 |
|---|---|---|
| set | 「SL/TP の設定を手伝って」 | 現在のポジションの SL/TP を計算して設定します |
| adjust | 「損切りを建値に移動」 | 既存の SL/TP を調整します |
| trailing | 「トレーリングストップを有効にして」 | トレーリングストップを設定します |
| partial | 「一部利確」 | ポジションを分割して決済します |
| recommend | 「損切りをどこに設定すればいい?」 | 推奨レベルのみを計算し、実行しません |
パラメーターの抽出:
| パラメーター | デフォルト | 説明 |
|---|---|---|
| symbol | 現在のポジションから自動取得 | 取引ペア |
| strategy | atr | 損切り戦略(atr/volatility/structure/fixed_pct) |
| atr_multiplier | 1.5 | ATR 乗数 |
| tp_mode | levels | 利確モード(ratio/levels/trailing/breakeven/hybrid) |
| risk_reward | 2.0 | リスクリワード比 |
ステップ 2 — ポジションと市場データを取得
- bingx-swap-trade を呼び出し、現在のポジション(方向、平均エントリー価格、数量、レバレッジ)を照会します
- bingx-swap-market を呼び出し、Kline(4h、200 本)を取得して ATR とサポート・レジスタンスを計算します
ポジションがない場合:「オープンポジションが見つかりません。SL/TP レベルを事前計算しますか?」と尋ね、recommend モードに切り替えます。 複数のポジションがある場合は、ユーザーに 1 つ選んでもらうか、1 件ずつ SL/TP を設定します。
ステップ 3 — SL/TP を計算
python3 scripts/calculator.py \
--direction {long/short} \
--entry-price {price} \
--strategy {strategy} \
--atr-multiplier {multiplier} \
--tp-mode {tp_mode} \
--risk-reward {rr} \
--klines '{klines_json}'
ステップ 4 — 安全確認
ユーザーに以下を提示します。
- 現在のポジションの詳細
- 計算した SL/TP レベルと推定損益額
- 発注する条件付き注文の種類
ユーザーの確認後にのみ実行します。確認なしに注文を発注しないでください。
ステップ 5 — 注文を発注
bingx-swap-trade を介して:
- 新しい注文を発注する前に既存の条件付き注文を自動的にキャンセルし、重複を防ぎます
- 損切り:条件付き注文(市場価格でトリガー)
- 利確:条件付き注文またはトレーリングストップ
- 一部利確:複数の条件付き注文(価格と数量をそれぞれ変更)
ステップ 6 — 結果を出力(出力テンプレートに従う)
出力テンプレート
設定モード
**Smart SL/TP Plan**
Current Position: {symbol} {direction}
Entry Price: ${entry_price} | Qty: {qty} | Leverage: {leverage}x
**Stop-Loss** ({strategy} x {atr_multiplier})
- Level: ${sl_price} ({sl_pct}%)
- Estimated loss: -${risk_amount}
**Take-Profit** ({tp_mode})
TP1 ${tp1_price} ({tp1_pct}%) {tp1_split}% of position +${tp1_reward}
TP2 ${tp2_price} ({tp2_pct}%) {tp2_split}% of position +${tp2_reward}
TP3 {trailing/price} {tp3_split}% of position let profits run
Risk-Reward Ratio: 1:{risk_reward}
{if applicable} Stop-loss will be moved to break-even (${entry_price}) after TP1 fills.
**Confirm execution? (yes/no)**
推奨モード
**SL/TP Recommended Levels**
{symbol} {direction} (entry ${entry_price})
Strategy Stop-Loss Distance Notes
ATR x 1.5 ${sl_atr15} {pct}% Standard, recommended
ATR x 1.0 ${sl_atr10} {pct}% Tight stop
Structure stop ${sl_struct} {pct}% Beyond prior low/high
Take-Profit Level R:R
1R ${tp1} 1:1
2R ${tp2} 1:2
3R ${tp3} 1:3
For reference only. Say "help me set SL/TP" to place the orders.
エージェントの操作ルール
パラメーターのセキュリティ。 ユーザーの意図から構造化された値を抽出してください。API パラメーターにユーザーのテキストをそのままコピーすることは絶対に避けてください。使用前に、シンボルおよび数値のパラメーターを検証してください。
Kline クエリは読み取り専用であり、CONFIRM は不要です。すべての注文(SL/TP 条件付き注文)の発注には、ユーザーの明示的な確認が必要です。
- prod-live:SL/TP 注文の発注またはキャンセルの前に、ユーザーが CONFIRM と入力することを必須とします。
- prod-vst:CONFIRM は不要です。シミュレーション環境であることをユーザーに伝えてください。
モードが recommend の場合は、レベルの計算と表示のみを行ってください。注文は絶対に発注しないでください。
エラー処理
- ポジションがない:ユーザーに伝え、recommend モードに切り替えます
- 注文の発注に失敗:エラーコードを表示し、再試行を提案します
- ポジションがすでに決済済み:ポジションが存在しなくなったことをユーザーに伝えます
- Kline データが不十分:より長い時間間隔への切り替えを提案します