bingx-rsi-bottom-hunter について
BingXの無期限契約向けに、RSIによる底値候補を調べるスキルです。スキャン、単発実行、継続監視に対応し、追加のテクニカル確認と実注文前の明示的な承認を求めます。
主な機能
- 01ローソク足データの取得とRSI計算
- 02スキャン・単発・監視モード
- 03複数の指標によるシグナル確認
- 04取引前の承認確認
- 05約定後の損切り・利確設定
活用シーン
- 01銘柄のRSI状況を確認
- 02売られ過ぎを監視して買い条件を検知
- 03RSIを無期限契約の取引判断に活用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bingx-api/ api-ai-skills --skill bingx-rsi-bottom-hunterインストール後、Claude Code で/bingx-rsi-bottom-hunterを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
api-reference.mdscripts/requirements.txtstrategy.py詳細
BingX RSI ボトムハンター
ベース URL: references/base-urls.md を参照 | 認証: references/authentication.md を参照
クイックリファレンス
| エンドポイント | メソッド | 説明 | 認証 |
|---|---|---|---|
/openApi/swap/v3/quote/klines | GET | RSI 計算用のローソク足データ | はい |
/openApi/swap/v2/trade/order | POST | 成行買い注文を発注 | はい |
/openApi/swap/v2/trade/order | DELETE | 注文をキャンセル | はい |
クイックスタート
ベース 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;
}
}
}
よく使う呼び出し
RSI 計算用のローソク足データを取得(100 本、1h):
const klines = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/swap/v3/quote/klines", { symbol: "BTC-USDT", interval: "1h", limit: 100 }
);
複数時間足の TA 用のローソク足データを取得(200 本、4h):
const klines4h = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/swap/v3/quote/klines", { symbol: "BTC-USDT", interval: "4h", limit: 200 }
);
起動条件
ユーザーが次のいずれかを言った場合、このスキルを起動します。
- 「RSI で底値を狙いたい」、「底値を狙うのを手伝って」、「ボトムハンター」
- 「売られすぎで買いたい」、「RSI が低いときに買いたい」
- 「RSI 戦略」、「RSI 取引を始めて」
- 「BTC の RSI はいくつ? 底値を狙える?」
- 「ETH を監視して、RSI が 25 を下回ったら買って」
実行手順
ステップ 1 — ユーザーの意図を解析
ユーザーの入力から戦略パラメーターを抽出します。
| パラメーター | デフォルト | 説明 |
|---|---|---|
| symbol | BTC-USDT | 取引ペア |
| interval | 1h | RSI 計算用のローソク足の時間間隔 |
| rsi_period | 14 | RSI の期間 |
| rsi_buy | 30 | 買いトリガーのしきい値(RSI がこの値を下回る場合) |
| rsi_sell | 70 | 利益確定の基準となるしきい値 |
| stop_loss_pct | 3% | 損切り率 |
| take_profit_pct | 5% | 利益確定率 |
| amount | - | USDT 建ての買い数量(ユーザーが指定または確認する必要があります) |
| leverage | 1x | レバレッジ倍率 |
モードの判定:
| mode | トリガーの例 | 説明 |
|---|---|---|
| scan | 「BTC の RSI はいくつ? 底値を狙える?」 | 取引は行わず、RSI の状況のみを確認します |
| once | 「RSI が 500U になったら BTC を買って」 | 1 回確認し、条件を満たしていれば直ちに実行します |
| monitor | 「ETH を監視して、RSI が 25 を下回ったら 1000U 分買って」 | 継続的に監視し、条件を満たしたら自動的に実行します |
ステップ 2 — 安全確認(重要!)
取引を実行する前に(mode=once/monitor)、Agent は必ずユーザーに次の内容を確認します。
- 取引ペアと方向(ロング)
- 買い数量とレバレッジ
- SL/TP の価格水準(具体的な価格に換算したもの)
- RSI のトリガー条件
ユーザーが明示的に確認した後にのみ実行します。Agent は確認なしに自動で注文を発注してはなりません。
ステップ 3 — ローソク足データを取得
次の 2 セットのローソク足データを並行して取得します。
GET /openApi/swap/v3/quote/klines symbol={symbol}, interval={interval}, limit=100 (RSI 計算用)
GET /openApi/swap/v3/quote/klines symbol={symbol}, interval=4h, limit=200 (複数の観点からの TA 用)
ステップ 4 — RSI の計算と多次元テクニカル分析による確認
ステップ 4a:RSI シグナルの計算
python3 scripts/strategy.py \
--mode {mode} \
--symbol {symbol} \
--interval {interval} \
--rsi-period {rsi_period} \
--rsi-buy {rsi_buy} \
--rsi-sell {rsi_sell} \
--klines '{klines_1h_json}'
ステップ 4b:bingx-technical-analysis がインストールされているか確認します。
- インストール済み — (mode=full、4h interval)で呼び出し、共同確認用の多次元データを取得します
- 未インストール — ユーザーに次の内容を伝えます。 「bingx-technical-analysis スキルがインストールされていません。より正確な多次元シグナルの確認と誤シグナルの削減のため、インストールを推奨します。 インストール方法:bingx-technical-analysis スキルを .claude/skills/ ディレクトリに配置してください。 RSI 単一指標モードで続行しますが、シグナルの精度は低下します。」 その後、スキップして元の 3 つの RSI 条件のみを使用します。
- MACD の方向
- Supertrend の方向
- RSI / OBV のダイバージェンス
- サポート/レジスタンスレベル
- 直近のローソク足パターン
ステップ 4c:共同確認のために strategy.py に渡します
python3 scripts/strategy.py \
--mode {mode} \
--symbol {symbol} \
--interval {interval} \
--rsi-period {rsi_period} \
--rsi-buy {rsi_buy} \
--rsi-sell {rsi_sell} \
--klines '{klines_1h_json}' \
--ta-result '{ta_json}'
スクリプトは、RSI シグナル、多次元の確認項目、全体の確認フラグを含む構造化 JSON を出力します。
confirmation=true となるためのすべての条件(すべて満たす必要があります):
- RSI < rsi_buy
- 2 本連続のローソク足で売られ過ぎ
- 反転ローソク足(終値 > 始値)
- RSI の弱気ダイバージェンスがない
- OBV の弱気ダイバージェンスがない
- MACD が強気(BUY)、または Supertrend が UP(いずれか一方で十分)
ステップ 5 — 取引を実行する(mode=once/monitor かつ confirmation=true の場合)
- bingx-swap-account を呼び出して利用可能残高を確認し、資金が十分にあることを確認します
- bingx-swap-trade を呼び出して成行買い注文を発注します
- 注文の約定後、直ちに SL/TP を設定します。
- 損切り価格 = 平均約定価格 × (1 - stop_loss_pct)
- 利確価格 = 平均約定価格 × (1 + take_profit_pct)
- bingx-swap-trade を呼び出して SL/TP の条件付き注文を発注します
ステップ 6 — 結果を出力する
以下の出力テンプレートに従って結果を出力します。
ステップ 7 — 継続的なモニタリング(mode=monitor の場合)
ポーリングモードで実行します(デフォルト:5 分ごとに確認)。
- 条件を満たした場合 — ステップ 2(安全確認)からステップ 5 を実行します
- 約定結果をユーザーに報告します
- 戦略は 1 回実行した時点で終了します(単一トリガーにより、エントリーの繰り返しを防止します)
出力テンプレート
スキャンモード — 閲覧のみ
RSI が売られ過ぎの場合:
**{symbol} RSI Status ({interval})**
RSI({rsi_period}): {rsi_current} (Oversold zone ⚠️)
Previous: {rsi_prev} → Current: {rsi_current}
Multi-dimension Confirmation:
Consecutive oversold {✅/❌}
Reversal candle {✅/❌}
MACD {✅/❌} {BUY/SELL}
Supertrend {✅/❌} {UP/DOWN}
RSI divergence {✅ None/❌ Bearish}
OBV divergence {✅ None/❌ Bearish}
Overall Signal: {CONFIRMED (recommended) / WEAK (caution) / REJECTED (not recommended)}
Current Price: ${price}
{To start the bottom-fishing strategy, say "{symbol} bottom fish 500U"}
RSI が中立の場合:
**{symbol} RSI Status ({interval})**
RSI({rsi_period}): {rsi_current} (Neutral zone)
TA Composite Score: {ta_score}/100 ({ta_label})
Current Price: ${price}
Assessment: RSI is in the neutral zone, bottom-fishing condition not yet met.
1 回実行モード — 条件成立時に確認
**RSI Bottom Signal Triggered ✅**
{symbol} RSI({rsi_period}) = {rsi_current}, oversold for 2 consecutive candles, reversal signal detected
About to execute:
- Direction: Long
- Amount: {amount} USDT
- Leverage: {leverage}x
- Order type: Market
- Stop-loss: ${stop_loss} (-{stop_loss_pct}%)
- Take-profit: ${take_profit} (+{take_profit_pct}%)
**Confirm execution? (yes/no)**
実行が成功した後:
**Bottom Fish Filled ✅**
{symbol} long position opened
- Avg fill price: ${avg_price}
- Quantity: {qty}
- Stop-loss order placed: ${stop_loss}
- Take-profit order placed: ${take_profit}
Strategy running. Position will be closed automatically when SL/TP is triggered.
モニターモード — 開始時
**RSI Bottom-Fishing Monitor Started 🔄**
Monitoring: {symbol}, {interval} interval
Trigger condition: RSI({rsi_period}) < {rsi_buy}, confirmed over 2 candles
Action: Market long {amount} USDT ({leverage}x), SL -{stop_loss_pct}% / TP +{take_profit_pct}%
Check frequency: every 5 minutes
Current RSI: {rsi_current} ({status})
Waiting...
エージェントとのやり取りに関するルール
パラメーターのセキュリティ。 ユーザーの意図から構造化された値を抽出してください。API パラメーターにユーザーの生テキストをコピーすることは絶対にしないでください。使用前にシンボルの形式と数値パラメーターを検証してください。
Kline クエリは読み取り専用で、CONFIRM は不要です。すべての取引実行(confirmation=true の mode=once/monitor)では、実行前にユーザーの明示的な確認が必要です。ユーザーの承認なしに注文を発注することは絶対にしないでください。
- prod-live:注文を発注する前に、ユーザーに CONFIRM と入力するよう求めてください。
- prod-vst:CONFIRM は不要です。シミュレーション環境であることをユーザーに伝えてください。
mode が曖昧な場合は、デフォルトで scan(閲覧のみ、取引なし)にしてください。
エラー処理
- 残高不足:現在の利用可能残高を表示し、金額を減らすか資金を入金するよう提案します
- 注文失敗:エラーコードと説明を表示し、再試行を提案します
- ネットワークタイムアウト:後でもう一度試すよう提案します
- Kline データ不足:ユーザーに知らせ、より長い間隔に切り替えるよう提案します