Community画像github.com

トレーダー・ブローカー

承認された注文を証券会社に送信する発注実行ツールです。デフォルトはペーパートレーディングで、ユーザーの明確な承認なしには決して実行しません。各注文をプレーンチケット(ストップロス、利益確定、およびストップ時の最大損失を含む)とAlpacaのplace_stock_order用の正確なJSONで表示し、ユーザーの「イエス」を逐語記録した上でClaude自身の「Allow once / Deny」カードで再確認します。デイトレード決済時刻までにポジションをクローズする売りチケットも作成し、約定を記録して各トレードの最大損失をログに残します。Alpaca公式MCPサーバーのClaude Desktopへの設定(デフォルトはペーパー、キーは環境変数、チャットには絶対に記載しない)、Interactive Brokersコネクターの設定、および注文ツールを「Needs approval」に設定する手順もカバーします。 ユーザーが「place the order」「buy it」「execute」「send it to my broker」「close my position」「flatten」「get me out」「connect Alpaca」「set up paper trading」と言ったときや、/trader-riskが通過した後に使用します。

トレーダー・ブローカー とは?

トレーダー・ブローカーは、AIエージェント(Claude Code、Claude Desktop、Cursorなど)向けに設計された発注実行スキルです。このスキルは、実際の注文を市場に送信できる唯一のスキルであり、そのため最も厳格な承認プロセスを実装しています。注文が証券会社に送信されるまでには3つの独立したゲートが必要です:trader-riskによるその日のルールチェック合格、ユーザーによるチャット上での明示的な「イエス」、そしてClaudeの権限カードにおける「Allow once」のクリックです。 このスキルはAlpaca(公式MCPサーバー経由)とInteractive Brokersの両方に対応しており、デフォルトではペーパートレーディングアカウントで動作するため、初心者でも安全にテストできます。APIキーは決してチャット上でやり取りせず、環境変数やClaude Desktopの設定ファイルにのみ保存する厳格なセキュリティポリシーを採用しています。 さらに、各注文の最大損失額を計算してログに記録し、デイトレード決済時刻(ニューヨーク時間15:55)までにポジションを自動クローズするためのフラット化チケットを生成します。これにより、リスク管理とコンプライアンスを徹底しながら、AIエージェントが安全にトレードを実行できます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/arv-fazriansyah/antigrafity-trading-skill/tree/HEAD/skills/trader-broker

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

トレーダー・ブローカー は何をしますか?

Order Executor(発注実行ツール)は、このパックの中で実際の注文につながる可能性がある唯一のスキルであるため、最も厳格です。注文が市場に到達するのは、毎回、すべての注文について、以下の3つの独立したゲートを通過した場合のみです。

  1. trader-riskが本日この特定の注文を通過させた(フィンガープリントで照合)。
  2. ユーザーがチャットでこの注文に対して明示的なイエスを入力した。
  3. ユーザーがClaude自身の許可カードで「Allow once」をクリックした。これは、注文ツールが「Needs approval」(承認が必要)に設定されているために表示されます。

ユーザーからの2つのイエス、ルールからの1つのPASS(合格)。イエスがなければ、注文は実行されません。

${CLAUDE_SKILL_DIR} はこのスキルのフォルダ(このSKILL.mdが置かれている場所)です。

python3 "${CLAUDE_SKILL_DIR}/ticket.py" show                     # すべてのチケットを表示(READYかどうか)
python3 "${CLAUDE_SKILL_DIR}/ticket.py" approve --index 1 --reply "yes"
python3 "${CLAUDE_SKILL_DIR}/ticket.py" result --index 1 --status placed --broker-id ID --filled-qty 8 --filled-price 364.20
python3 "${CLAUDE_SKILL_DIR}/ticket.py" fill --symbol TSLA --side sell --qty 8 --price 370.04
python3 "${CLAUDE_SKILL_DIR}/ticket.py" flatten --symbol TSLA --qty 8
python3 "${CLAUDE_SKILL_DIR}/ticket.py" log

ticket.py は証券会社と通信しません。チケットを表示し、返信がその注文に対する本当のイエスであるかを確認し、フラット化チケットを作成し、trader/state/broker.json にログを保持します。--now "2026-10-19 10:15" は時刻を固定します(ニューヨーク時間)。

読み取りと書き込みの対象

ファイル内容
trader/orders.json提案された注文(trader-budget が書き込みます。flatten はこれを置き換えます)
trader/state/risk.jsontrader-risk の判定結果。今日の PASS のみが READY となります
trader/state/broker.jsonすべてのイエス、ノー、プレース済み、失敗、約定。各エントリの最大損失額を含む
trader/portfolio.json現金と株式。fill と result --filled-qty によって更新されます
trader/plan.jsonflatten のための決済時刻

セットアップ A:Alpaca(公式MCPサーバー、Claude Desktop)

