トレーダー・ブローカー は何をしますか?
Order Executor(発注実行ツール)は、このパックの中で実際の注文につながる可能性がある唯一のスキルであるため、最も厳格です。注文が市場に到達するのは、毎回、すべての注文について、以下の3つの独立したゲートを通過した場合のみです。
- trader-riskが本日この特定の注文を通過させた(フィンガープリントで照合)。
- ユーザーがチャットでこの注文に対して明示的なイエスを入力した。
- ユーザーが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.json | trader-risk の判定結果。今日の PASS のみが READY となります |
trader/state/broker.json | すべてのイエス、ノー、プレース済み、失敗、約定。各エントリの最大損失額を含む |
trader/portfolio.json | 現金と株式。fill と result --filled-qty によって更新されます |
trader/plan.json | flatten のための決済時刻 |
セットアップ A:Alpaca(公式MCPサーバー、Claude Desktop)
Alpaca 自身のサーバーは github.com/alpacahq/alpaca-mcp-server(MITライセンス)です。ユーザーのコンピュータ上の Claude Desktop 内で動作します。Claude のコネクタディレクトリには含まれません。特に指定がない限り、ペーパーアカウントで取引します。2026-10-20 時点のソース(バージョン 2.4.0)で確認済みです。
- ユーザーはAlpacaアカウントを作成し、AlpacaダッシュボードでペーパートレーディングのAPIキーを作成します。ペーパーキーはライブキーとは別のものです。
- ユーザーは
uvをインストールします(uvxを提供します)。docs.astral.sh/uv を参照。 - 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):常に許可で問題ありません。
- 確認: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" を設定します。注文を作成するツールも「承認が必要」に設定します。
手順:エントリー
ticket.py show。READY のチケットのみがユーザーに表示されます。READY または BLOCKED でないチケットは/trader-riskに戻されます。- 1つのチケットを表示し、「この注文を発注しますか?「はい」または「いいえ」で返信してください。」と尋ねます。質問ごとに1つの注文です。「すべてにYes」を決して提案しないでください。
ticket.py approve --index N --reply "<ユーザーの返信をそのまま>"を実行します。"Not recorded" と出力された場合、返信はこの注文に対する明示的なイエスではありませんでした(例:「sure」、「yes to all」、別の銘柄や数量を指定したイエス)。再度尋ねてください。返信を自分でイエスに変えないでください。- "Recorded your yes" の出力があった場合のみ、チケットが表示したJSONとまったく同じ内容で
place_stock_orderを呼び出します。Claude のカードが表示されます:「Allow once」または「Deny」。 - 結果を記録します:
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)までに、まだオープンしているものはクローズされます:- Alpacaに保有株数を尋ねます:
get_open_position(読み取り専用)。 ticket.py flatten --symbol TSLA --qty 8は、その株数の成行売り注文をtrader/orders.jsonに書き込みます。/trader-risk。ユーザーが保有するものだけをクローズする売りは、日次制限やエントリーウィンドウによってブロックされることはありません。ticket.py show、そして上記のようにその注文に対するユーザーのイエス。- ブレケットのストップロスと利益確定はまだそれらの株を拘束しているため、それらがキャンセルされるまでAlpacaは新しい売りを拒否します:
get_orders(ステータス open、nested true)でそれらを表示;cancel_order_by_idでそれぞれをキャンセルします(承認が必要)。その後、チケットを使用してplace_stock_orderを実行し、次にresultを実行します。
- Alpacaに保有株数を尋ねます:
例:リール
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 の設定ファイルにのみ保存され、チャットには決して保存されません。