mcpField
B
bingx-trade-review

bingx-trade-review

github.com/bingx-apiデータ・データベース1967 回インストール6 日前に更新
リポジトリ

bingx-trade-review について

BingX のスワップ取引を振り返るスキルです。取引履歴の集計や詳細分析を行いたいトレーダー向けに、注文・約定履歴を取得し、ローカルのタグや振り返りデータと合わせて統計とチャートを生成します。

主な機能

  1. 01スワップ注文・約定履歴の取得
  2. 02期間と銘柄によるレビューの絞り込み
  3. 03タグ別のパフォーマンス分析
  4. 04ローカルのタグと振り返りの保存
  5. 05統計データとチャートファイルの生成

活用シーン

  1. 01週次取引パフォーマンスのレビュー
  2. 02期間ごとの結果比較
  3. 03タグ付き取引の成績測定
  4. 04取引から得た教訓の振り返り

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bingx-api/api-ai-skills --skill bingx-trade-review

インストール後、Claude Code で/bingx-trade-reviewを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

api-reference.md
scripts/
requirements.txt
review.py
storage.py
tags.py

詳細

BingX 取引レビュー

ベース URL: references/base-urls.md を参照 | 認証: references/authentication.md を参照

クイックリファレンス

エンドポイントメソッド説明認証
/openApi/swap/v2/trade/allOrdersGET過去のスワップ注文を取得はい
/openApi/swap/v2/trade/allFillOrdersGET過去の約定記録を取得はい

クイックスタート

ベース URL: references/base-urls.md を参照

TypeScript ヘルパー:

制約:コードを生成する際は、以下の fetchSigned 関数をそのままコピーする必要があります。署名、リクエスト、JSON 解析のロジックを書き換えてはいけません。変更できるのは、(1) カスタム環境向けの BASE URL エントリ、(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;
    }
  }
}

よく使う呼び出し

レビュー用にスワップ取引履歴を取得する:

const history = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/swap/v2/trade/allOrders", { symbol: "BTC-USDT", limit: 100 }
);

起動条件

ユーザーが次のいずれかを述べた場合、このスキルを起動します。

  • 「取引レビュー」「最近のパフォーマンス」「週間 PnL」「取引サマリー」
  • 「勝率はどのくらい」「取引をレビューして」「取引日誌」
  • 「取引にタグを付ける」「ブレイクアウト取引の勝率」「利益が出ている取引はどれか」
  • 「振り返りを書く」「学んだことを要約する」
  • 「今週と先週を比較する」

実行手順

ステップ 1 — ユーザーの意図を解析する
modeトリガーの例説明
summary「取引レビュー」「最近のパフォーマンス」「週間 PnL」統計サマリーとチャート
detail「BTC の取引を分析して」シンボル別または取引ごとの詳細分析
tag「この取引にタグを付けて」「ブレイクアウト取引の勝率」タグ管理とタグ別統計
reflect「振り返りを書く」「学んだことを要約する」取引の振り返りを追加/表示
compare「今週と先週を比較する」期間をまたいだ比較

パラメーターの抽出:

パラメーターデフォルト説明
period7dレビュー期間(1d/7d/30d/90d/all)
symbolall取引ペアで絞り込み
tag_filter-タグで絞り込み

ステップ 2 — 取引履歴を取得する

bingx-swap-account を呼び出して、次の情報を取得します。

  • 過去の約定(開始/終了時刻、価格、数量、方向)
  • 実現 PnL
  • 手数料

~/.bingx-skills/trade-review/trades.json のローカルタグおよび振り返りデータと統合します。


ステップ 3 — 分析を実行する
python3 scripts/review.py \
  --mode {mode} \
  --period {period} \
  --symbol {symbol} \
  --trades '{trades_json}' \
  --output-dir ~/.bingx-skills/trade-review/charts

出力:統計 JSON とチャート PNG ファイル。


ステップ 4 — 出力を整形する(出力テンプレートに従う)

ステップ 5 — チャートを表示する

チャートはローカルの PNG ファイルとして保存されます。ユーザーにファイルパスを伝えてください。


出力テンプレート

サマリーモード
**Trade Review (Last {period})**

Total Trades     {total_trades}
Win Rate         {win_rate}% ({wins} wins / {losses} losses)
Total PnL        {total_pnl}
Profit Factor    {profit_factor}
Avg per Trade    {avg_pnl}
Best Trade       {max_win}
Worst Trade      {max_loss}
Avg Hold Time    {avg_hold_time}
Max Drawdown     {max_drawdown}
Total Fees       {total_fees}

Long:  {long_count} trades, win rate {long_win_rate}%, PnL {long_pnl}
Short: {short_count} trades, win rate {short_win_rate}%, PnL {short_pnl}

Best Symbol:  {best_symbol} ({best_pnl})
Worst Symbol: {worst_symbol} ({worst_pnl})

Charts saved:
- PnL curve:        ~/.bingx-skills/trade-review/charts/pnl_curve.png
- Win/loss dist:    ~/.bingx-skills/trade-review/charts/win_loss_dist.png
- Symbol breakdown: ~/.bingx-skills/trade-review/charts/symbol_breakdown.png
タグモード
**Tag Analysis: {tag}**

{count} trades tagged with this label

Win Rate    {win_rate}% ({wins} wins / {losses} losses)
Total PnL   {total_pnl}
Avg PnL     {avg_pnl}

Conclusion: {one-line analysis}
比較モード
**{period_a} vs {period_b}**

             {period_a}   {period_b}   Change
Win Rate     {wr_a}%      {wr_b}%      {wr_delta}
Total PnL    {pnl_a}      {pnl_b}      {pnl_delta}
Profit Factor {pf_a}      {pf_b}       {pf_delta}
Trade Count  {cnt_a}      {cnt_b}      {cnt_delta}
Max Drawdown {dd_a}       {dd_b}       {dd_delta}

Summary: {one-line comparison conclusion}

エージェントとのやり取りに関するルール

パラメーターのセキュリティ。 ユーザーの意図から構造化された値を抽出してください。ユーザーの生のテキストを API パラメーターにコピーしてはいけません。

このスキルのすべての操作は読み取り専用です(取引履歴の取得とローカルレポートの生成)。どの環境でも CONFIRM は不要です。

期間が指定されていない場合、デフォルトは 7d です。シンボルが指定されていない場合、デフォルトは all シンボルです。

エラー処理

  • 取引記録がない場合:選択した期間に約定がないことをユーザーに伝える
  • タグが見つからない場合:タグが見つからなかったことを伝え、既存のタグを一覧表示する
  • データ取得に失敗した場合:後でもう一度試すよう提案する
  • チャート生成に失敗した場合:テキストの統計情報は出力し、チャート生成エラーについて注記する

コメント