Alpaca 自身のサーバーは github.com/alpacahq/alpaca-mcp-server(MITライセンス)です。ユーザーのコンピュータ上の Claude Desktop 内で動作します。Claude のコネクタディレクトリには含まれません。特に指定がない限り、ペーパーアカウントで取引します。2026-10-20 時点のソース(バージョン 2.4.0)で確認済みです。

  1. ユーザーはAlpacaアカウントを作成し、AlpacaダッシュボードでペーパートレーディングのAPIキーを作成します。ペーパーキーはライブキーとは別のものです。
  2. ユーザーは uv をインストールします(uvx を提供します)。docs.astral.sh/uv を参照。
  3. Claude Desktop で:設定 > デベロッパー > 設定を編集 を開きます。これにより claude_desktop_config.json が開きます(macOS:~/Library/Application Support/Claude/、Windows:%APPDATA%\Claude\)。ユーザーは以下のブロックを追加し(このスキル内の claude_desktop_config.example.json にもあります)、自分のキーをファイルに入力します:
{
  "mcpServers": {
    "alpaca": {
      "command": "uvx",
      "args": ["alpaca-mcp-server"],
      "env": {
        "ALPACA_API_KEY": "ここにペーパーキーを貼り付けてください(このファイルのみ)",
        "ALPACA_SECRET_KEY": "ここにペーパーシークレットを貼り付けてください(このファイルのみ)",
        "ALPACA_PAPER_TRADE": "true",
        "ALPACA_TOOLSETS": "account,trading,stock-data"
      }
    }
  }
}

env ブロックはキーを環境変数としてサーバーに渡します。キーは決してチャットに入力しないでください。 キーを要求したり、このファイルを会話に読み戻したり、ユーザーがキーをペーストした場合は、そのメッセージを削除してAlpacaダッシュボードで新しいキーを作成するよう伝えてください。ALPACA_PAPER_TRADE はデフォルトで既に true です。明示的に記述することで可視化されます。ALPACA_TOOLSETS はオプションで、不要なツールを非表示にします。 4. Claude Desktop を再起動します。 5. ツールの権限を設定します。 カスタマイズ > コネクター(古いバージョンでは設定 > コネクター)、alpaca を開き、各ツールに対して「常に許可」、「承認が必要」、または「ブロック」を選択します:

  • place_stock_order:承認が必要。決して「常に許可」にしないでください。
  • 注文を発注、変更、キャンセル、またはクローズするその他すべてのツール(cancel_order_by_id、replace_order_by_id、close_position、update_account_config):承認が必要。
  • place_option_order、place_crypto_order、close_all_positions、cancel_all_orders、exercise_options_position、do_not_exercise_options_position:ブロック。ユーザーに理由があり、そう言った場合を除く。
  • 読み取り専用ツール(get_account_info、get_all_positions、get_open_position、get_orders、get_clock、get_stock_snapshot、get_stock_latest_quote):常に許可で問題ありません。
  1. 確認:ClaudeにAlpacaアカウント情報(読み取り専用)を尋ね、Alpacaダッシュボードでペーパーアカウントであることを確認します。

Claude Desktop ではなく Claude Code を使用する場合は、注文ツールを .claude/settings.json で ask に設定してください:"permissions": {"ask": ["mcp__alpaca__place_stock_order"]}。また、注文ツールを allow に決して入れないでください。

Alpaca でのブレケット注文。 place_stock_order は take_profit_limit_price と stop_loss_stop_price(およびオプションの stop_loss_limit_price)を受け取ります。いずれかが存在する場合、サーバーは自動的に order_class を "bracket" に設定します。trader-budget はチケットに表示するために明示的に指定します。ブレケット注文は株数のみ指定可能で、time_in_force は day または gtc です。エントリーが約定した後、ストップロスと利益確定注文は証券会社で互いにキャンセルし合う2つの注文として待機します。これらもデイ注文であるため、クローズ時に終了します。つまり、その時点までにフラットでいるべきもう一つの理由です。

セットアップ B:Interactive Brokers(Claude のディレクトリ内のコネクター)

Interactive Brokers は検証済みのコネクターを公開しています:claude.ai/directory/interactive-brokers(コネクターURL https://api.ibkr.com/v1/api/mcp)。カスタマイズ > コネクター > コネクターを閲覧 から追加し、そこでIBKRにサインインします。チャットでは行わないでください。そのリストには、Claude はユーザーのレビューと承認のためにトレード指示を作成でき、Claude は直接注文を市場に送信しないと記載されています。したがって、IBKR の場合、最終的なイエスは IBKR 内でも行われます。trader/config.json に "broker": "ibkr" を設定します。注文を作成するツールも「承認が必要」に設定します。

手順:エントリー

  1. ticket.py show。READY のチケットのみがユーザーに表示されます。READY または BLOCKED でないチケットは /trader-risk に戻されます。
  2. 1つのチケットを表示し、「この注文を発注しますか?「はい」または「いいえ」で返信してください。」と尋ねます。質問ごとに1つの注文です。「すべてにYes」を決して提案しないでください。
  3. ticket.py approve --index N --reply "<ユーザーの返信をそのまま>" を実行します。"Not recorded" と出力された場合、返信はこの注文に対する明示的なイエスではありませんでした(例:「sure」、「yes to all」、別の銘柄や数量を指定したイエス)。再度尋ねてください。返信を自分でイエスに変えないでください。
  4. "Recorded your yes" の出力があった場合のみ、チケットが表示したJSONとまったく同じ内容で place_stock_order を呼び出します。Claude のカードが表示されます:「Allow once」または「Deny」。
  5. 結果を記録します:ticket.py result --index N --status placed --broker-id <id> --filled-qty Q --filled-price P(レスポンスまたは get_open_position からの約定情報)、または --status denied、または --status failed に --note を付けます。失敗した注文は、新しいチェックと新しいイエスなしに再試行されません。ログは trader-risk の日次制限のためにエントリーの最大損失を保持します。

手順:ポジションがオープン中、およびクローズまでに

  • trader-alerts はストップ、ターゲット、および決済時刻を監視します(alerts.py add --from-plan)。ブレケット自身の注文がストップロスを処理します。
  • ストップロスまたは利益確定が約定した場合、記録します:ticket.py fill --symbol TSLA --side sell --qty 8 --price 358.32。
  • flat_by(ニューヨーク時間15:55)までに、まだオープンしているものはクローズされます:
    1. Alpacaに保有株数を尋ねます:get_open_position(読み取り専用)。
    2. ticket.py flatten --symbol TSLA --qty 8 は、その株数の成行売り注文を trader/orders.json に書き込みます。
    3. /trader-risk。ユーザーが保有するものだけをクローズする売りは、日次制限やエントリーウィンドウによってブロックされることはありません。
    4. ticket.py show、そして上記のようにその注文に対するユーザーのイエス。
    5. ブレケットのストップロスと利益確定はまだそれらの株を拘束しているため、それらがキャンセルされるまでAlpacaは新しい売りを拒否します:get_orders(ステータス open、nested true)でそれらを表示;cancel_order_by_id でそれぞれをキャンセルします(承認が必要)。その後、チケットを使用して place_stock_order を実行し、次に result を実行します。

例:リール

ORDER 1 of 1, PAPER account, Alpaca
  BUY 8 TSLA, market, good for today
  stop-loss 358.32
  take-profit 370.04
  max loss about $46.88 if the stop fills at 358.32 (it can fill worse in a fast market)
  why: opening-range breakout on TSLA: 8 shares, bound by your $50 max loss per trade (8 x 5.86 = $46.88 at the stop)
  READY: trader-risk PASS, waiting for your yes
  Claude will call place_stock_order with exactly:
    {"symbol": "TSLA", "side": "buy", "qty": "8", "type": "market", "time_in_force": "day",
     "order_class": "bracket", "take_profit_limit_price": "370.04", "stop_loss_stop_price": "358.32"}

ユーザーが「yes」と返信します。Claude はそれを記録し、place_stock_order を呼び出し、カードには「Claude wants to use Place stock order」とそのJSON、そして2つのボタン「Allow once」「Deny」が表示されます。「Allow once」はペーパーアカウントに送信します。why と計画はファイルに残ります。これらが送信されることは決してありません。

決して行わないこと

  • 3つのゲートすべてを通過せずに注文を発注することは決してありません。また、1つのイエスで2つの注文を発注することもありません。
  • スケジュールされたタスクやバックグラウンドタスクから注文を発注することは決してありません。そこにはイエスと言う人がいません。
  • APIキーやパスワードを要求、読み取り、保存、または繰り返すことは決してありません。
  • ALPACA_PAPER_TRADE や "paper" をライブに切り替えることは決してありません。それはユーザー自身が行います。
  • 自分自身で close_all_positions、cancel_all_orders、オプションまたは暗号通貨の注文ツールを呼び出すことは決してありません。
  • 約定価格を約束することは決してありません。成行注文とストップ注文は市場が提供する価格で約定します。

安全性

  • 教育とツールの提供であり、金融アドバイスではありません。PASS はルールチェックであり、推奨ではありません。
  • デフォルトはペーパートレーディング("paper": true)。ライブに切り替えるのはユーザー自身の決定であり、ユーザー自身の設定で行います。
  • このパックで注文を発注するのは trader-broker のみであり、それは以下の3つすべてが揃った場合のみです:trader-risk がその特定の注文を本日通過させたこと、ユーザーがチャットでその特定の注文に対して明示的なイエスを入力したこと、そしてユーザーが Claude のカードで「Allow once」をクリックしたこと(注文ツールが「Needs approval」(承認が必要)に設定されているため)(カスタマイズ > コネクター > ツール権限)。注文ツールを「常に許可」に決して設定しないでください。
  • 設定で許可され、ユーザーが確認しない限り、オプション、マージン、空売り、またはレバレッジは使用しません。
  • ブローカーキーは環境変数または Claude Desktop の設定ファイルにのみ保存され、チャットには決して保存されません。

関連スキル